
Example brushed dc motor example using an H-Bridge for motor direction/speed control and an opto interrupter for position/velocity feedback.
main.cpp@0:6f586d7c134c, 2012-10-11 (annotated)
- Committer:
- lhiggs
- Date:
- Thu Oct 11 23:10:44 2012 +0000
- Revision:
- 0:6f586d7c134c
First version of motor control example using an opto interrupter and H-Bridge.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lhiggs | 0:6f586d7c134c | 1 | #include "mbed.h" |
lhiggs | 0:6f586d7c134c | 2 | |
lhiggs | 0:6f586d7c134c | 3 | PwmOut EN(p22); |
lhiggs | 0:6f586d7c134c | 4 | DigitalOut A1(p16); |
lhiggs | 0:6f586d7c134c | 5 | DigitalOut A2(p17); |
lhiggs | 0:6f586d7c134c | 6 | |
lhiggs | 0:6f586d7c134c | 7 | Serial pc(USBTX, USBRX); |
lhiggs | 0:6f586d7c134c | 8 | |
lhiggs | 0:6f586d7c134c | 9 | long float delta_time = 0; |
lhiggs | 0:6f586d7c134c | 10 | float rpm = 0; |
lhiggs | 0:6f586d7c134c | 11 | float inc_enc_constant = 0.03125; // 32 Encoder Ticks per Revolution |
lhiggs | 0:6f586d7c134c | 12 | |
lhiggs | 0:6f586d7c134c | 13 | |
lhiggs | 0:6f586d7c134c | 14 | Timer t; |
lhiggs | 0:6f586d7c134c | 15 | // t.read_us() is 32bit interger, max 2^31 - 1 = 2147483647 us = 2147.483647 s = 35.7913941167 min |
lhiggs | 0:6f586d7c134c | 16 | |
lhiggs | 0:6f586d7c134c | 17 | class Counter |
lhiggs | 0:6f586d7c134c | 18 | { |
lhiggs | 0:6f586d7c134c | 19 | public: |
lhiggs | 0:6f586d7c134c | 20 | |
lhiggs | 0:6f586d7c134c | 21 | |
lhiggs | 0:6f586d7c134c | 22 | Counter(PinName pin) : _interrupt(pin) { // create the InterruptIn on the pin specified to Counter |
lhiggs | 0:6f586d7c134c | 23 | _interrupt.fall(this, &Counter::increment); // attach increment function of this counter instance |
lhiggs | 0:6f586d7c134c | 24 | } |
lhiggs | 0:6f586d7c134c | 25 | |
lhiggs | 0:6f586d7c134c | 26 | |
lhiggs | 0:6f586d7c134c | 27 | void increment() { |
lhiggs | 0:6f586d7c134c | 28 | delta_time = t.read_us(); |
lhiggs | 0:6f586d7c134c | 29 | t.reset(); |
lhiggs | 0:6f586d7c134c | 30 | |
lhiggs | 0:6f586d7c134c | 31 | rpm = ( inc_enc_constant / (delta_time/1000000) ) *60 ; // rev / m |
lhiggs | 0:6f586d7c134c | 32 | |
lhiggs | 0:6f586d7c134c | 33 | _count++; |
lhiggs | 0:6f586d7c134c | 34 | } |
lhiggs | 0:6f586d7c134c | 35 | |
lhiggs | 0:6f586d7c134c | 36 | int read() { |
lhiggs | 0:6f586d7c134c | 37 | return _count; |
lhiggs | 0:6f586d7c134c | 38 | } |
lhiggs | 0:6f586d7c134c | 39 | |
lhiggs | 0:6f586d7c134c | 40 | private: |
lhiggs | 0:6f586d7c134c | 41 | InterruptIn _interrupt; |
lhiggs | 0:6f586d7c134c | 42 | volatile int _count; |
lhiggs | 0:6f586d7c134c | 43 | }; |
lhiggs | 0:6f586d7c134c | 44 | |
lhiggs | 0:6f586d7c134c | 45 | |
lhiggs | 0:6f586d7c134c | 46 | |
lhiggs | 0:6f586d7c134c | 47 | |
lhiggs | 0:6f586d7c134c | 48 | |
lhiggs | 0:6f586d7c134c | 49 | Counter counter(p30); // opto interrupter counter |
lhiggs | 0:6f586d7c134c | 50 | |
lhiggs | 0:6f586d7c134c | 51 | int main() |
lhiggs | 0:6f586d7c134c | 52 | { |
lhiggs | 0:6f586d7c134c | 53 | pc.baud(115200); |
lhiggs | 0:6f586d7c134c | 54 | EN.period(0.020); |
lhiggs | 0:6f586d7c134c | 55 | |
lhiggs | 0:6f586d7c134c | 56 | t.start(); |
lhiggs | 0:6f586d7c134c | 57 | |
lhiggs | 0:6f586d7c134c | 58 | float duty = 0.10; |
lhiggs | 0:6f586d7c134c | 59 | |
lhiggs | 0:6f586d7c134c | 60 | while(1) { |
lhiggs | 0:6f586d7c134c | 61 | |
lhiggs | 0:6f586d7c134c | 62 | wait(1); |
lhiggs | 0:6f586d7c134c | 63 | |
lhiggs | 0:6f586d7c134c | 64 | EN.write(duty); |
lhiggs | 0:6f586d7c134c | 65 | duty = duty + 0.01; // increment H-Bridge EN PWM duty cycle 1% |
lhiggs | 0:6f586d7c134c | 66 | A1 = 1; // set H-Bridge input A1 high |
lhiggs | 0:6f586d7c134c | 67 | A2 = 0; // set H-Bridge input A2 low |
lhiggs | 0:6f586d7c134c | 68 | |
lhiggs | 0:6f586d7c134c | 69 | // pc.printf("Count so far: %d\n", counter.read()); |
lhiggs | 0:6f586d7c134c | 70 | // pc.printf("dt: %d\n", delta_time); |
lhiggs | 0:6f586d7c134c | 71 | |
lhiggs | 0:6f586d7c134c | 72 | pc.printf("RPM: %f\n", rpm); |
lhiggs | 0:6f586d7c134c | 73 | pc.printf("DUTY CYCLE: %f\n",duty); |
lhiggs | 0:6f586d7c134c | 74 | |
lhiggs | 0:6f586d7c134c | 75 | } |
lhiggs | 0:6f586d7c134c | 76 | } |