動作確認済み

Dependents:   NewMD2 NewMD3

Committer:
inst
Date:
Thu Aug 25 04:59:47 2016 +0000
Revision:
10:2fa9eeafd727
Parent:
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 10:2fa9eeafd727 11 const float GMD<MIN, MAX>::_threshold = 0.02f;
inst 10:2fa9eeafd727 12
inst 10:2fa9eeafd727 13 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 14 GMD<MIN, MAX>::GMD(PinName p0, PinName p1, PinName shut_down) : _shut_down(shut_down, 1) {
inst 1:b85088467ae0 15 _pwm[0] = new FastPWM(p0);
inst 1:b85088467ae0 16 _pwm[1] = new FastPWM(p1);
inst 1:b85088467ae0 17
inst 4:aa4eca6acb60 18 _pwm[0]->write(0.0f);
inst 4:aa4eca6acb60 19 _pwm[1]->write(0.0f);
inst 4:aa4eca6acb60 20
inst 1:b85088467ae0 21 set_frequency_kHz(_default_frequency_kHz);
inst 1:b85088467ae0 22 }
inst 1:b85088467ae0 23
inst 1:b85088467ae0 24 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 25 void GMD<MIN, MAX>::set_frequency_kHz(float f_kHz) {
inst 1:b85088467ae0 26 _pwm[0]->period_ticks(_frequency_to_tick_coeff / f_kHz);
inst 1:b85088467ae0 27 _pwm[1]->period_ticks(_frequency_to_tick_coeff / f_kHz);
inst 1:b85088467ae0 28 }
inst 1:b85088467ae0 29
inst 2:3d70888e91c6 30 float sign(float n) {
inst 2:3d70888e91c6 31 if (n < 0.0f) {
inst 1:b85088467ae0 32 return -1.0f;
inst 1:b85088467ae0 33 }
inst 1:b85088467ae0 34 return 1.0f;
inst 1:b85088467ae0 35 }
inst 1:b85088467ae0 36
inst 1:b85088467ae0 37 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 38 float GMD<MIN, MAX>::set(float p) {
inst 10:2fa9eeafd727 39 if (abs(p) < _threshold) {
inst 10:2fa9eeafd727 40 _pwm[0]->write(0.0f);
inst 10:2fa9eeafd727 41 _pwm[1]->write(0.0f);
inst 10:2fa9eeafd727 42 _shut_down = 1;
inst 10:2fa9eeafd727 43 return p;
inst 10:2fa9eeafd727 44 }
inst 10:2fa9eeafd727 45
inst 1:b85088467ae0 46 p = std::max(-1.0f, std::min(p, 1.0f));
inst 2:3d70888e91c6 47
inst 2:3d70888e91c6 48 p = (abs(p) * (MAX - MIN) + MIN) * sign(p);
inst 1:b85088467ae0 49 p *= 0.01f;
inst 1:b85088467ae0 50
inst 1:b85088467ae0 51 if (p < 0.0f) {
inst 2:3d70888e91c6 52 _pwm[0]->write(-p);
inst 1:b85088467ae0 53 _pwm[1]->write(0.0f);
inst 1:b85088467ae0 54 } else {
inst 1:b85088467ae0 55 _pwm[0]->write(0.0f);
inst 1:b85088467ae0 56 _pwm[1]->write(p);
inst 1:b85088467ae0 57 }
inst 1:b85088467ae0 58 _shut_down = 1;
inst 1:b85088467ae0 59 return p;
inst 1:b85088467ae0 60 }
inst 1:b85088467ae0 61
inst 1:b85088467ae0 62 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 63 void GMD<MIN, MAX>::release() {
inst 1:b85088467ae0 64 _shut_down = 0;
inst 1:b85088467ae0 65 }
inst 1:b85088467ae0 66
inst 1:b85088467ae0 67 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 68 float GMD<MIN, MAX>::operator=(float p) {
inst 1:b85088467ae0 69 return set(p);
inst 1:b85088467ae0 70 }
inst 1:b85088467ae0 71