基于msp430单片机的温度pid算法大学学位论文

上传人:无*** 文档编号:218210002 上传时间:2023-06-18 格式:DOC 页数:54 大小:1.40MB
返回 下载 相关 举报
基于msp430单片机的温度pid算法大学学位论文_第1页
第1页 / 共54页
基于msp430单片机的温度pid算法大学学位论文_第2页
第2页 / 共54页
基于msp430单片机的温度pid算法大学学位论文_第3页
第3页 / 共54页
点击查看更多>>
资源描述
基于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); SPI_LCD_Show_Float( 165,160,Step,0,RED,16);void Frame_Show(void) Para_Speci_Show( ); Parameter_Show( ); /设备初始化void Device_Init(void) char Channel1; Channel0 = SREF_1+INCH_0; WDTCTL = WDTPW + WDTHOLD;/停狗 Clk_Init( ); /初始化系统时钟函数 UART0_Init( );/串口初始化 TimerB_Init( ); TA_Init( ); ADC12Init(1,Channel,1); ADC12Start( ); P6SEL |= 0x01;/初始化AD通道IO口 SPI_LCD_Init( );/串行LCD初始化 SPI_LCD_Clear(WHITE);/清屏白色 LED_GPIO_Init( ); _EINT();/开总中断 Parameter_Init();/PID参数初始化 Frame_Show( );/参数显示/* * 函数名:Scale_Conv * 描述 :标度变换函数 * 输入 : Converter_Value 转换变量 * 输出 :*/ 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); /* * 函数名:PIDCalc * 描述 :PID计算函数 * 输出 :PID_Value * 注意 ;位置式PID运算 * Pre_Value: 当前值 * Prev_Error: 前一次误差*
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!