版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、. PID调节器主控局部包括以下几个局部:单片机局部、A/D转换局部、D/A转换局部、稳压局部、数字输入输出局部以及串口通信局部。D1:部设定点信号灯S1:部设定点和外部设定点转换开关D2:手动信号灯S2:手动自动转换开关D3:实际值*显示信号灯D4:设定值W显示信号灯S3:参数修改以及实际值和设定值显示转换开关D5:超过限定值信号灯D6:低于限定值信号灯S4:设定值增加按钮S5:设定值减少按钮S6:修改手动变量按钮S7:修改手动变量按钮附录1 主程序MAIN.C#includeadconver.h#includedelay.h#includedis7281.h#includeSTC12C54
2、10AD.H#includemain.H#includesubkey0.h#includesubkey1.h#includesubkey2.h#includesubkey3.h#includesubkey4.h#includesubkey5.h#includesubkey6.hbit insertsetframe=1;/部设定标志位bit handframe=1;/手动设定标志位bit improvedisframe=0;/实际值标志位bit shineframe=0;/判断是不是第一次开机停顿4LED的闪烁bit canshuframe=0*00;/参数标志位unsigned char ci
3、rcleframe=0*00;/参数循环变量unsigned char channelframe=0*00;/通道标志位unsigned char ledframe=0*fc;/LED灯管状态unsigned char times=0*00;/记数位unsigned char readkey;unsigned int setvalue=0*00;/设定值unsigned char outputvalue=0*00;/输出值unsigned int limup=0*270f;/实际值上限unsigned int limdown=0*00;/实际值下限unsigned int a1=0*270f;
4、/上限报警值unsigned int a2=0*00;/下限报警值unsigned int cp=0*00;/P参数unsigned int ci=0*00;/I参数unsigned int cd=0*00;/D参数unsigned char led6;/LED值公共main() unsigned int tmr; unsigned char keynumber; for (tmr=0;tmra1) ledframe&=0*ef;/翻开上限报警灯 write7281(0*06,ledframe); if(addataa2) ledframe&=0*df;/翻开上限报警灯 write7281(0
5、*06,ledframe); hdconver(addata); dis4led();附录8 D/A转换模块的程序DACONVERC#includedelay.h#includeSTC12C5410AD.H#includemain.H#includedaconver.hsbit TLV5618_SCLK=P17;sbit TLV5618_DIN=P15;sbit TLV5618_CS=P14; void mDelay(unsigned int a)unsigned int f; for(f=0;fa;f+); void TLV5618 (unsigned int da) unsigned in
6、t i;unsigned int dat;dat= da|0*c000;TLV5618_CS=0;TLV5618_SCLK=0; for(i=0;i16;i+) TLV5618_DIN=(bit)(dat&0*8000); dat=dat1; TLV5618_SCLK=1; mDelay(50); TLV5618_SCLK=0; mDelay(50); TLV5618_CS=1; void daconver(void) float i=100; unsigned int da; i=outputvalue/100*4096; da=(unsigned int)i; TLV5618 (da);附
7、录9显示及键盘模块的程序DIS7281C#includedelay.H#includeSTC12C5410AD.H#includedis7281.H#includemain.hvoid write7281(unsigned char regadd,unsigned char writedata) sendbyte(regadd); sendbyte(writedata); void sendbyte(unsigned char sendbyte) unsigned char bitcounter; clk=0; clk=1; do clk=0; clk=1; while(dat); clk=0
8、; clk=1; while(!dat); for(bitcounter=0;bitcounter8;bitcounter+) if (sendbyte&0*80)=0) dat=0; else dat=1; sendbyte=sendbyte*2; clk=0; clk=1; delay(1); dat=1; delay(2);unsigned char receivebyte(void) unsigned char bit_counter; unsigned char in_byte; clk=0; clk=1; /只发送一个单元的脉冲 while(dat);/等待BC7281响应DAT底
9、电平 clk=0; clk=1; /受到响应,再发一脉冲等待承受数据 for (bit_counter=0;bit_counter8;bit_counter+ ) /承受8个BIT delay(1); in_byte=in_byte*2 ;/in_byte左移一位 if(dat) /如果DAT为1 in_byte=in_byte|0*01; /bit0=1 clk=0; clk=1; delay(2); clk=0; clk=1; return(in_byte);unsigned char read7281(unsigned char reg_add) sendbyte (0*80+reg_a
10、dd); /发送读指令BIT 7=1 return (receivebyte(); /承受数据字节并返回 void dis4led() unsigned char i; unsigned char id=0*00; for(i=0;i4;i+) write7281(0*14,id+ledi); id+=0*10; void dis2led() unsigned char i; unsigned char id=0*40; for(i=4;ipv=process_point; pid-sp=set_point; void pid_tune(struct _pid *pid,float p_gai
11、n,float i_gain,float d_gain,int dead_band) pid-pgain=p_gain; pid-igain=i_gain; pid-dgain=d_gain; pid-deadband=dead_band; pid-integral=integral_val; pid-last_error=0;void pid_setinteg(struct _pid *pid,float new_integ) pid-integral=new_integ; pid-last_error=0;void pid_bumpless(struct _pid *pid) pid-la
12、st_error=(pid-sp)-(pid-pv);float pid_calc(struct _pid *pid) int err; float pterm,dterm,result,ferror; err=(pid-sp)-(pid-pv); if(abs(err)pid-deadband) ferror=(float)err; pterm=pid-pgain*ferror; if(pterm100|ptermintegral=0.0; else pid-integral+=pid-igain*ferror; if(pid-integral100.0) pid-integral=100.
13、0; else if(pid-integralintegral=0.0; dterm=(float)(err-pid-last_error)*pid-dgain; result=pterm+pid-integral+dterm; else result=pid-integral; pid-last_error=err; return(result);void pidcf(void) int count=0; float val=100; float p_gain=cp/val; float i_gain=ci/val; float d_gain=cd/val;/ unsigned int dadata; pid=&warm; dead_band=2; integral_val=(float)(0.01); while(count=20) process_point=(unsigned int)addata/val; set_point=(unsigned int)setvalue/val; pid_init
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二年级乘除法口诀专项练习1000题
- 人教部编版四年级语文上册《快乐读书吧》精美课件
- 算法设计与分析 课件 8.3-分支限界 - 典型应用 - 0-1背包问题
- 2024年葫芦岛烟台客运上岗证考试题
- 2024年长沙客运驾驶员从业资格考试系统
- 2024年沈阳c1客运资格证模拟考试题
- 2024年合肥小车客运从业资格证考试
- 2024年河南2024年客运从业资格证模拟考试题库
- 吉首大学《高级语言程序设计A实验》2021-2022学年期末试卷
- 吉林艺术学院《数字娱乐导论》2021-2022学年第一学期期末试卷
- 学前教育-幼儿园环境创设对幼儿创造力和审美性影响研究
- 【专业资讯】人体成分分析在临床中的应用
- 螺旋天线综述
- 隧道照明工程设计方案详解
- 画法几何 (210)标高投影
- 脚本理论观照下的电影字幕翻译
- 水墨风阅读古典小说水浒传课程PPT专题课件
- 步兵班战术教案(全)
- 机场跑道和停机坪施工工艺工法
- 注塑件生产成型质量控制计划
- 枸杞多糖的提取与分离
评论
0/150
提交评论