Linear stabilizer voltage and current on lm358 and transictor. Digital control and indication on stm32f103rbt and tft01-22sp (ili9341). https://www.youtube.com/watch?v=DLC3KEtlr9I https://radiokot.ru/forum/viewtopic.php?f=11&t=112440
Dependencies: mbed TFT_fonts SPI_TFT_ILI9341 beep _24LCXXX
Diff: main.cpp
- Revision:
- 5:0b3c71d7e475
- Parent:
- 4:776f59129c24
- Child:
- 6:88e92896a3a1
- Child:
- 7:8410439dee73
--- a/main.cpp Wed Jan 21 17:34:22 2015 +0000 +++ b/main.cpp Wed Apr 08 10:55:25 2015 +0000 @@ -32,7 +32,7 @@ #define color_scale1 0x3320 // шкала U #define color_scale2 0x9A60 // шкала I //---------------------------------- -SPI_TFT_ILI9341 TFT(D11, D12, D13, D8, D9, D10,"TFT"); // mosi, miso, sclk, cs, reset, dc +SPI_TFT_ILI9341 TFT(PB_15, PB_14, PB_13, PB_12, PC_7, PC_6,"TFT"); // mosi, miso, sclk, cs, reset, dc void grid(void); Timer fps;// FPS Timeout timerforfanstart; //таймер для запуска мотора @@ -41,9 +41,10 @@ int fst=0; int fst2=0; //Ticker valueUI; -InterruptIn button(A4); // кнопка питания вкл\выкл -Beep buzzer(D5); // звук -I2C i2c(PB_9, PB_8); // sda, scl для флэш памяти +InterruptIn button(PB_9); // кнопка питания вкл\выкл +Beep buzzer(PB_3); // звук +//I2C i2c(PC_9, PA_8); // sda, scl для флэш памяти для f401 +I2C i2c(PB_11, PB_10); // sda, scl для флэш памяти для f103 _24LCXXX eeprom(&i2c, 0x50); //----------------------------------------------------------------------------------------------------------- Ввести в меню опцию коррекции падения напряжения на токоизмерительном шунте. int t; // секунд с момента включения @@ -132,9 +133,9 @@ float noisea2; // - - для A2 float noisea3; // - - для A3 //----------------------------------------------------------------------------------------------------------- -DigitalIn buttonUp(D3); // Up -DigitalIn buttonDown(D2); // Down -DigitalIn buttonEnter(A5); // Enter +DigitalIn buttonUp(PB_8); // Up +DigitalIn buttonDown(PB_6); // Down +DigitalIn buttonEnter(PB_7); // Enter int Screen=1; // по умолчанию грузим первое меню int complit=0; // в начале меню не прорисовано int pb=0; // для прорисовки кнопки @@ -159,22 +160,24 @@ int cs=0; // короткое замыкание int csp=0; // для одной прорисовки короткого замыкания float brightness = 1.0f; //яркость экрана -PwmOut pinbrightness(D6); // выход на ключ регулировки яркости экрана +PwmOut pinbrightness(PB_5); // выход на ключ регулировки яркости экрана float fanspeed = 0.0f; -PwmOut fan(D7); // выход вентилятора +PwmOut fan(PB_4); // выход вентилятора +//PwmOut fan2(PA_15); +//float fanspeed2 = 0.8f; int temperature = 25; // текущая температура -int screensaver=0; // заставка 0 - нет, 1 - часы, 2- ... -int beeper=0; //бипер выключен +int screensaver=0; // заставка 0 - нет, 1 - часы, 2- ... +int beeper=0; //бипер выключен //----------------------------------------------------------------------------------------------------------- -DigitalOut powerMosfet(D4); // выход управления нагрузкой -DigitalIn cc(PC_5); //вход СС 0 - СС, 1 - CV +DigitalOut powerMosfet(PC_11); // выход управления нагрузкой +DigitalIn cc(PC_10); //вход СС 0 - СС, 1 - CV int ccc=0; -DigitalOut ledcc(PC_6); // светодиод C.C -DigitalOut ledshort(PC_8); // светодиод КЗ -AnalogIn ainA0(A0); -AnalogIn ainA1(A1); -AnalogIn ainA2(A2); -AnalogIn ainA3(A3); +DigitalOut ledcc(PD_2); // светодиод C.C +DigitalOut ledshort(PC_12); // светодиод КЗ +AnalogIn ainA0(PA_2); +AnalogIn ainA1(PA_3); +AnalogIn ainA2(PA_1); +AnalogIn ainA3(PA_0); //AnalogIn ainA4(A4); //AnalogIn ainA5(A5); //BusOut unused(A4,A5); @@ -241,6 +244,19 @@ ledshort=1; wait(0.02); ledshort=0; + }else{ + TFT.foreground(Red); + TFT.printf("ERROR - flash memory is not activated\n"); + TFT.foreground(White); + wait(5); + TFT.printf("Load default settings."); + for (int i=0; i<10; i++) + { + wait(0.1); + TFT.printf("."); + } + TFT.printf("\n"); + loaddefaultsettings(); } } //------------------------------------------------------------------------------------------------------------ @@ -322,41 +338,61 @@ ledcc=0; ledshort=0; TFT.claim(stdout); - set_time(1414838392); // Set RTC time to Wed, 28 Oct 2009 11:35:37 + //set_time(1414838392); // Set RTC time to Wed, 28 Oct 2009 11:35:37 tstart = treal = time(NULL); - pinbrightness.period(0.001); // задаём частоту Шим подсветки 0.001 - 1000 герц + pinbrightness.period(0.01); // задаём частоту Шим подсветки 0.001 - 1000 герц fan.period(0.01); + //fan2.period(0.01); TFT.set_orientation(3); TFT.background(Black); TFT.cls(); wait(0.2); fan = fanspeed; // устанавливаем скорость + //fan2=fanspeed2; } //------------------------------------------------------------------------------------------------------------ void bootscreen(void) { - - wait(0.5); TFT.background(Black); + TFT.foreground(Green); + TFT.locate(100, 10); + TFT.set_font((unsigned char*) Consolas26x49); + TFT.printf("PSTFT\n"); TFT.foreground(White); TFT.set_font((unsigned char*) CourierNew13x23); - TFT.locate(0, 100); - TFT.printf("Load settings...\n"); + TFT.printf(" Firmware v. 1.0.0\n"); + TFT.set_font((unsigned char*) Courier8x13); + TFT.printf(" Laboratory power supply based on STM32\n"); + TFT.printf(" Copyright (c) 2015 Pimenov V\n"); + TFT.printf(" Mail: sinrab@gmail.com \n"); pinbrightness = brightness; // включаем подсветку - wait(0.5); - if (beeper==1) { - buzzer.beep(480,0.01); - } - + wait(3); + TFT.locate(0, 150); + TFT.set_font((unsigned char*) Courier8x13); + TFT.printf("Press button ENTER\n"); + TFT.printf("for load default settings\n"); + TFT.printf("\n"); + wait(1); if (buttonEnter==0) { - TFT.printf("default.\n"); - wait(0.5); + TFT.printf("Load default settings."); + for (int i=0; i<10; i++) + { + wait(0.1); + TFT.printf("."); + } + TFT.printf("\n"); loaddefaultsettings(); }else{ - TFT.printf("from flash.\n"); - wait(1); + TFT.printf("Load settings from flash memory."); + for (int i=0; i<9; i++) + { + wait(0.1); + TFT.printf("."); + } + TFT.printf("\n"); loadsettings(); } + //wait(100); } //-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- int main() //--------- Главная функция ---------// @@ -395,6 +431,7 @@ ccc=0; pb=0; pp=0; + csp=0; TFT.set_orientation(3); TFT.background(Black); TFT.cls(); @@ -466,8 +503,8 @@ - fps.reset(); - fps.start(); + //fps.reset(); //мерить фпс + //fps.start(); TFT.background(Black); @@ -501,8 +538,8 @@ TFT.foreground(0xE71C);//текст TFT.set_font((unsigned char*) Lucida13x21); TFT.locate(11, 162); - //TFT.printf("%05.2f W", U5*Ireal/1000); - TFT.printf("%f", fanspeed*100); + TFT.printf("%05.2f W", U30*Ireal/1000); + //TFT.printf("%f", fanspeed*100); TFT.background(0x2104); // выводим время включеной нагрузки TFT.foreground(0xE71C);//текст @@ -546,10 +583,10 @@ //if (zxc<0) zxc=0; //TFT.fillrect(11+zxc,138, 13+zxc, 150, Red); // шкала I set - fps.stop(); - TFT.set_font((unsigned char*) Courier8x13); // FPS - TFT.locate(169,81); - printf("%0.2f", (1/fps.read())); + //fps.stop(); + //TFT.set_font((unsigned char*) Courier8x13); // FPS + //TFT.locate(169,81); + //printf("%0.2f", (1/fps.read())); TFT.background(0x2104); TFT.foreground(White); @@ -899,7 +936,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" -\n"); // U usb A4 hi + printf(" -.\n"); // U usb A4 hi //---------------------------------------------------------------- if (kline==11) { TFT.background(back4_i); @@ -908,7 +945,7 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" -\n"); // I usb A5 zero + printf(" -,\n"); // I usb A5 zero //---------------------------------------------------------------- if (kline==12) { TFT.background(back4_i); @@ -926,7 +963,8 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" Load Default \n"); + //printf(" Load Default \n"); + printf(" Load Default calibration \n"); //---------------------------------------------------------------- if (kline==14) { TFT.background(back4_i); @@ -935,7 +973,8 @@ TFT.background(back4); TFT.foreground(text4); } - printf(" Save all to flash memory \n"); + //printf(" Save all to flash memory \n"); + printf(" Save calibration to flash memory\n"); //---------------------------------------------------------------- if (kline==15) { TFT.background(back4_i); @@ -1354,7 +1393,7 @@ Ireal = a1k*1000*(in1-a1a); - temperature = map(in3, 0.232, 0.188 , 0, 90); //(in3, 0.232, 0.188 , 0, 90); + temperature = map(in3, 0.228, 0.188 , 0, 90); //(in3, 0.232, 0.188 , 0, 90); //преобразование температуры if (rdown_on==1) { U5 = a0k*(in0-a0a)+Ireal*rdown/1000; @@ -1404,8 +1443,6 @@ if (buttonDown==0) { // Down if (powerMosfet==0){ a1a = in1 - 0.000100f; // 2 - Screen=7; - iiii=0; complit=0; } } @@ -1423,6 +1460,11 @@ Screen=5; //3 complit=0; } + if (buttonDown==0) { // Down + Screen=7; + iiii=0; + complit=0; + } one=1; } //------------------------------------------------------------------ @@ -1528,7 +1570,36 @@ if (kline==4) a1k = 0.2f/(in1 - a1a); //a1k = 1000/(avgAin1() - a1a) при 1амперах if (kline==5) a2a = in2; // U high v - if (kline==6) a2k = 1.900f/(in2-a2a); // U high v + if (kline==6) a2k = 19.00f/(in2-a2a); // U high v + + if (kline==10) + { + ledshort=1; // 1 раз моргнуло - начало записи + wait(0.02); + ledshort=0; + wait(0.05); + int s=1; + int s1=0; + eeprom.nbyte_write(0, (char*)&s, sizeof(s)); + eeprom.nbyte_write(4, (char*)&s1, sizeof(s1)); + ledshort=1; + wait(0.02); + ledshort=0; + } + if (kline==11) + { + ledshort=1; // 1 раз моргнуло - начало записи + wait(0.02); + ledshort=0; + wait(0.05); + int s=0; + int s1=1; + eeprom.nbyte_write(0, (char*)&s, sizeof(s)); + eeprom.nbyte_write(4, (char*)&s1, sizeof(s1)); + ledshort=1; + wait(0.02); + ledshort=0; + } if (kline==13) { // load @@ -1942,15 +2013,17 @@ //------------------------------------------------------------------ if (Screen==7 & one==0) { //экран 7 if (buttonEnter==0) { // Enter - + Screen=2; + complit=0; } if (buttonUp==0) { // Up - + Screen=2; + complit=0; } if (buttonDown==0) { // Down - Screen=1; + Screen=2; complit=0; } one=1; @@ -2045,10 +2118,12 @@ fst=0; fst2=0; fan = 0.0f; + //fan2 = 0.0f; } if (temperature >= tempstart && fst == 0) { fan = 1.0f; + //fan2 = 1.0f; timerforfanstart.attach(&fanstart, 2.0); fst=1; } @@ -2056,6 +2131,8 @@ if (fst2==1) { fanspeed = map (temperature, tempstart, tempfull, 0.4, 1); fan = fanspeed; + //fanspeed2 = map (temperature, tempstart, tempfull, 0.4, 1); + //fan2 = fanspeed2; } if (temperature >= tempcutoff) {