動作確認済み

Dependents:   NewMD2 NewMD3

Committer:
inst
Date:
Wed Aug 03 02:12:39 2016 +0000
Revision:
5:b3c1c5db8489
Parent:
4:aa4eca6acb60
Child:
9:0d8dbe2671cd
??????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
inst 1:b85088467ae0 1 #include <algorithm>
inst 1:b85088467ae0 2 #include "GMD.hpp"
inst 1:b85088467ae0 3
inst 1:b85088467ae0 4 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 5 const float GMD<MIN, MAX>::_frequency_to_tick_coeff = 3300.0f;
inst 1:b85088467ae0 6
inst 1:b85088467ae0 7 template <size_t MIN, size_t MAX>
inst 5:b3c1c5db8489 8 const uint32_t GMD<MIN, MAX>::_default_frequency_kHz = 20;
inst 1:b85088467ae0 9
inst 1:b85088467ae0 10 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 11 GMD<MIN, MAX>::GMD(PinName p0, PinName p1, PinName shut_down) : _shut_down(shut_down, 1) {
inst 1:b85088467ae0 12 _pwm[0] = new FastPWM(p0);
inst 1:b85088467ae0 13 _pwm[1] = new FastPWM(p1);
inst 1:b85088467ae0 14
inst 5:b3c1c5db8489 15
inst 4:aa4eca6acb60 16 _pwm[0]->write(0.0f);
inst 4:aa4eca6acb60 17 _pwm[1]->write(0.0f);
inst 4:aa4eca6acb60 18
inst 1:b85088467ae0 19 set_frequency_kHz(_default_frequency_kHz);
inst 1:b85088467ae0 20 }
inst 1:b85088467ae0 21
inst 1:b85088467ae0 22 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 23 void GMD<MIN, MAX>::set_frequency_kHz(float f_kHz) {
inst 1:b85088467ae0 24 _pwm[0]->period_ticks(_frequency_to_tick_coeff / f_kHz);
inst 1:b85088467ae0 25 _pwm[1]->period_ticks(_frequency_to_tick_coeff / f_kHz);
inst 1:b85088467ae0 26 }
inst 1:b85088467ae0 27
inst 2:3d70888e91c6 28 float sign(float n) {
inst 2:3d70888e91c6 29 if (n < 0.0f) {
inst 1:b85088467ae0 30 return -1.0f;
inst 1:b85088467ae0 31 }
inst 1:b85088467ae0 32 return 1.0f;
inst 1:b85088467ae0 33 }
inst 1:b85088467ae0 34
inst 1:b85088467ae0 35 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 36 float GMD<MIN, MAX>::set(float p) {
inst 1:b85088467ae0 37 p = std::max(-1.0f, std::min(p, 1.0f));
inst 2:3d70888e91c6 38
inst 2:3d70888e91c6 39 p = (abs(p) * (MAX - MIN) + MIN) * sign(p);
inst 1:b85088467ae0 40 p *= 0.01f;
inst 1:b85088467ae0 41
inst 1:b85088467ae0 42 if (p < 0.0f) {
inst 2:3d70888e91c6 43 _pwm[0]->write(-p);
inst 1:b85088467ae0 44 _pwm[1]->write(0.0f);
inst 1:b85088467ae0 45 } else {
inst 1:b85088467ae0 46 _pwm[0]->write(0.0f);
inst 1:b85088467ae0 47 _pwm[1]->write(p);
inst 1:b85088467ae0 48 }
inst 1:b85088467ae0 49 _shut_down = 1;
inst 1:b85088467ae0 50 return p;
inst 1:b85088467ae0 51 }
inst 1:b85088467ae0 52
inst 1:b85088467ae0 53 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 54 void GMD<MIN, MAX>::release() {
inst 1:b85088467ae0 55 _shut_down = 0;
inst 1:b85088467ae0 56 }
inst 1:b85088467ae0 57
inst 1:b85088467ae0 58 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 59 float GMD<MIN, MAX>::operator=(float p) {
inst 1:b85088467ae0 60 return set(p);
inst 1:b85088467ae0 61 }
inst 1:b85088467ae0 62