基于MSP430单片机的温度PID算法设计毕业设计(论文).doc_第1页
基于MSP430单片机的温度PID算法设计毕业设计(论文).doc_第2页
基于MSP430单片机的温度PID算法设计毕业设计(论文).doc_第3页
基于MSP430单片机的温度PID算法设计毕业设计(论文).doc_第4页
基于MSP430单片机的温度PID算法设计毕业设计(论文).doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于dsp的全向运动控制系统软件设计南 阳 理 工 学 院本科生毕业设计(论文)学院(系): 电子与电气工程学院 专 业: 自 动 化 学 生: 黄帅豪 指导教师 : 殷华文 完成日期 2014 年 5 月 南阳理工学院本科生毕业设计(论文)基于msp430单片机的温度pid算法设计 design of temperaturepid algorithmbased on msp430 single chip microcomputer 总 计 : 20 页表 格 : 0 个插 图 : 13 幅南 阳 理 工 学 院 本 科 毕 业 设 计(论文)基于msp430单片机的温度pid算法设计design of temperaturepid algorithmbased on msp430 single chip microcomputer学 院(系): 电子与电气工程学院 专 业: 自动化 学 生 姓 名: 黄帅豪 学 号: 105090640035 指 导 教 师(职称): 殷华文(副教授) 评 阅 教 师: 完 成 日 期: 南阳理工学院nanyang institute of technology基于msp430单片机的温度pid算法设计基于msp430单片机的温度pid算法设计自动化专业 黄帅豪摘 要 本设计基于msp430f149单片机,以iar embedded workbench软件为开发平台,在msp430中用自编的位置式pid算法程序实现对电加热锅炉水温的控制,并在上位计算机上实现组态王软件监控。pt100热电阻信号经放大调理后通过msp430 adc模块送入单片机。在matlab中通过一元二次方程进行温度数据拟合,把拟合结果在msp430中编程进行温度数据标度变换,上位机向msp430发送温度设定值和pid参数,根据组态王软件监控结果对算法进行分析和改进,加入不完全微分和积分分离程序。通过实验验证和结果分析,温度控制无超调,稳态误差0.3。关键词msp430单片机;位置式温度pid算法;温度数据拟合;不完全微分;积分分离design of temperaturepid algorithmbased on msp430 single chip microcomputerautomation specialty huang shuai-haoabstract: the design is based on scm msp430f149, using iar embedded workbench software as a development platform, to realize the temperature control of electric water boiler with location pid algorithm program compiled in msp430, and realizes the kingview software in upper computer monitoring. pt100 thermal resistance signal is amplified by msp430 adc after conditioning module into the microcontroller. the temperature data through a two quadratic equations in the matlab, the fitting results are programmed in msp430 temperature data scale conversion, computer set value and pid parameter to send set temperature to msp430, after analyzed and improved on the algorithm according to the monitoring results of kingview software, with incomplete differential and integral separation procedure. through experiment and analysis of the results, the temperature control has no overshoot, steady-state error of 0; i-);/等待8mhz晶体起振 while (ifg1 & ofifg);/晶振失效标志仍然存在? bcsctl2 |= selm_2 + sels;/mclk和smclk选择高频晶振4.2.2 pid算法程序本pid算法程序采用位置式控制算式,由于在测试过程中发现温度曲线波动较大且出现毛刺,所以在原有的完全微分的基础上改进为不完全微分,因为完全微分pid是一次微分作用,而不完全微分pid是分几次输出微分作用。微分是一种重要的控制作用,可以较明显的改善闭环系统的控制性能。假如偏差的阶跃幅值较大,在完全微分时,一次输出的微分作用幅值会很大,很可能会因输出限幅而丧失应有的微分作用。而不完全微分,因为微分作用分几次输出,而每次输出幅值较小,所以能较好的保存应有的微分作用。在开停工或大幅度升降设定值时,由于偏差累计较大,故在积分项的作用下会产生一个很大的超调,并产生振荡,特别是对于温度、液面等变化缓慢的过程,这一现象更为严重。为了改进控制性能可采用积分分离的方法,即在受控变量开始跟踪时,取消积分作用,偏差小于某一设定值时,才产生积分作用,程序如下:void pidcalc(void)float rate;/误差变化率 current_error = set_temp - pre_temp ;/ 当前误差计算sum_error += current_error;/ 误差积分prev_error = last_error;/ 存储误差更新last_error = current_error;/ 存储误差更新rate = ( current_error - last_error )*1000/ ctrl_period; / 当前误差微分if(rate5)/对误差变化率进行限制,锅炉温度不可能变化太大rate=5;if(ratepid_i_max ) i_out = pid_i_max;if( i_outpid_i_min ) i_out = pid_i_min;if( ( current_error = 2.5 ) & ( prev_error =2.8) i_out=i_out * 0.5; if( (current_error = 0.45 ) & ( last_error =55) i_out=i_out * 0.08; /因为锅炉只能加温不能降温所以一旦超过设定值令积分值为零 if( ( current_error = 0 ) & ( last_error = pwm_data_max ) pid_out = pwm_data_max; if ( pid_out =10) pid_out=16383; void main() device_init( ); while(1) led8_rollback;/系统运行指示灯 parameter_show( ); 4.2.3 adc模数转换程序该段程序首先完成adc12模块的通用程序框架,adc12模块的初始化函数,仅仅实现了多通道的单次和多次转换,单通道的可以用参数,多通道模式下设置一个通道.adc12启动转换函数完成启动adc12,开始a/d转换。中断程序必须自己添加处理函数(根据实际使用的通道情况)。这里选用的时钟smclk,参考电压内部打开的是2.5v,每次当多个通道转换完成后,打开中断时,单片机会自动调用本函数,使用时需要自己添加处理逻辑12,程序如下:char adc12init(char n,char channels,char rep) if(n15)return 0;adc12ctl0 = adc12on + msc + sht0_0 + refon + ref2_5v;/ 开启ad,参考电压2.5vadc12ctl1 = shp + adc12ssel_3; /use sampling timer, smclkfor(int i = 0;i = 0x80)return 0;*(char*)(adc12mctl0_ + i) = channelsi;/每个mctl设置 *(char*)(adc12mctl0_ + n - 1) |= eos;/序列结束 if(rep != 0)/多次转换adc12ctl1 |= conseq_3;else adc12ctl1 |= conseq_1;adc12ie = 1(n-1);/ enable adc12ifg.n-1return 1;4.2.4 定时器设置程序设定定时器a控制寄存器使能中断,设置ccr0初值,及100毫秒中断一次,计数器计数设置为加模式初始化定时器b,函数设置pwm中断周期,pwm低电平时间,设置pwmio口和pwm低电平时间。void ta_init(void) tactl=tassel0+taclr;/设定定时器a控制寄存器 cctl0=ccie;/使能中断 ccr0=3276;/设置ccr0初值,及100毫秒中断一次 tactl|=mc0;/计数器加模式void timerb_init(void) tbctl=tbssel_1+tbclr+mc0+id_3; tbcctl1=outmod_3; tbccr0=16384;/pwm中断周期 tbccr1=4000;/pwm低电平时间 p4dir|=bit1;/设置pwmio口 p4sel|=bit1;void timerb_duty(u16 duty) tbccr1=duty;/pwm低电平时间4.2.5 异步通讯程序异步通讯串口数据格式包括起始位、7位或8位数据、奇偶校验位、地址位、一位或二位停止位,每位数据的周期通过所选择的时钟和波特率发生器来确定,本设计采用空闲模式void uart0_init(void) wdtctl = wdtpw + wdthold;/ stop wdt p3sel |= 0x30;/ p3.4,5 = usart0 txd/rxd me1 |= utxe0+urxe0;/ enable usart0 txd/rxd uctl0 |= char;/ 8-bit character utctl0 |= ssel0;/ uclk = aclk ubr00 = 0x03;/ 32k/9600 - 3.41 ubr10 = 0x00; umctl0 = 0x4a;/ modulation uctl0 &= swrst;/ initialize usart state machine ie1 |= urxie0;/ 使能usart0的接收中断void putchar(uchar data) while (!(ifg1 & utxifg0);/ tx缓存空闲? txbuf0 = data;/ 发送数据void blank(void) putchar(0x20);void newline() putchar(0x0d);/发送一个回车 putchar(0x0a);/发送一个换行void putstring(uchar *ptr) while(*ptr != 0) putchar(*ptr+); 4.2.6 温度拟合程序将采集的温度数值与模数转换后的数字量进行拟合和标度变换,程序如下:float scale_conv( u16 value)float temp1=0,temp2=0; /温度拟合(二次函数)temp1=value*a_para;temp1=value*temp1;temp2=value*b_para;/当前温度=a*x*x+b*x+c-零漂return (temp1+temp2+c_para+null_shift); 5 系统调试及结果分析5 .1 系统整体的调试和结果5.1.1 modbus-ascii的调试调试思路是用串口模拟上位机,按照modbus-ascii上位机的数据格式,给下位机(msp430)发送数据,观察msp430能否正确应答,如果能正确应答,就可以让msp430直接和上位机通信。上位机通信窗口如图9所示图9 上位机通信窗口应用程序下载窗口如图10所示:图10 应用程序下载窗口5.1.2 上位机监控画面上位机监控画面如图11、12、13所示:图11 上位机监控画面p:100 i:0.50 d:0.00 当前温度:69.31 设定温度:70.00图12 上位机监控画面p:110.00 i:0.50 d:0.00 当前温度:69.93 设定温度:70.00图13 上位机监控画面p:115.0 i:0.30 d:0.25 当前温度:65.01 设定温度:65.00 5.2 结果分析从效果可以看出系统实现静态锅炉温度控制,无超调,稳态误差小于0.3,通过对比可以验证出如果比例系数增大,则系统的动作灵敏响应速度加快,稳态误差减小,如果kp偏大则导致调节时间加长。kp太大时,系统会趋于不稳定,kp太小又会使系统动作缓慢,在系统稳定的情况下,随着kp的增大,可以减小稳态误差但不能消除稳态误差。动态时,积分控制常使系统的稳定性下降ti值太小,系统不稳定,ti值偏小,容易引起系统振荡,ti值太大,对系统的影响将消弱,稳态时,积分控制可以消除系统静态误差,提高系统精度,但ti值太大时,因积分控制作用的削弱,反而不能减小稳态误差;微分时间td对系统性能的主要作用是减小超调量、缩短调节时间、允许加强比例控制,从而减小稳态误差,提高控制精度和改善动态特性等。结束语 本课题研究制作的msp430单片机的温度pid算法设计借助iar软件设计平台实现了主程序、pid算法、adc模数转换、定时器设置、异步通讯以及上位机组态王与单片机的通讯程序,实现了单片机对电加热锅炉静态水的温度控制,通过对pid参数的设置实现了温度监控曲线温度控制超调量0.5,稳态误差 0; i-);/等待8mhz晶体起振 while (ifg1 & ofifg);/晶振失效标志仍然存在? bcsctl2 |= selm_2 + sels;/mclk和smclk选择高频晶振 void parameter_init(void) operating_paramrter0 = p;/p operating_paramrter1 = i;/i operating_paramrter2 = d;/doperating_paramrter3 = pre_temp;/当前温度 operating_paramrter4 = set_temp;/设定温度 operating_paramrter8 = pid_out;/pid_out operating_paramrter9 = ad_result; operating_paramrter10 = pwm_duty;/pwm_duty void read_data_from_slave(void) operating_paramrter0 = p; operating_paramrter1 = i; operating_paramrter2 = d; operating_paramrter3 = pre_temp;/读取当前温度 operating_paramrter4 = set_temp;/读取设定温度 operating_paramrter5 = p_out;/p_out operating_paramrter6 = i_out;/i_out operating_paramrter7 = d_out;/d_out operating_paramrter8 = pid_out;/pid_out operating_paramrter9 = ad_result;/ad_average operating_paramrter10 = pwm_duty;/pwm_dutyvoid writer_data_to_slave( ) p = operating_paramrter0 ; i = operating_paramrter1 ; d = operating_paramrter2 ; set_temp = operating_paramrter4 ;void para_speci_show(void) spi_lcd_showstring(5,6,p:,0, red,16); spi_lcd_showstring(5,20,i:,0, red,16); spi_lcd_showstring( 5,34,d:,0, red,16 ); spi_lcd_showstring( 5,48,pre_temp:,0, red,16 ); spi_lcd_showstring( 5,62,set_temp:,0, red,16 ); spi_lcd_showstring( 5,160,step:,0, red,16 );void parameter_show( ) spi_lcd_show_float( 165,6,p,0,red,16); spi_lcd_show_float( 165,20,i,0,red,16); spi_lcd_show_float( 165,34,d,0,red,16); spi_lcd_show_float( 165,48,pre_temp,0,red,16); spi_lcd_show_float( 165,62,set_temp,0,red,16)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论