|
電路原理圖如下:
0.png (62.11 KB, 下載次數(shù): 62)
下載附件
2019-7-14 01:19 上傳
0.png (282.35 KB, 下載次數(shù): 70)
下載附件
2019-7-14 01:20 上傳
1 整機(jī)設(shè)計(jì)
1.1 設(shè)計(jì)要求
1.1.1設(shè)計(jì)任務(wù)
以實(shí)驗(yàn)室的過(guò)程對(duì)象為控制對(duì)象,設(shè)計(jì)控制系統(tǒng),完成單容液位的定值控制。要求能夠顯示當(dāng)前液位。
1.1.2性能指標(biāo)要求
(1)設(shè)計(jì)制作系統(tǒng)硬件電路
(2)實(shí)現(xiàn)控制、信號(hào)檢測(cè)(顯示)及調(diào)節(jié)器控制規(guī)律;
(3)參數(shù)整定,使系統(tǒng)能夠快速克服擾動(dòng)作用;
(4)其他功能。
1.2 整機(jī)實(shí)現(xiàn)的基本原理及框圖
1.2.1基本原理
測(cè)量變送器為壓力式液位變送器,輸出信號(hào)為0~10V電壓,執(zhí)行器采用電動(dòng)調(diào)節(jié)閥,接收0~10V信號(hào)。設(shè)計(jì)調(diào)節(jié)器(模擬或數(shù)字式),能夠根據(jù)用戶設(shè)定,將液位控制在要求值(采用雙位控制,PID或PI控制規(guī)律)。
具體請(qǐng)下載觀看吧,有說(shuō)明。
單片機(jī)源程序如下:
- #include "stc15.h"
- #include<TM1638.h>
- #include<delay.h>
- #include<KeyPro.h>
- #include<STC15_AD.h>
- #include<STC15_pca_pwm.h>
- //定時(shí)器初始化
- void T0_init(void)
- {
- TMOD=0x01;
- TH0=(0-1000)/256;
- TL0=(0-1000)%256;
- TR0=1;
- ET0=1;
- EA=1;
- }
- unsigned char u;
- unsigned char BI_POSCTR(void) //雙位控制
- {
- if(Para_V[1]<Para_V[2]-2) //當(dāng)前值<設(shè)定值-2
- {
- u = 200; //開(kāi)200,最大可到255
- }
- else if(Para_V[1]>Para_V[2]+2)
- {
- u = 0;
- }
- else
- u=100; //保持開(kāi)度為100
- return u;
- }
- float kp,ki,kd;
- int ek,ek_1,ek_2;
- int uk,uk_1;
- unsigned char PID(void)
- {
- kp=(float)Para_V[3]/10;
- ki=(float)Para_V[4]/10;
- kd=(float)Para_V[5]/10;
- ek_2=ek_1;
- ek_1=ek;
- ek=(int)Para_V[2]-(int)Para_V[1];
- uk_1=uk;
- uk=uk_1+kp*(ek-ek_1)+ki*ek+kd*(ek-2*ek_1-ek_2); //增量型PID公式
- if(uk>255) uk=255; //限制溢出
- if(uk<0) uk=0;
- return (unsigned char)uk;
- }
- unsigned int OneusCNT=0;
- unsigned int Ones=0;
- unsigned char x=1;
- unsigned char s=1;
- unsigned char key_value;
- float H=0;
- float num=0;
- void main()
- {
- P2M0=0;
- P2M1=0;
- PWM_Init();
- InitADC();
- T0_init();
- delay_ms(10);
- delay(10);
- while(1)
- {
- key_value=Read_key();
- if(key_value!=0)
- {
- KeyPro(key_value-1);
- Cur_V[0]=Para_V[2]; //顯示區(qū)域讀取設(shè)定值
- while(key_value==Read_key()); //按一次限制只執(zhí)行一次
- }
- if(Para_V[0]==0&&x) //對(duì)象為0且采樣時(shí)間到,運(yùn)行
- {
- SetPWM0(0);
- x=0; //初始化時(shí)間
- Para_V[1]=Cur_V[2]=GetADCResult(0);//讀取adc
- switch(Para_V[6]) //控制方式選擇
- {
- case 0:
- SetPWM1(Para_V[7]);
- break;
- case 1:
- BI_POSCTR();
- SetPWM1(u);
- break;
- case 2:
- PID();
- SetPWM1(uk);
- break;
- default: break;
- }
- }
- if(Para_V[0]==1&&s) //同上
- {
- SetPWM1(0);
- s=0;
- num=(float)GetADCResult(6);//獲取adc
- H=1314*num-428; //轉(zhuǎn)化成測(cè)量值,
- Para_V[1]=Cur_V[1]=(unsigned int)(H*10);
- switch(Para_V[6])
- {
- case 0:
- SetPWM0((unsigned char)Para_V[7]);
- break;
- case 1:
- BI_POSCTR();
- SetPWM0(u);
- break;
- case 2:
- PID();
- SetPWM0(uk);
- break;
- }
- }
- if(Setting) //顯示
- Display(ptPra,Para_V[ptPra],11,SetV);
- else
- Display(ptPra,Para_V[ptPra],ptCur,Cur_V[ptCur]);
- }
- }
- void T0_IRQ() interrupt 1//采樣時(shí)間
- {
- TH0=(0-1000)/256;
- TL0=(0-1000)%256;
- OneusCNT++;
- Ones++;
- if(OneusCNT>=50)
- {
- x=1;
- OneusCNT=0;
- }
- if(Ones>=300)
- {
- s=1;
- Ones=0;
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
水位控制雙位+PID.7z
(1.17 MB, 下載次數(shù): 67)
2019-7-12 16:06 上傳
點(diǎn)擊文件名下載附件
程序+硬件+報(bào)告 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|