Re: 請教用dsPIC33F撰寫PI控制器
|
||||
---|---|---|---|---|
中級會員
|
比例積分器要在程式展現確實,蠻難的,主要是你對數學觀念熟不熟
若放在PWM中斷的話就要去算你的PWM執行週期才能回推你的積分Time_constant要設多少 再加上電容的解析度太低也會使控制目標無法追近的狀況,你應該是電容解析度弄得太低所致吧
發表於: 2009/7/10 23:54
|
|||
|
Re: 請教用dsPIC33F撰寫PI控制器
|
||||
---|---|---|---|---|
版主
|
有關 DMCI的使用方式可以參考MPLAB IDE 下的 Help 選項,在 Topics 選項下裡有 Tools 下的第三項就是了。建議使用 ICD3 & Real ICE 才能發揮效果。
Attach file: (0.00 KB)
發表於: 2009/6/30 10:00
|
|||
|
Re: 請教用dsPIC33F撰寫PI控制器
|
||||
---|---|---|---|---|
版主
|
PWM 會開應是你的計算結果有誤導制 PWM 的 duty錯誤所致。因為這是一種 Real-Time 錯誤要花點時間去抓,個人建議是否可以同步的將送去 Duty 的數值也利用指標方式同步存一份資料在RAM 裡後再利用斷點設定方式停下來檢查一下 Duty 的數值變化,同時也可以利用 Tools --> DMCI 工具將RAM資料以圖形方式顯示,或利用 ICD3 & Real ICE 做即時的資料觀測,同時DMCI 也可以用調整 PI 參數的方式人工直接調整數值大小來驗證PI的最佳效果。
發表於: 2009/6/30 9:54
|
|||
|
請教用dsPIC33F撰寫PI控制器
|
||||
---|---|---|---|---|
初級會員
|
請教各位:
以下的程式碼是我參考TI所寫的PI控制器程式碼,之前是用在dsPIC30系列,如今要改用在dsPIC33FJ16GS502上,測試結果發現會有PWM亂開的現象,請問是哪裡出問題嗎?有啥解決方式可以提供給我參考,謝謝。 void __attribute__((interrupt, no_auto_psv)) _PWM2Interrupt() { long Vo; long e_now,e_last; long D_now,D_last; long duty; long Vref=3720; /*以1.5V當做參考電壓,*/ IFS5bits.PWM2IF=0; ADSTATbits.P2RDY=0; ADSTATbits.P3RDY=0; Vo=ADCBUF5*8; e_now=Vref-Vo; D_now=4680*(e_now-e_last)+195*e_now+D_last; /*PI Controller:Kp=4680,KiTs=195*/ if(D_now>3773) { D_now=3773; duty=3773; /*限制 PWM1L(PWM1H) 與PWM2L(PWM2H) 相移量最小時,Duty重疊限制為40%*/ } else if(D_now<=0) { D_now=0; duty=0; /*限制 PWM1L(PWM1H) 與PWM2L(PWM2H) 相移量最大時,Duty重疊限制為0%*/ } else { duty=D_now; } D_last=D_now; e_last=e_now; PHASE2=duty+283; }
發表於: 2009/6/29 10:09
|
|||
|