20190816

Dependencies:   LCD_DISCO_F429ZI TS_DISCO_F429ZI BSP_DISCO_F429ZI

Committer:
VASKO
Date:
Fri Aug 16 22:22:05 2019 +0000
Revision:
0:81007dc65bac
20190816

Who changed what in which revision?

UserRevisionLine numberNew contents of line
VASKO 0:81007dc65bac 1 #include "PrjDefs.h"
VASKO 0:81007dc65bac 2
VASKO 0:81007dc65bac 3 DigitalOut xx(PG_13);
VASKO 0:81007dc65bac 4 //Ticker Tick;
VASKO 0:81007dc65bac 5
VASKO 0:81007dc65bac 6 float dTprev = 0;
VASKO 0:81007dc65bac 7 float IntPart = 0;
VASKO 0:81007dc65bac 8 float PL = 0;
VASKO 0:81007dc65bac 9 float Power = 0;
VASKO 0:81007dc65bac 10 float RefT = 0;
VASKO 0:81007dc65bac 11 bool Expired;
VASKO 0:81007dc65bac 12 bool Down;
VASKO 0:81007dc65bac 13
VASKO 0:81007dc65bac 14 void ResetPID(){
VASKO 0:81007dc65bac 15 dTprev = 0;
VASKO 0:81007dc65bac 16 IntPart = 0;
VASKO 0:81007dc65bac 17 PL = 0;
VASKO 0:81007dc65bac 18 Power = 0;
VASKO 0:81007dc65bac 19 }//ResetPID
VASKO 0:81007dc65bac 20
VASKO 0:81007dc65bac 21 float GetRefT(float r){
VASKO 0:81007dc65bac 22 if (Expired) return TempS;
VASKO 0:81007dc65bac 23 float _f = r;
VASKO 0:81007dc65bac 24 if(Start){
VASKO 0:81007dc65bac 25 if(Down) _f -= dTdt * 0.1;
VASKO 0:81007dc65bac 26 else _f += dTdt * 0.1;
VASKO 0:81007dc65bac 27 }
VASKO 0:81007dc65bac 28 else _f = 0;
VASKO 0:81007dc65bac 29 if(Down && (_f<=TempS)) { Expired = 1; return TempS; }
VASKO 0:81007dc65bac 30 else if((!Down) && (_f>=TempS)){ Expired = 1; return TempS; }
VASKO 0:81007dc65bac 31 else return _f;
VASKO 0:81007dc65bac 32 }//GetRefT
VASKO 0:81007dc65bac 33
VASKO 0:81007dc65bac 34 void ReStartH(){
VASKO 0:81007dc65bac 35 RefT = cT;
VASKO 0:81007dc65bac 36 Expired = 0;
VASKO 0:81007dc65bac 37 if(cT<=TempS) Down =0;
VASKO 0:81007dc65bac 38 else Down = 1;
VASKO 0:81007dc65bac 39 }//StartH
VASKO 0:81007dc65bac 40
VASKO 0:81007dc65bac 41 void Start_H(){
VASKO 0:81007dc65bac 42 ReStartH();
VASKO 0:81007dc65bac 43 Start = 1;
VASKO 0:81007dc65bac 44 }//StartH
VASKO 0:81007dc65bac 45
VASKO 0:81007dc65bac 46 void StopH(){
VASKO 0:81007dc65bac 47 RefT = 0;
VASKO 0:81007dc65bac 48 Expired = 0;
VASKO 0:81007dc65bac 49 Down = 0;
VASKO 0:81007dc65bac 50 Start = 0;
VASKO 0:81007dc65bac 51 ResetPID();
VASKO 0:81007dc65bac 52 PWM = 0;
VASKO 0:81007dc65bac 53 }//StopH
VASKO 0:81007dc65bac 54
VASKO 0:81007dc65bac 55 void PID(){
VASKO 0:81007dc65bac 56 float _f = dT * KProp / 10.0;
VASKO 0:81007dc65bac 57 Power = _f;
VASKO 0:81007dc65bac 58 LoUpLimit(Power, 0, MaxPower);
VASKO 0:81007dc65bac 59 IntPart += (dT * KInt / 100.0);
VASKO 0:81007dc65bac 60 LoUpLimit(IntPart, 0, MaxPower);
VASKO 0:81007dc65bac 61 Power += IntPart;
VASKO 0:81007dc65bac 62 _f = -(KDif * (dT - dTprev) / 10.0);
VASKO 0:81007dc65bac 63 LoUpLimit(_f, 0, MaxPower);
VASKO 0:81007dc65bac 64 Power += _f;
VASKO 0:81007dc65bac 65 LoUpLimit(Power, 0, MaxPower);
VASKO 0:81007dc65bac 66 PWM = Power;
VASKO 0:81007dc65bac 67 dTprev = dT;
VASKO 0:81007dc65bac 68 }//PID
VASKO 0:81007dc65bac 69
VASKO 0:81007dc65bac 70 void RxMsgThrdFunc(){
VASKO 0:81007dc65bac 71 MsgType _msg;
VASKO 0:81007dc65bac 72 MsgType *_mail;
VASKO 0:81007dc65bac 73 TxRxServiceInit();
VASKO 0:81007dc65bac 74 while (1) {
VASKO 0:81007dc65bac 75 TxRxStates _trs = GetMsg(&_msg.cmd);
VASKO 0:81007dc65bac 76 if(_trs == RxRcvd){
VASKO 0:81007dc65bac 77 cT = _msg.pars.f[0];
VASKO 0:81007dc65bac 78 if(Start){
VASKO 0:81007dc65bac 79 RefT = GetRefT(RefT);
VASKO 0:81007dc65bac 80 dT = RefT - cT;
VASKO 0:81007dc65bac 81 xx=1;
VASKO 0:81007dc65bac 82 PID();
VASKO 0:81007dc65bac 83 xx=0;
VASKO 0:81007dc65bac 84 _mail = MsgMail.alloc();
VASKO 0:81007dc65bac 85 if(ExtraSelected == PWM_Selected) _mail->cmd = PWM_Selected;
VASKO 0:81007dc65bac 86 else if(ExtraSelected == PWM_Changing) _mail->cmd = PWM_Changing;
VASKO 0:81007dc65bac 87 else _mail->cmd = PrjEventNone;
VASKO 0:81007dc65bac 88 _mail->pars.f[0] = PWM;
VASKO 0:81007dc65bac 89 MsgMail.put(_mail);
VASKO 0:81007dc65bac 90
VASKO 0:81007dc65bac 91 _mail = MsgMail.alloc();
VASKO 0:81007dc65bac 92 if(TempR_Selected == cT_Selected){
VASKO 0:81007dc65bac 93 _mail->cmd = cT_Selected;
VASKO 0:81007dc65bac 94 _mail->pars.f[0] = cT;
VASKO 0:81007dc65bac 95 }else{
VASKO 0:81007dc65bac 96 _mail->cmd = dT_Selected;
VASKO 0:81007dc65bac 97 _mail->pars.f[0] = dT;
VASKO 0:81007dc65bac 98 }
VASKO 0:81007dc65bac 99 MsgMail.put(_mail);
VASKO 0:81007dc65bac 100 }else{//if(Start)
VASKO 0:81007dc65bac 101 PWM = 0;
VASKO 0:81007dc65bac 102 ResetPID();
VASKO 0:81007dc65bac 103 _mail = MsgMail.alloc();
VASKO 0:81007dc65bac 104 _mail->cmd = cT_Selected;
VASKO 0:81007dc65bac 105 _mail->pars.f[0] = cT;
VASKO 0:81007dc65bac 106 MsgMail.put(_mail);
VASKO 0:81007dc65bac 107 }//else{//if(Start)
VASKO 0:81007dc65bac 108
VASKO 0:81007dc65bac 109
VASKO 0:81007dc65bac 110
VASKO 0:81007dc65bac 111 _msg.cmd = CmdPWM;
VASKO 0:81007dc65bac 112 _msg.pars.f[0] = PWM;
VASKO 0:81007dc65bac 113 SendMsg(&_msg.cmd);
VASKO 0:81007dc65bac 114
VASKO 0:81007dc65bac 115 }//if(_trs == RxRcvd)
VASKO 0:81007dc65bac 116 ThisThread::sleep_for(1);
VASKO 0:81007dc65bac 117 }//while(1)
VASKO 0:81007dc65bac 118 }//RxMsgThrdFunc