
MBED Application board used to control frequency and duty cycle of injector valves
coil-driver.cpp@0:9b2c760c8e5c, 2017-07-25 (annotated)
- Committer:
- iwolf32
- Date:
- Tue Jul 25 14:29:20 2017 +0000
- Revision:
- 0:9b2c760c8e5c
REV1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
iwolf32 | 0:9b2c760c8e5c | 1 | // Begin sample code |
iwolf32 | 0:9b2c760c8e5c | 2 | /* |
iwolf32 | 0:9b2c760c8e5c | 3 | #include "mbed.h" |
iwolf32 | 0:9b2c760c8e5c | 4 | #include "rtos.h" |
iwolf32 | 0:9b2c760c8e5c | 5 | #include "coil-driver.h" |
iwolf32 | 0:9b2c760c8e5c | 6 | // Coil parameters [control pin, spike time (us), hold time period (us), hold time pulse width (us)] |
iwolf32 | 0:9b2c760c8e5c | 7 | Coil orange(A0, 500, 40, 3); // Valve driven by pin A0, 500us spike time, 25kHz PWM at 7.5% duty cycle |
iwolf32 | 0:9b2c760c8e5c | 8 | |
iwolf32 | 0:9b2c760c8e5c | 9 | Coil yellow(A1, 5000, 40, 6); // Valve driven by pin A1, 5ms spike time, 25kHz PWM at 15% duty cycle |
iwolf32 | 0:9b2c760c8e5c | 10 | |
iwolf32 | 0:9b2c760c8e5c | 11 | int main() |
iwolf32 | 0:9b2c760c8e5c | 12 | { |
iwolf32 | 0:9b2c760c8e5c | 13 | while (true) { |
iwolf32 | 0:9b2c760c8e5c | 14 | orange.on(); |
iwolf32 | 0:9b2c760c8e5c | 15 | yellow.on(); |
iwolf32 | 0:9b2c760c8e5c | 16 | Thread::wait(500); |
iwolf32 | 0:9b2c760c8e5c | 17 | orange.off(); |
iwolf32 | 0:9b2c760c8e5c | 18 | yellow.off(); |
iwolf32 | 0:9b2c760c8e5c | 19 | Thread::wait(500); |
iwolf32 | 0:9b2c760c8e5c | 20 | } |
iwolf32 | 0:9b2c760c8e5c | 21 | } |
iwolf32 | 0:9b2c760c8e5c | 22 | */ |
iwolf32 | 0:9b2c760c8e5c | 23 | // End sample code |
iwolf32 | 0:9b2c760c8e5c | 24 | |
iwolf32 | 0:9b2c760c8e5c | 25 | #include "coil-driver.h" |
iwolf32 | 0:9b2c760c8e5c | 26 | |
iwolf32 | 0:9b2c760c8e5c | 27 | // Default constructor |
iwolf32 | 0:9b2c760c8e5c | 28 | Coil::Coil(PinName _controlPin, uint16_t _spikeus, uint16_t _holdperiod_us, uint16_t _holdpulse_us) |
iwolf32 | 0:9b2c760c8e5c | 29 | : controlOut(_controlPin), |
iwolf32 | 0:9b2c760c8e5c | 30 | spikeus(_spikeus), |
iwolf32 | 0:9b2c760c8e5c | 31 | holdperiod_us(_holdperiod_us), |
iwolf32 | 0:9b2c760c8e5c | 32 | holdpulse_us(_holdpulse_us) |
iwolf32 | 0:9b2c760c8e5c | 33 | { |
iwolf32 | 0:9b2c760c8e5c | 34 | controlOut.write(0.0); // Ensure coil output is off by default |
iwolf32 | 0:9b2c760c8e5c | 35 | controlOut.period_us(holdperiod_us); // PWM control period (uint16_t microseconds) |
iwolf32 | 0:9b2c760c8e5c | 36 | |
iwolf32 | 0:9b2c760c8e5c | 37 | }; |
iwolf32 | 0:9b2c760c8e5c | 38 | |
iwolf32 | 0:9b2c760c8e5c | 39 | void Coil::on() |
iwolf32 | 0:9b2c760c8e5c | 40 | { |
iwolf32 | 0:9b2c760c8e5c | 41 | controlOut.write(1.0); |
iwolf32 | 0:9b2c760c8e5c | 42 | wait_us(spikeus); |
iwolf32 | 0:9b2c760c8e5c | 43 | controlOut.pulsewidth_us(holdpulse_us); |
iwolf32 | 0:9b2c760c8e5c | 44 | } |
iwolf32 | 0:9b2c760c8e5c | 45 | |
iwolf32 | 0:9b2c760c8e5c | 46 | void Coil::off() |
iwolf32 | 0:9b2c760c8e5c | 47 | { |
iwolf32 | 0:9b2c760c8e5c | 48 | controlOut.write(0.0); |
iwolf32 | 0:9b2c760c8e5c | 49 | } |