動作確認済み

Dependents:   NewMD2 NewMD3

Committer:
inst
Date:
Sun Jul 03 01:25:10 2016 +0000
Revision:
2:3d70888e91c6
Parent:
1:b85088467ae0
Child:
4:aa4eca6acb60
set??duty????????

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 1:b85088467ae0 8 const uint32_t GMD<MIN, MAX>::_default_frequency_kHz = 50;
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 1:b85088467ae0 15 set_frequency_kHz(_default_frequency_kHz);
inst 1:b85088467ae0 16 }
inst 1:b85088467ae0 17
inst 1:b85088467ae0 18 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 19 void GMD<MIN, MAX>::set_frequency_kHz(float f_kHz) {
inst 1:b85088467ae0 20 _pwm[0]->period_ticks(_frequency_to_tick_coeff / f_kHz);
inst 1:b85088467ae0 21 _pwm[1]->period_ticks(_frequency_to_tick_coeff / f_kHz);
inst 1:b85088467ae0 22 }
inst 1:b85088467ae0 23
inst 2:3d70888e91c6 24 float sign(float n) {
inst 2:3d70888e91c6 25 if (n < 0.0f) {
inst 1:b85088467ae0 26 return -1.0f;
inst 1:b85088467ae0 27 }
inst 1:b85088467ae0 28 return 1.0f;
inst 1:b85088467ae0 29 }
inst 1:b85088467ae0 30
inst 1:b85088467ae0 31 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 32 float GMD<MIN, MAX>::set(float p) {
inst 1:b85088467ae0 33 p = std::max(-1.0f, std::min(p, 1.0f));
inst 2:3d70888e91c6 34
inst 2:3d70888e91c6 35 p = (abs(p) * (MAX - MIN) + MIN) * sign(p);
inst 1:b85088467ae0 36 p *= 0.01f;
inst 1:b85088467ae0 37
inst 1:b85088467ae0 38 if (p < 0.0f) {
inst 2:3d70888e91c6 39 _pwm[0]->write(-p);
inst 1:b85088467ae0 40 _pwm[1]->write(0.0f);
inst 1:b85088467ae0 41 } else {
inst 1:b85088467ae0 42 _pwm[0]->write(0.0f);
inst 1:b85088467ae0 43 _pwm[1]->write(p);
inst 1:b85088467ae0 44 }
inst 1:b85088467ae0 45 _shut_down = 1;
inst 1:b85088467ae0 46 return p;
inst 1:b85088467ae0 47 }
inst 1:b85088467ae0 48
inst 1:b85088467ae0 49 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 50 void GMD<MIN, MAX>::release() {
inst 1:b85088467ae0 51 _shut_down = 0;
inst 1:b85088467ae0 52 }
inst 1:b85088467ae0 53
inst 1:b85088467ae0 54 template <size_t MIN, size_t MAX>
inst 1:b85088467ae0 55 float GMD<MIN, MAX>::operator=(float p) {
inst 1:b85088467ae0 56 return set(p);
inst 1:b85088467ae0 57 }
inst 1:b85088467ae0 58