通用数字PID调节器设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

} else
{ skey2();
} } void skey2(void) { // canshuframe=1;
write7281(0x18,0x17); switch(circleframe)
{ case 0x00: ledframe|=0x0c;
write7281(0x06,ledframe); circleframe+=1; hdconver(limup);//4LED显示上限值 dis4led();
#include"dis7281.h" #include"STC12C5410AD.H" #include"main.H" #include"subkey3.h" #include"subkey2.h" #include"hdconver.h" void subkey3() {
switch(circleframe) { case 0x01:limup=add1(limup);
pidcf(); daconver(); hdconver(setvalue);
dis4led(); write7281(0x06,ledframe); break;
default: break; } }//按相应的S3改变不同的参数 附录[5] S4模块的程序—SUBKEY3.C #include"delay.h"
PID调节器主控部分包括以下几个部分:单片机部分、A/D转换部分、 D/A转换部分、稳压部分、数字输入输出部分以及串口通信部分。 D1:内部设定点信号灯 S1:内部设定点和外部设定点转换开关 D2:手动信号灯 S2:手动自动转换开关 D3:实际值X显示信号灯 D4:设定值W显示信号灯 S3:参数修改以及实际值和设定值显示转换开关 D5:超过限定值信号灯 D6:低于限定值信号灯 S4:设定值增加按钮 S5:设定值减少按钮 S6:修改手动变量按钮 S7:修改手动变量按钮 附录[1] 主程序—MAIN.C #include"adconver.h" #include"delay.h" #include"dis7281.h" #include"STC12C5410AD.H" #include"main.H" #include"subkey0.h" #include"subkey1.h" #include"subkey2.h" #include"subkey3.h" #include"subkey4.h" #include"subkey5.h" #include"subkey6.h" bit insertsetframe=1;//内部设定标志位 bit handframe=1;//手动设定标志位 bit improvedisframe=0;//实际值标志位 bit shineframe=0;//判断是不是第一次开机停止4LED的闪烁 bit canshuframe=0x00;//参数标志位 unsigned char circleframe=0x00;//参数循环变量 unsigned char channelframe=0x00;//通道标志位 unsigned char ledframe=0xfc;//LED灯管状态
通用数字PID调节器设计
主要技术数据和设计要求
主要技术数据: 8路模拟量输入:适配1~5V输入,量程自由设定; 8路输出控制信号:1~5V标准电压输出; 输入模拟量转换精度:0.1%; RS232串行通讯通口; 控制模型:数字PID控制算法 PID参数范围:比例带Kp: 1-999.9% 积分时间Ti: 1-9999秒(Ti=9999时积分切除) 微分时间Td::0-9999秒(Td=0时微分切除) 调节控制器使用51内核的单片机内核的单片机,完成对8路模拟信号的 切换、信号变换、A/D转换;单片机对数据处理后(含数字滤波、数值 变换),送到显示和通讯部分,并经PID运算处理后通过D/A转换器输 出。经信号变换和信号分配后输出8路控制信号。设计中应充分考虑干 扰问题。 设计步骤 一、总体方案设计 二、控制系统的建模和数字控制器设计 三、硬件的设计和实现 1. 选择计算机机型(采用51内核的单片机); 2. 设计支持计算机工作的外围电路(EPROM、RAM、I/O端口等); 3. 设计键盘、显示接口电路; 4. 设计8路模拟量输入输出通道; 5. 设计RS232串行通讯通口; *6. 其它相关电路的设计或方案(电源、通信等)。 四、软件设计 1. 分配系统资源,编写系统初始化和主程序模块; 2. 编写数字PID调节器软件模块; 3. 编写数字滤波程序; *4. 编写A/D、D/A转换器处理程序模块; *5. 其它程序模块(显示与键盘等处理程序)。 五、编写课程设计说明书,绘制完整的系统电路图。
unsigned char times=0x00;//记数位 unsigned char readkey; unsigned int setvalue=0x00;//设定值 unsigned char outputvalue=0x00;//输出值 unsigned int limup=0x270f;//实际值上限 unsigned int limdown=0x00;//实际值下限 unsigned int a1=0x270f;//上限报警值 unsigned int a2=0x00;//下限报警值 unsigned int cp=0x00;//P参数 unsigned int ci=0x00;//I参数 unsigned int cd=0x00;//D参数 unsigned char led[6];//LED值公共 main() {
break; case 0x02:limdown=add1(limdown);
break; case 0x03:a1=add1(a1);
case 0x02: circleframe+=1; hdconver(a1);//4LED显示上限报警 dis4ledwenku.baidu.com);
write7281(0x14,0x41); write7281(0x15,0x5a); //写入2LEDA1 break;
case 0x03: circleframe+=1; hdconver(a2);//4LED显示下限报警 dis4led();
write7281(0x14,0x42); write7281(0x15,0x5a); //写入2LEDA2 break;
case 0x04: circleframe+=1; hdconver(cp);//4LED显示P参数
dis4led(); write7281(0x14,0x4e); write7281(0x14,0x5f); //写入2LEDP break;
{ while(!key) { keynumber=read7281(0x13); switch(keynumber) { case 0x00:
subkey0();break; case 0x01:
subkey1();break; case 0x02:
subkey2();break; case 0x03:
write7281(0x14,0x41); write7281(0x14,0x5C); //写入2LEDHI break;
case 0x01: circleframe+=1; hdconver(limdown);//4LED显示下限值
dis4led(); write7281(0x14,0x40); write7281(0x14,0x5d); //写入2LEDLO break;
if(insertsetframe==1) { insertsetframe=0;
ledframe|=0x01; write7281(0x06,ledframe); } else
{ insertsetframe=1; ledframe&=0xfe; write7281(0x06,ledframe); } }//更改内部设定和外部设定的状态,并将相应的状态位进行更改,并更 改状态灯
subkey3();break; case 0x04:
subkey4();break; case 0x05:
subkey5();break; case 0x06:
subkey6();break; default:
break; } } } } 附录[2] S1模块的程序—SUBKEY0.C #include"delay.h" #include"dis7281.h" #include"STC12C5410AD.H" #include"main.H" #include"subkey0.h" void subkey0() {
unsigned int tmr; unsigned char keynumber;
for (tmr=0;tmr<0xffff;tmr++); write7281(0x12,0x80); write7281(0x10,0xf0); write7281(0x00,0xc8); write7281(0x14,0x1b); write7281(0x14,0x2e); write7281(0x15,0x30); write7281(0x15,0x40); write7281(0x15,0x50); write7281(0x06,0xfc); while(1)
附录[3] S2模块的程序—SUBKEY1.C #include"delay.h"
#include"dis7281.h" #include"STC12C5410AD.H" #include"main.H" #include"subkey1.h" void subkey1() {
if(handframe==1) { handframe=0;
write7281(0x15,0x4d); write7281(0x14,0x5f); //写入2LEDI break; case 0x07: improvedisframe=0;
ledframe=(ledframe|0x08)&0xfb; circleframe+=1; adconver();
write7281(0x14,0x40); write7281(0x14,channelframe); write7281(0x06,ledframe); break; case 0x08: improvedisframe=1; ledframe=(ledframe|0x04)&0xf7; circleframe=0;
ledframe|=0x02; write7281(0x06,ledframe); } else
{ handframe=1; ledframe&=0xfd; write7281(0x06,ledframe); } } //更改手动自动状态,改变相应的状态位,更改相应的状态灯 附录[4] S3模块的程序—SUBKEY2.C #include"delay.h" #include"dis7281.h" #include"STC12C5410AD.H" #include"main.H" #include"subkey2.h" #include"adconver.h" #include"subkey0.h" #include"subkey1.h" #include"hdconver.h" #include"subkey3.h" #include"subkey4.h" #include"pid.h" #include"daconver.h" void subkey2() { if(shineframe==0) { write7281(0x10,0xff); shineframe=1;
case 0x05: circleframe+=1; hdconver(ci);//4LED显示I参数 dis4led();
write7281(0x14,0x41); write7281(0x14,0x5f); //写入2LEDI break;
case 0x06: circleframe+=1; hdconver(cd);//4LED显示D参数 dis4led();
相关文档
最新文档