Drain batteries through an LM324 controlled CEB6030L from a defunct graphics card
Dependencies: mbed FastAnalogIn PID mbed-rtos
main.cpp@1:712b9b5470d4, 2016-07-05 (annotated)
- Committer:
- eisd
- Date:
- Tue Jul 05 09:18:48 2016 +0000
- Revision:
- 1:712b9b5470d4
- Parent:
- 0:e7492a4f4b2f
- Child:
- 2:e7ce63ada1d2
Rest on a timer to get battery voltage
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 | 1:712b9b5470d4 | 20 | void rest(const void *) { |
eisd | 1:712b9b5470d4 | 21 | while (true) { |
eisd | 1:712b9b5470d4 | 22 | Thread::wait(5000); |
eisd | 1:712b9b5470d4 | 23 | float x = Iset; |
eisd | 1:712b9b5470d4 | 24 | Iset.write_u16(16); |
eisd | 1:712b9b5470d4 | 25 | Thread::wait(400); |
eisd | 1:712b9b5470d4 | 26 | Iset.write_u16(0); |
eisd | 1:712b9b5470d4 | 27 | Thread::wait(100); |
eisd | 1:712b9b5470d4 | 28 | Iset = x; |
eisd | 1:712b9b5470d4 | 29 | } |
eisd | 1:712b9b5470d4 | 30 | } |
eisd | 0:e7492a4f4b2f | 31 | int main() |
eisd | 0:e7492a4f4b2f | 32 | { |
eisd | 0:e7492a4f4b2f | 33 | Ticker t; |
eisd | 1:712b9b5470d4 | 34 | t.attach(&adjust, 3.0); |
eisd | 0:e7492a4f4b2f | 35 | Ticker t2; |
eisd | 0:e7492a4f4b2f | 36 | t2.attach_us(&filter, 1000); |
eisd | 1:712b9b5470d4 | 37 | Thread t3(&rest); |
eisd | 0:e7492a4f4b2f | 38 | Iset.write(0.0); |
eisd | 0:e7492a4f4b2f | 39 | Serial pc(USBTX, USBRX); |
eisd | 0:e7492a4f4b2f | 40 | pc.baud(115200); |
eisd | 0:e7492a4f4b2f | 41 | |
eisd | 0:e7492a4f4b2f | 42 | while (true) { |
eisd | 0:e7492a4f4b2f | 43 | //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 | 44 | pc.printf("Iset %f Iget %8d %f %f", Iset.read(), Iget.read_u16(), Iget.read() * 36.140224, iget * 36.140224); |
eisd | 0:e7492a4f4b2f | 45 | pc.printf(" Vbat %8d %f %f %f\r", Vbat.read_u16(), Vbat.read() * 36.7538, vbat * 36.7538, vbat_rest * 36.7538); |
eisd | 1:712b9b5470d4 | 46 | Thread::wait(500); |
eisd | 0:e7492a4f4b2f | 47 | } |
eisd | 0:e7492a4f4b2f | 48 | } |