Drain batteries through an LM324 controlled CEB6030L from a defunct graphics card

Dependencies:   mbed FastAnalogIn PID mbed-rtos

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?

UserRevisionLine numberNew 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 }