Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: PID QEI SB1602E mbed-rtos mbed
Fork of PreHeater by
Revision 3:9af1bd67c5f8, committed 2015-06-14
- Comitter:
- kazu_zamasu
- Date:
- Sun Jun 14 02:44:14 2015 +0000
- Parent:
- 2:387240c58110
- Child:
- 4:143b93e499a3
- Commit message:
- Rev0
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sat Jun 13 06:34:11 2015 +0000
+++ b/main.cpp Sun Jun 14 02:44:14 2015 +0000
@@ -5,89 +5,108 @@
#include "math.h"
#include "SB1602E.h"
-#define ROTATE_PER_REVOLUTIONS 24 //QEI 1 rotate by count
-#define THR 560 /PTH pull up register value
-#define THB 3380 //PTH B number
-#define THCR 10000 //25C PTH register
-#define OV_LL 0.0 //PID calcurate output value 0.0 = 0%
-#define OV_HL 1.0 //PID calcurate output value 1.0 = 100%
-#define SV_LL 0.0 //PID setpoint % value for lo limit
-#define SV_HL 100.0 //PID setpoint % value for high limit
+/* PID constant initialize Kc, Ti, Td, interval */
#define P 1.0 //propotional band
#define I 0.2 //Integral
#define D 0.1 //Devide
#define RATE 0.1 //update time sec
-#define Bias 0.2 //control output bias
-#define InitialSP 50.0 // PID initial setpoint
-#define RangeSPL 30.0 //calcurate celcius range
-#define RangeSPH 120.0 //same above
-
-//Kc, Ti, Td, interval
PID TIC(P, I, D, RATE);
//GPIO initilaize
AnalogIn THAI(dp4);
PwmOut out(dp1);
DigitalOut led1(dp14),led2(dp28);
-DigitalIn Run(dp17,PullUp);
+DigitalIn Run(dp17,PullDown);
-float temp_sv_input;
+/*Power on first setpoint temperature */
+#define InitialSP 50.0 // PID initial setpoint
+float temp_sv_input = InitialSP;
+
double temp_pv,temp_cal;
char *init_massage = "Welcome!";
-//init_massage = 'Hello';
-//Rotary encode pin, pinmode and sppecification instance
+
+/*Rotary encode pin, pinmode and sppecification instance */
+#define ROTATE_PER_REVOLUTIONS 24 //QEI 1 rotate by count
QEI wheel(dp11, PullUp, dp13, PullUp,NC, ROTATE_PER_REVOLUTIONS, QEI::X2_ENCODING);
-//LCD I2C pin asign
+
+/*LCD I2C pin initialize */
SB1602E lcd(dp5, dp27, init_massage); // SDA, SCL
-
-void TempCal_thread(void const *args) {
+void TempCal_thread(void const *args)
+{
while (true) {
- //input for change to 0 to 100% range by 50C to 120C
- temp_sv_input = wheel.getPulses() * 0.5 + RangeSPL;
- if (temp_sv_input <= RangeSPL){
- temp_sv_input = RangeSPL;
- }
- else if (temp_sv_input >= RangeSPH){
- temp_sv_input = RangeSPH;
- }
- temp_cal = THAI.read();
-//six order polynomial
- 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;
+ /*input for change to 0 to 100% range by 30C to 120C */
+#define RangeSPL 30.0 //calcurate celcius range
+#define RangeSPH 120.0 //same above
+ /*Temperature setpoint low high range */
+ temp_sv_input = wheel.getPulses() * 0.5 + RangeSPL;
+ if (temp_sv_input <= RangeSPL) {
+ temp_sv_input = RangeSPL;
+ } else if (temp_sv_input >= RangeSPH) {
+ temp_sv_input = RangeSPH;
+ }
+ temp_cal = THAI.read();
+
+
+ /*six order polynomial calculation value
+ Thermister pull up resiter 560R
+ Thermister B value 3380K
+ Thermister Resistance 10K ohm at 25C
+ */
+ 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;
Thread::wait(500);
-//Insert LCD code
- lcd.printf(0, "Temp SP %.1f\n", temp_sv_input);
- lcd.printf(1, "Temp PV %.1f\n", temp_pv);
- }
- }
-
-int main(){
-Thread thread(TempCal_thread);
- while (1){
- //Analog input from 50.0C to 120.0C
- TIC.setInputLimits(SV_LL, SV_HL);
- //Pwm output from 0.0 to 1.0
- TIC.setOutputLimits(OV_LL, OV_HL);
- //If there's a bias.
- TIC.setBias(Bias);
- TIC.setMode(Run);
- //We want the process variable to be 1.7V
- TIC.setSetPoint(temp_sv_input);
-
- if (Run == 1){
- out = OV_LL;
- }
- else if (Run == 0){
- //Update the process variable.
- TIC.setProcessValue(temp_cal);
- //Set the new output.
- out = TIC.compute();
- }
- //Wait for another loop calculation.
- Thread::wait(RATE);
- }
- }
\ No newline at end of file
+ /*LCD Display section */
+ lcd.printf(0, "Temp SP %.1f\n", temp_sv_input);
+ lcd.printf(1, "Temp PV %.1f\n", temp_pv);
+ }
+}
+
+
+
+int main()
+{
+ /* call Tmeperature calculate section */
+ Thread thread(TempCal_thread);
+ //LCD contrast set from 00 to 3f 64resolution defult set is 32step
+#define LCDCont 0x32 //LCD contrast set from 00 to 3f 64resolution defult set is 32step
+ lcd.contrast(LCDCont);
+
+
+ while (1) {
+ /*Analog input from 30.0C to 120.0C by 0% to 100% */
+#define SV_LL 0.0 //PID setpoint % value for lo limit
+#define SV_HL 100.0 //PID setpoint % value for high limit
+ /* TIC PID setpoit limit set */
+ TIC.setInputLimits(SV_LL, SV_HL);
+
+ /* Output from 0.0 to 1.0*/
+#define OV_LL 0.0 //PID calcurate output value 0.0 = 0%
+#define OV_HL 1.0 //PID calcurate output value 1.0 = 100%
+ /* TIC PID control output limit set */
+ TIC.setOutputLimits(OV_LL, OV_HL);
+
+ /* TIC PID control output bias */
+#define Bias 0.2 //control output bias
+ TIC.setBias(Bias);
+ /* TIC PID control mode set 0=Stop 1=Auto*/
+ TIC.setMode(Run);
+ /* TIC PID setpoint temperature read */
+ TIC.setSetPoint(temp_sv_input);
+
+ /* TIC PID output control */
+ if (Run == 0) {
+ out = OV_LL;
+ } else if (Run == 1) {
+ /* TIC PID read process value */
+ TIC.setProcessValue(temp_cal);
+ //PID calculate output.
+ out = TIC.compute();
+ }
+ //Wait for another loop calculation.
+ Thread::wait(RATE);
+ }
+}
\ No newline at end of file
