[問題] dspic數位PID控制

看板Electronics作者 (adol)時間14年前 (2011/12/07 21:22), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串1/2 (看更多)
想請問一下 dspic的數位PID控制這樣寫是否正確 我的目的是要作buck轉換器的定電流控制 底下是我的 ADC中斷程式流程 其中一些function是參考libirary的document寫的 Kp Ki Kd已經在程式一開始執行處設定好了 目前只有給Kp=0.5 而Ki=Kd=0 void _ISR _ADCInterrupt(void) { IFS0bits.ADIF=0; voltage=ADCBUF0;//電壓取樣轉換結果(這邊沒用到) current=ADCBUF1;//電流取樣轉換結果 fooPID.measuredOutput=current;//把電流取樣結果輸入到PID控制器 PID(&fooPID);//執行PID運算 PDC1 = Fract2Float(fooPID.controlOutput)*PWM_Duty_Range + PWM_Duty_Ref; //PDC1暫存器決定duty大小 //fooPID.controlOutput為PID運算結果 其格式為fractional 所以須轉為float //做運算 //由於PID運算結果為-1~1之間的小數 所以把他乘上duty容許變化範圍再加上一 //個定值即為PDC1之值 例如 Duty Max=1058 而 Duty Min=118 則 //PWM_Duty_Ref=(1058+118)/2=588 //而PWM_Duty_Range=(1058-118)/2=470 如此便可將運算出來的Duty值限制在合 //理範圍 } 實測結果顯示 只給Kp時 duty沒有隨我負載改變而改變 (應該說有在調 但是調得很細微 誤差很大) 若Kp給大一點 系統又會不穩 給Ki系統也是不穩 我是掛電子負載作定電壓抽載(模擬電池充電) 不知道有沒有會用這類PID function的大大 給小的指點一下 謝謝 -- ※ 編輯: felghana 來自: 140.116.163.131 (12/07 21:27)

12/08 00:52, , 1F
好巧! 我也在做電池充電耶 只是code是助教給的...
12/08 00:52, 1F

12/08 00:52, , 2F
而且只有PI控制
12/08 00:52, 2F

12/08 06:15, , 3F
修IP...我笑了
12/08 06:15, 3F
文章代碼(AID): #1EtsXykw (Electronics)
文章代碼(AID): #1EtsXykw (Electronics)