Rev0

Dependencies:   PID QEI-Intruptinmode-set SB1602E mbed

Fork of PreHeater-Rev2 by Kazu Zamasu

プリヒータ基板のファームウェアです。 Rev2基板用ですので、温度センサーなどが変更になっています。

This is Pre Heater device firmware. This firmware is Rev2 PCB design.

Revision:
3:e4253d33ff0c
Parent:
2:6315824f8a29
--- a/main.cpp	Wed Jul 29 04:40:07 2015 +0000
+++ b/main.cpp	Wed Jul 29 12:08:17 2015 +0000
@@ -43,6 +43,7 @@
 #define D 0.0 //Devide
 #define RATE 0.1 //update time sec
 #define InitialSP 45.0 // Boot Setpoint initial temeprature
+#define Bias 0.0 //PID output bias
 PID TIC(P, I, D, RATE);
 
 /*LCD I2C pin initialize */
@@ -53,11 +54,12 @@
 QEI wheel(dp11, dp13, NC, PullUp, ROTATE_PER_REVOLUTIONS, QEI::X2_ENCODING);
 
 //Initial
-float temp_sv_input, waittime,OV_LL,ticout,qei,Bias;
+float temp_sv_input;
 bool Run(false);
 double temp_pv,temp_cal;
 
-#define EncoderDiv 20.0   //Celcius coefficient encoder 25Pulse to 1℃
+/*PID SP encorder calcurate temperature */
+#define EncoderDiv 20.0   //Divide encoder 1Pulse per 1℃ ex. 1/20=0.05 enc 1click 0.05C
 #define RangeSPL    30.0    //Celcius low side temperature 
 #define RangeSPH    100.0   //Celcius high side temperature
 int encPulseCnt = ( (InitialSP - RangeSPL) * EncoderDiv );
@@ -75,8 +77,7 @@
     static bool old_RunPB=0;
     bool tmp_RunPB=0;
     tmp_RunPB = RunPB;
-    if( (old_RunPB != tmp_RunPB) && (tmp_RunPB == 1) )
-    {
+    if( (old_RunPB != tmp_RunPB) && (tmp_RunPB == 1) ) {
         runmode();
     }
     old_RunPB = tmp_RunPB;
@@ -84,38 +85,18 @@
 
 void cal_temp()
 {
-    /*input for change to 0 to 100% range by 30C to 100C */
-    /*Temperature setpoint low high range */
-
+    /*SP temperature high low limit*/
     encPulseCnt = encPulseCnt + (encPulses - end_getPulses_old);
-    if( encPulseCnt < 0 )                                   //Lower Limit
-    {
+    if( encPulseCnt < 0 ) {                                 //Lower Limit
         encPulseCnt = 0;
     }
-    if( encPulseCnt > ( (RangeSPH-RangeSPL) * EncoderDiv) ) //Upper Limit
-    {
+    if( encPulseCnt > ( (RangeSPH-RangeSPL) * EncoderDiv) ) { //Upper Limit
         encPulseCnt = (RangeSPH-RangeSPL) * EncoderDiv;
     }
-
     temp_sv_input = encPulseCnt / EncoderDiv + RangeSPL;    //calc encoder Pulse to SetPoint
 
-    /*six order polynomial calculation value
-    Thermister pull up resiter 560R
-    Thermister B value 3380K
-    Thermister Resistance 10K ohm at 25C
-    This NTC is NCP18XH103F03RB muRata
-    */
-    //temp_cal = THAI.read() * 3.3;
-    //temp_pv =-0.7964*pow(temp_cal,6.0) - 2.5431*pow(temp_cal,5.0) +63.605*pow(temp_cal,4.0) - 274.1*pow(temp_cal,3.0) + 522.57*pow(temp_cal,2.0) - 539.26*temp_cal + 405.76;
-
     /*LCD Display section */
     lcd.printf(0,0, "SP %.1f", temp_sv_input);
-
-    //lcd.printf(1, "OUT %.2f", out.read() * 100);
-    //lcd.printf(1, "PB %s\n", Run);
-
-    /*Tenperature indicater */
-    /* 1.5C high temperature */
 }
 
 
@@ -125,13 +106,13 @@
     RunPB.mode(PullDown);
 #define LCDCont 0x32 //LCD contrast set from 00 to 3f 64resolution defult set is 32step
     lcd.contrast(LCDCont);
+    /* PWM setting.*/
     out.period(0.02);
     cal_temp();
 
     while (1) {
         encPulses = wheel.getPulses();
-        if(end_getPulses_old != encPulses)  
-        {
+        if(end_getPulses_old != encPulses) {
             cal_temp();
         }
         end_getPulses_old = encPulses;
@@ -140,7 +121,7 @@
         temp_cal = THAI.read() * 3300;
         temp_pv = -0.00000000007*pow(temp_cal,3.0)-0.000002*pow(temp_cal,2.0)-0.091*temp_cal+201.5;
         lcd.printf(0,1, "PV %.1f\n", temp_pv);
-
+        /*Tenperature indicater */
         if (Run == true) {
             if ((temp_pv - temp_sv_input) >= 1.5) {
                 ledR = 0;
@@ -162,20 +143,31 @@
             ledG = 1;
             ledB = 1;
         }
-    printf("\033[1;1H");
-    printf("OUT %.6f", out.read() * 100);
-    printf("\033[1;20H");
-    printf("PB %d\n", Run);
-    printf("\033[2;1H");
-    printf("PV %.6f\n", temp_pv);
-    printf("\033[2;20H");
-    printf("SP %.6f", temp_sv_input);
-    printf("\033[3;1H");
-    printf("PV %.6f\n", THAI.read());
+        /*UART debug dispray*/
+        printf("\033[1;1H");
+        printf("OUT %.6f", out.read() * 100);
+        printf("\033[1;20H");
+        printf("Run %d\n", Run);
+        printf("\033[2;1H");
+        printf("PVTemp %.6f\n", temp_pv);
+        printf("\033[2;20H");
+        printf("SPTemp %.6f", temp_sv_input);
+        printf("\033[3;1H");
+        printf("PVread %.6f\n", THAI.read());
+        printf("\033[3;20H");
+        printf("PVTemp %.6f\n",encPulses );
+
         /*PID control*/
-#define SV_LL 0.0 //PID setpoint % value for lo limit
-#define SV_HL 100.0 //PID setpoint % value for high limit
-        TIC.setInputLimits(SV_LL, SV_HL);
+
+        /* Notice!!! PV_LL and PV_HH if incorrect value, PID output by dead lock.
+                PV_LL= Temperature sensor low side value
+                PV_HH= Temperature sensoe high side value*/
+#define PV_LL -50.0 //PID PV low side Temp
+#define PV_HH 150.0 //PID PV high side Temp
+        TIC.setInputLimits(PV_LL, PV_HH);
+
+        /*OV_LL OV_HH PID calcurate output range.
+        If you use low power supply, you can limit output power. OV_HH is maximum 100%=65W at 24V */
 #define OV_LL 0.0 //PID calcurate output value 0.0 = 0%
 #define OV_HL 100.0 //PID calcurate output value 1.0 = 100%
         if (Run == true) {