Basic DC motor control test, rpm feedback by simple impulse signal, PID speed control.
Dependencies: FastPWM mbed FastIO MODSERIAL
main.cpp@4:7cb8986200a7, 2018-03-26 (annotated)
- Committer:
- dzoni
- Date:
- Mon Mar 26 13:00:32 2018 +0000
- Revision:
- 4:7cb8986200a7
- Parent:
- 3:f6c30ada5370
- Child:
- 5:ec4d6e435822
Compiles. No warning. Ready for module test (PWM, LED, Imp. sens.).
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dzoni | 0:bd186184ef2a | 1 | #include "mbed.h" |
dzoni | 1:70c514e10598 | 2 | #include "FastPWM.h" |
dzoni | 2:70918f7f8451 | 3 | #include "FastIO.h" |
dzoni | 0:bd186184ef2a | 4 | |
dzoni | 4:7cb8986200a7 | 5 | #define MODSERIAL_DEFAULT_RX_BUFFER_SIZE 16 |
dzoni | 4:7cb8986200a7 | 6 | #define MODSERIAL_DEFAULT_TX_BUFFER_SIZE 64 |
dzoni | 4:7cb8986200a7 | 7 | #include "MODSERIAL.h" |
dzoni | 4:7cb8986200a7 | 8 | |
dzoni | 4:7cb8986200a7 | 9 | static const PinName IMPULSE_SENSOR_PIN = PinName(10); |
dzoni | 4:7cb8986200a7 | 10 | |
dzoni | 1:70c514e10598 | 11 | FastPWM mypwm(PWM_OUT); |
dzoni | 4:7cb8986200a7 | 12 | FastIn<IMPULSE_SENSOR_PIN> pinImpulseSensorIn; |
dzoni | 0:bd186184ef2a | 13 | |
dzoni | 0:bd186184ef2a | 14 | DigitalOut myled(LED1); |
dzoni | 0:bd186184ef2a | 15 | |
dzoni | 4:7cb8986200a7 | 16 | Timer myTimer; |
dzoni | 4:7cb8986200a7 | 17 | |
dzoni | 3:f6c30ada5370 | 18 | //------------------------------------ |
dzoni | 3:f6c30ada5370 | 19 | // Hyperterminal configuration |
dzoni | 3:f6c30ada5370 | 20 | // 9600 bauds, 8-bit data, no parity |
dzoni | 3:f6c30ada5370 | 21 | //------------------------------------ |
dzoni | 4:7cb8986200a7 | 22 | MODSERIAL pcLink(SERIAL_TX, SERIAL_RX); |
dzoni | 4:7cb8986200a7 | 23 | |
dzoni | 4:7cb8986200a7 | 24 | static const us_timestamp_t periodImpSens = 100000UL; |
dzoni | 4:7cb8986200a7 | 25 | static const us_timestamp_t periodLEDBlink = 1000000UL; |
dzoni | 4:7cb8986200a7 | 26 | static const us_timestamp_t periodPWMWrite = 10000000UL; |
dzoni | 4:7cb8986200a7 | 27 | |
dzoni | 4:7cb8986200a7 | 28 | static us_timestamp_t tStampImpSens = 0UL; |
dzoni | 4:7cb8986200a7 | 29 | static us_timestamp_t tStampLEDBlink = 0UL; |
dzoni | 4:7cb8986200a7 | 30 | static us_timestamp_t tStampPWMWrite = 0UL; |
dzoni | 4:7cb8986200a7 | 31 | |
dzoni | 4:7cb8986200a7 | 32 | static unsigned int uiImpSens = 0U; |
dzoni | 2:70918f7f8451 | 33 | |
dzoni | 0:bd186184ef2a | 34 | int main() { |
dzoni | 4:7cb8986200a7 | 35 | unsigned int uiImpSensTemp = 0U; |
dzoni | 4:7cb8986200a7 | 36 | int iImpSensLastState = 0; |
dzoni | 4:7cb8986200a7 | 37 | |
dzoni | 4:7cb8986200a7 | 38 | pcLink.baud(115200); |
dzoni | 4:7cb8986200a7 | 39 | pcLink.format(8, SerialBase::None, 1); |
dzoni | 4:7cb8986200a7 | 40 | |
dzoni | 1:70c514e10598 | 41 | mypwm.period_us(100); |
dzoni | 1:70c514e10598 | 42 | mypwm.write(0.0); |
dzoni | 0:bd186184ef2a | 43 | |
dzoni | 4:7cb8986200a7 | 44 | myTimer.start(); |
dzoni | 4:7cb8986200a7 | 45 | |
dzoni | 0:bd186184ef2a | 46 | while(1) { |
dzoni | 1:70c514e10598 | 47 | double dPwmDuty = 0.0; |
dzoni | 1:70c514e10598 | 48 | |
dzoni | 4:7cb8986200a7 | 49 | us_timestamp_t tStamp; |
dzoni | 4:7cb8986200a7 | 50 | |
dzoni | 4:7cb8986200a7 | 51 | tStamp = myTimer.read_high_resolution_us(); |
dzoni | 4:7cb8986200a7 | 52 | |
dzoni | 4:7cb8986200a7 | 53 | if (periodLEDBlink < (tStamp - tStampLEDBlink)) |
dzoni | 4:7cb8986200a7 | 54 | { |
dzoni | 4:7cb8986200a7 | 55 | tStampLEDBlink = tStamp; |
dzoni | 4:7cb8986200a7 | 56 | |
dzoni | 4:7cb8986200a7 | 57 | myled = !myled; |
dzoni | 4:7cb8986200a7 | 58 | } |
dzoni | 4:7cb8986200a7 | 59 | |
dzoni | 4:7cb8986200a7 | 60 | if (periodImpSens < (tStamp - tStampImpSens)) |
dzoni | 4:7cb8986200a7 | 61 | { |
dzoni | 4:7cb8986200a7 | 62 | tStampImpSens = tStamp; |
dzoni | 1:70c514e10598 | 63 | |
dzoni | 4:7cb8986200a7 | 64 | uiImpSens = uiImpSensTemp; |
dzoni | 4:7cb8986200a7 | 65 | uiImpSensTemp = 0U; |
dzoni | 1:70c514e10598 | 66 | |
dzoni | 4:7cb8986200a7 | 67 | pcLink.printf("IMP: %u imp.\n", uiImpSens); |
dzoni | 4:7cb8986200a7 | 68 | } |
dzoni | 1:70c514e10598 | 69 | |
dzoni | 4:7cb8986200a7 | 70 | if (periodPWMWrite < (tStamp - tStampPWMWrite)) |
dzoni | 4:7cb8986200a7 | 71 | { |
dzoni | 4:7cb8986200a7 | 72 | tStampPWMWrite = tStamp; |
dzoni | 4:7cb8986200a7 | 73 | |
dzoni | 4:7cb8986200a7 | 74 | mypwm.write(dPwmDuty); |
dzoni | 4:7cb8986200a7 | 75 | pcLink.printf("PWM: %.2f %%\n", mypwm.read() * 100); |
dzoni | 4:7cb8986200a7 | 76 | |
dzoni | 4:7cb8986200a7 | 77 | dPwmDuty += 0.1; |
dzoni | 4:7cb8986200a7 | 78 | |
dzoni | 4:7cb8986200a7 | 79 | if (1.0 < dPwmDuty) |
dzoni | 4:7cb8986200a7 | 80 | { |
dzoni | 1:70c514e10598 | 81 | dPwmDuty = 0.0; |
dzoni | 1:70c514e10598 | 82 | } |
dzoni | 1:70c514e10598 | 83 | } |
dzoni | 4:7cb8986200a7 | 84 | |
dzoni | 4:7cb8986200a7 | 85 | // Impulse sensor |
dzoni | 4:7cb8986200a7 | 86 | int iTemp = pinImpulseSensorIn.read(); |
dzoni | 4:7cb8986200a7 | 87 | if (iTemp != iImpSensLastState) |
dzoni | 4:7cb8986200a7 | 88 | { |
dzoni | 4:7cb8986200a7 | 89 | iImpSensLastState = iTemp; |
dzoni | 4:7cb8986200a7 | 90 | uiImpSensTemp++; |
dzoni | 4:7cb8986200a7 | 91 | } |
dzoni | 0:bd186184ef2a | 92 | } |
dzoni | 0:bd186184ef2a | 93 | } |