日韩在线不卡免费视频一区,日韩欧美精品一区二区三区经典,日产精品码2码三码四码区,人妻无码一区二区三区免费,日本feerbbwdh少妇丰满

  • 回復(fù)
  • 收藏
  • 點贊
  • 分享
  • 發(fā)新帖

pic單片機+MOS數(shù)控電源,加入PI算法控制,出錯

用PIC單片機的PWM驅(qū)動MOS,做一BUCK的電源;想加入PI算法,可程式總是出錯,現(xiàn)把程式其它部分刪掉;圖為仿真部分電路(控制A/Dpin為1.2v)請大家?guī)兔纯?程式哪書寫錯誤。

#include "pic.h

"typedef unsigned char unchar;

typedef unsigned int unint;

unint PWM_period=0,PWM_duty=0;

void main()

{typedef struct pid 

{ float setvol;//設(shè)定值 

 float pcoe;//比例系數(shù)  

float icoe;//積分系數(shù) 

 int lasterror; 

 int preerror; 

 float sumerror;

}pid; 

pid volpid,*sptr=&volpid; 

//pid *sptr;

//sptr=&volpid;

void initpid(pid *sp);

void crespid(pid *sp,int testpoint);

asm("clrwdt");

initpid(pid *sptr);// 

sptr->setvol=1.2;

while(1){crespid(pid *sptr,4);}}

/*------------增量式PI ---------*/

void initpid(pid *sp)

{sp->setvol=0; 

sp->pcoe=0.4;

 sp->icoe=0.05;//

 sp->lasterror=0;}

void crespid(pid *sp,int testpoint)

{static float temerror; 

if(sp->setvol>testpoint)

temerror=sp->setvol-testpoint;

else temerror=testpoint-sp->setvol;

{PWM_duty+=(sp->pceo)*(temerror-sp->lasterror)+(sp->iceo)*temerror;}

sp->lasterror=temerror;//把PWM—duty--部分省略

簡單仿真圖

}

全部回復(fù)(3)
正序查看
倒序查看
2014-04-09 11:02
hary_wu01 我?guī)湍阃葡掳?,看能不能給你些幫助。
0
回復(fù)
2014-04-14 16:26
我個人覺得你最好先不加入PID現(xiàn)實一下,如果程序的思路或是結(jié)構(gòu)都OK后再加入PID控制,這樣會有助于你實驗或者是開發(fā)的進(jìn)度,其次還有種方法,放大你的基準(zhǔn)信號送給單片機處理,盡量不要用浮點去讓51系列的單片機,單片機處理小數(shù)是很費勁的!
0
回復(fù)
mixsall
LV.3
4
2014-04-20 00:51
你這個結(jié)構(gòu)體聲明元素名稱和void crespid這個函數(shù)用指針調(diào)用的名稱不一樣啊。{PWM_duty+=(sp->pceo)*(temerror-sp->lasterror)+(sp->iceo)*temerror;}   這條算占空比的語句你和結(jié)構(gòu)體聲明的部分對比下。還有,寫這種程序沒必要非得用結(jié)構(gòu)體指針。你的指針命名還不規(guī)范,你自己讀的不頭疼嗎?離散化的pi算法最好有固定的采樣時間,你這個無視采樣周期,直接循環(huán),你覺得積分能準(zhǔn)么?testpoint我猜的如果沒錯的話應(yīng)該是ad的采樣值輸入吧。你怎么寫固定值了。最后你的pi算法也不對。
0
回復(fù)
發(fā)