motor controller

Dependencies:   mbed plotter

Committer:
dicarloj
Date:
Sun Nov 06 03:09:28 2016 +0000
Revision:
7:ed19a937daa0
Parent:
2:7312ac02785d
works at 200V

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dicarloj 2:7312ac02785d 1 #include "pwm_in.h"
dicarloj 2:7312ac02785d 2 #include "mbed.h"
dicarloj 2:7312ac02785d 3
dicarloj 2:7312ac02785d 4 float map(float x, float in_min, float in_max, float out_min, float out_max)
dicarloj 2:7312ac02785d 5 {
dicarloj 2:7312ac02785d 6 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
dicarloj 2:7312ac02785d 7 }
dicarloj 2:7312ac02785d 8
dicarloj 2:7312ac02785d 9 float constrain(float in, float min, float max)
dicarloj 2:7312ac02785d 10 {
dicarloj 2:7312ac02785d 11 if(in > max) return max;
dicarloj 2:7312ac02785d 12 if(in < min) return min;
dicarloj 2:7312ac02785d 13 return in;
dicarloj 2:7312ac02785d 14 }
dicarloj 2:7312ac02785d 15
dicarloj 2:7312ac02785d 16 PWM_IN::PWM_IN(PinName pin, int usec_min, int usec_max)
dicarloj 2:7312ac02785d 17 {
dicarloj 2:7312ac02785d 18 int_in = new InterruptIn(pin);
dicarloj 2:7312ac02785d 19 dig_in = new DigitalIn(pin);
dicarloj 2:7312ac02785d 20 int_in->rise(this, &PWM_IN::handle_rise);
dicarloj 2:7312ac02785d 21 int_in->fall(this, &PWM_IN::handle_fall);
dicarloj 2:7312ac02785d 22 this->usec_min = usec_min;
dicarloj 2:7312ac02785d 23 this->usec_max = usec_max;
dicarloj 2:7312ac02785d 24 }
dicarloj 2:7312ac02785d 25
dicarloj 2:7312ac02785d 26
dicarloj 2:7312ac02785d 27 bool PWM_IN::get_enabled()
dicarloj 2:7312ac02785d 28 {
dicarloj 2:7312ac02785d 29 return enabled;
dicarloj 2:7312ac02785d 30 }
dicarloj 2:7312ac02785d 31
dicarloj 2:7312ac02785d 32 void PWM_IN::handle_rise()
dicarloj 2:7312ac02785d 33 {
dicarloj 2:7312ac02785d 34 enabled = true;
dicarloj 2:7312ac02785d 35 timer.stop();
dicarloj 2:7312ac02785d 36 timer.reset();
dicarloj 2:7312ac02785d 37 timer.start();
dicarloj 2:7312ac02785d 38 was_on = true;
dicarloj 2:7312ac02785d 39 }
dicarloj 2:7312ac02785d 40
dicarloj 2:7312ac02785d 41 void PWM_IN::handle_fall()
dicarloj 2:7312ac02785d 42 {
dicarloj 2:7312ac02785d 43 was_on = false;
dicarloj 2:7312ac02785d 44 usecs = timer.read_us();
dicarloj 2:7312ac02785d 45 timer.stop();
dicarloj 2:7312ac02785d 46 timer.reset();
dicarloj 2:7312ac02785d 47 timer.start();
dicarloj 2:7312ac02785d 48 }
dicarloj 2:7312ac02785d 49
dicarloj 2:7312ac02785d 50 float PWM_IN::get_throttle()
dicarloj 2:7312ac02785d 51 {
dicarloj 2:7312ac02785d 52 if(timer.read_us() > 40000) enabled = false;
dicarloj 2:7312ac02785d 53 if(!enabled) return -1;
dicarloj 2:7312ac02785d 54 return constrain(map((float)usecs, usec_min, usec_max, 0, 1), 0, 1);
dicarloj 2:7312ac02785d 55 }
dicarloj 2:7312ac02785d 56