下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、經(jīng)典 PID 調(diào)節(jié),恒溫控制。2009-08-11 20:37#include #include #include#include struct PID unsigned int SetPoint; / 設(shè)定目標(biāo) Desired Value unsigned int Proportion; / 比例常數(shù) Proportional Const unsigned int Integral; / 積分常數(shù) Integral Const unsigned int Derivative; / 微分常數(shù) Derivative Const unsigned int LastError; / Error-1
2、unsigned int PrevError; / Error-2 unsigned int SumError; / Sums of Errors ;struct PID spid; / PID Control Structure unsigned int rout; / PID Response (Output) unsigned int rin; / PID Feedback (Input)sbit data 仁 P1A0;sbit clk=P1Ai; sbit plus=P2A0;sbit subs=P2A1; sbit stop=P2A2; sbit output=P3A4; sbit
3、 DQ=P3A3; unsigned char flag,flag_1=0; unsigned char high_time,low_time,count=0;/ 占空比調(diào)節(jié)參數(shù) unsigned char set_temper=35;unsigned char temper; unsigned char i; unsigned char j=0; unsigned int s;/*延時(shí)子程序,延時(shí)時(shí)間以12M晶振為準(zhǔn),延時(shí)時(shí)間為30usX time*/void delay(unsigned char time)unsigned char m,n; for(n=0;ntime;n+) for(
4、m=0;m2;m+)/*寫一位數(shù)據(jù)子程序*/void write_bit(unsigned char bitval)EA=0;DQ=0; /* 拉低 DQ 以開始一個(gè)寫時(shí)序 */ if(bitval=1)_nop_();DQ=1; /* 如要寫 1,則將總線置高 */delay(5); /* 延時(shí) 90us 供 DA18B20 采樣 */DQ=1;/*釋放 DQ 總線 */_nop_();_nop_();EA=1;/* 寫一字節(jié)數(shù)據(jù)子程序*/void write_byte(unsigned char val)unsigned char i;unsigned char temp;EA=0;TR0
5、=0;for(i=0;ii; /*移位操作,將本次要寫的位移到最低位 */ temp=temp&1;write_bit(temp); /* 向總線寫該位 */ delay(7); /* 延時(shí) 120us 后 */ TR0=1;EA=1;/* 讀一位數(shù)據(jù)子程序*/unsigned char read_bit()unsigned char i,value_bit;EA=0;DQ=0;/*拉低 DQ ,開始讀時(shí)序 */_nop_();_nop_();DQ=1; /* 釋放總線 */for(i=0;i2;i+) value_bit=DQ;EA=1;return(value_bit);/* 讀一字節(jié)數(shù)據(jù)
6、子程序*/unsigned char read_byte()unsigned char i,value=0;EA=0;for(i=0;i8;i+)if(read_bit() /* 讀一字節(jié)數(shù)據(jù),一個(gè)時(shí)序中讀一次,并作移位處理 */ value|=0x01i;delay(4);/*延時(shí) 80us 以完成此次都時(shí)序,之后再讀下一數(shù)據(jù)*/EA=1;return(value);/*復(fù)位子程序* unsigned char reset()unsigned char presence;EA=0;DQ=0; /* 拉低 DQ 總線開始復(fù)位 */ delay(30); /* 保持低電平 480us*/DQ=1
7、; /* 釋放總線 */delay(3);presence=DQ;/* 獲取應(yīng)答信號(hào) */delay(28); /* 延時(shí)以完成整個(gè)時(shí)序 */EA=1;return(presence);/* 返回應(yīng)答信號(hào),有芯片應(yīng)答返回0,無芯片則返回 1*/* 獲取溫度子程序* void get_temper()unsigned char i,j;doi=reset(); /* 復(fù)位 */while(i!=0); /*1 為無反饋信號(hào) */i=0xcc; /* 發(fā)送設(shè)備定位命令 */ write_byte(i);i=0x44; /* 發(fā)送開始轉(zhuǎn)換命令 */ write_byte(i);delay(180);
8、 /*延時(shí) */doi=reset(); /* 復(fù)位 */while(i!=0);i=0xcc; /* 設(shè)備定位 */ write_byte(i);i=0xbe; /* 讀出緩沖區(qū)內(nèi)容 */ write_byte(i);j=read_byte();i=read_byte();i=(i4;temper=i|j; /* 獲取的溫度放在 temper 中 */ /*=Initialize PID Structure =*/ void PIDInit (struct PID *pp)memset ( pp,0,sizeof(struct PID);/*=PID 計(jì)算部分=*/ unsigned int
9、 PIDCalc( struct PID *pp, unsigned int NextPoint ) unsigned int dError,Error;Error = pp-SetPoint - NextPoint; / 偏差 pp-SumError += Error; / 積分 dError = pp-LastError - pp-PrevError; / 當(dāng)前微分 pp-PrevError = pp-LastError; pp-LastError = Error;return (pp-Proportion * Error / 比例項(xiàng) + pp-Integral * pp-SumEror
10、/ 積分項(xiàng) + pp-Derivative * dError); / 微分項(xiàng) /* 溫度比較處理子程序*/ compare_temper() unsigned char i;if(set_tempertemper) if(set_temper-temper1) high_time=100; low_time=0; else for(i=0;i10;i+) get_temper(); rin = s; / Read Input rout = PIDCalc ( &spid,rin ); / Perform PID Interation if (high_time=100) high_time=(
11、unsigned char)(rout/800);else high_time=100;low_time= (100-high_time);else if(set_temper0) high_time=0; low_time=100;else for(i=0;i10;i+) get_temper();rin = s; / Read Inputrout = PIDCalc ( &spid,rin ); / Perform PID Interation if (high_time100)high_time=(unsigned char)(rout/10000);else high_time=0;l
12、ow_time= (100-high_time);/ else/ /*T0 中斷服務(wù)子程序,用于控制電平的翻轉(zhuǎn) ,40us*100=4ms 周期 */ void serve_T0() interrupt 1 using 1if(+count=(high_time) output=1;else if(count=100)output=0;elsecount=0;TH0=0x2f;TL0=0xe0;/* 串行口中斷服務(wù)程序,用于上位機(jī)通訊 */ void serve_sio() interrupt 4 using 2/* EA=0;RI=0;i=SBUF;if(i=2) while(RI=0) RI=0; set_temper=SBUF; SBUF=0x02; while(TI=0) TI=0;else if(i=3)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 婦女節(jié)演講300字模板10篇
- 2025鋼筋電渣壓力焊工程勞務(wù)承包合同
- 2024年潤滑油長途運(yùn)輸合同范本
- 2025土方填埋合同
- 2025商品房購銷合同
- 事業(yè)單位面試自我介紹15篇
- 七年級(jí)班主工作計(jì)劃模板合集九篇
- 2024年中國島式計(jì)算機(jī)桌市場調(diào)查研究報(bào)告
- 2025店面租房合同范本
- 2024至2030年中國氣液分離型溶液濃縮裝置行業(yè)投資前景及策略咨詢研究報(bào)告
- 40米鋼筋結(jié)構(gòu)桁架吊裝方案
- VDA6.3-2016--過程審核培訓(xùn)教材
- 精美小升初簡歷小學(xué)生自我介紹歐式word模板[可編輯]
- 采礦學(xué)課程設(shè)計(jì)陳四樓煤礦1.8mta新井設(shè)計(jì)(全套圖紙)
- 25公斤級(jí)平焊法蘭及螺栓規(guī)格尺寸
- 自我效能感理論及其研究綜述
- 醫(yī)生問診時(shí)與患者對(duì)話
- 中華護(hù)理學(xué)會(huì)會(huì)員申請表(普通+資深會(huì)員)
- (完整版)HSE管理體系及措施
- 軍人體型標(biāo)準(zhǔn)對(duì)照表
- 淺談吉林省中藥材產(chǎn)業(yè)發(fā)展
評(píng)論
0/150
提交評(píng)論