Drain batteries through an LM324 controlled CEB6030L from a defunct graphics card
Dependencies: mbed FastAnalogIn PID mbed-rtos
main.cpp@0:e7492a4f4b2f, 2016-07-05 (annotated)
- Committer:
- eisd
- Date:
- Tue Jul 05 08:39:20 2016 +0000
- Revision:
- 0:e7492a4f4b2f
- Child:
- 1:712b9b5470d4
Rough hand calibration
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eisd | 0:e7492a4f4b2f | 1 | #include "mbed.h" |
eisd | 0:e7492a4f4b2f | 2 | #include "rtos.h" |
eisd | 0:e7492a4f4b2f | 3 | #include "FastAnalogIn.h" |
eisd | 0:e7492a4f4b2f | 4 | |
eisd | 0:e7492a4f4b2f | 5 | AnalogOut Iset(PTE30); |
eisd | 0:e7492a4f4b2f | 6 | FastAnalogIn Iget(PTE20); |
eisd | 0:e7492a4f4b2f | 7 | AnalogIn Vbat(PTB0); |
eisd | 0:e7492a4f4b2f | 8 | int flop = 0; |
eisd | 0:e7492a4f4b2f | 9 | void adjust() { |
eisd | 0:e7492a4f4b2f | 10 | //flop = (flop + 1) % 4; |
eisd | 0:e7492a4f4b2f | 11 | Iset.write(flop == 0? 0.2/4.61 : 0); |
eisd | 0:e7492a4f4b2f | 12 | } |
eisd | 0:e7492a4f4b2f | 13 | float k = 0.01, iget = Iget.read(), vbat = Vbat.read(), vbat_rest = Vbat.read(); |
eisd | 0:e7492a4f4b2f | 14 | void filter() { |
eisd | 0:e7492a4f4b2f | 15 | iget = k * Iget.read() + (1 - k) * iget; |
eisd | 0:e7492a4f4b2f | 16 | vbat = k * Vbat.read() + (1 - k) * vbat; |
eisd | 0:e7492a4f4b2f | 17 | if (Iset.read() == 0) |
eisd | 0:e7492a4f4b2f | 18 | vbat_rest = k * Vbat.read() + (1 - k) * vbat; |
eisd | 0:e7492a4f4b2f | 19 | } |
eisd | 0:e7492a4f4b2f | 20 | int main() |
eisd | 0:e7492a4f4b2f | 21 | { |
eisd | 0:e7492a4f4b2f | 22 | Ticker t; |
eisd | 0:e7492a4f4b2f | 23 | t.attach(&adjust, 5.0); |
eisd | 0:e7492a4f4b2f | 24 | Ticker t2; |
eisd | 0:e7492a4f4b2f | 25 | t2.attach_us(&filter, 1000); |
eisd | 0:e7492a4f4b2f | 26 | Iset.write(0.0); |
eisd | 0:e7492a4f4b2f | 27 | Serial pc(USBTX, USBRX); |
eisd | 0:e7492a4f4b2f | 28 | pc.baud(115200); |
eisd | 0:e7492a4f4b2f | 29 | int i = 0; |
eisd | 0:e7492a4f4b2f | 30 | |
eisd | 0:e7492a4f4b2f | 31 | while (true) { |
eisd | 0:e7492a4f4b2f | 32 | //pc.printf("Iset %f Iget %6d %f Vbat %6d %f \r", Iset.read(), Iget.read_u16(), Iget.read(), Vbat.read_u16(), Vbat.read()); |
eisd | 0:e7492a4f4b2f | 33 | float x = Iset.read(); |
eisd | 0:e7492a4f4b2f | 34 | pc.printf("Iset %f Iget %8d %f %f", Iset.read(), Iget.read_u16(), Iget.read() * 36.140224, iget * 36.140224); |
eisd | 0:e7492a4f4b2f | 35 | if ((i = (i + 1) % 50) == 0) { |
eisd | 0:e7492a4f4b2f | 36 | Iset = 0; |
eisd | 0:e7492a4f4b2f | 37 | Thread::wait(50); |
eisd | 0:e7492a4f4b2f | 38 | } |
eisd | 0:e7492a4f4b2f | 39 | pc.printf(" Vbat %8d %f %f %f\r", Vbat.read_u16(), Vbat.read() * 36.7538, vbat * 36.7538, vbat_rest * 36.7538); |
eisd | 0:e7492a4f4b2f | 40 | Iset = x; |
eisd | 0:e7492a4f4b2f | 41 | Thread::wait(100); |
eisd | 0:e7492a4f4b2f | 42 | } |
eisd | 0:e7492a4f4b2f | 43 | } |