2015年全国大学生电子设计竞赛风板控制装置(I题)【高职高专组】2015年8月15日摘要本系统以MSP430单片机为控制核心,通过PID算法,实现了对风板的控制。系统主要由电源模块、角度测量模块、电机驱动模块、显示模块、键盘模块和声光模块等构成。通过PID反馈输出PWM来改变直流风机风力大小,使风板转角根据需求变化。加速度传感器MPU6050检测风板位置的变化,并将风板角度在LCD液晶器上显示,同时单片机对采集的数据进行分析,实时调整PWM输出,通过驱动芯片L298N控制风机风速,使风板达到稳定的状态,并带有相应的声光提醒功能,使系统人性化,经过反复测试,达到了设计要求。关键词:MSP430;PID;PWM;直流风机;MPU6050目录11系统方案本系统主要由主控模块、角度检测模块、电机驱动模块、显示模块、电源模块组成,下面分别论证这几个模块的选择。1.1主控模块的论证与选择方案一:采用传统8位的51单片机作为该系统的控制核心。经典51单片机具有价格低廉,使用简单等特点,但其存在外设I/O端口较少,运算速度低,功能单一,不稳定等缺点。方案二:采用TI公司所生产的MSP430F149单片机为主控制芯片,运算速度快,超低功耗,有非常丰富的片内资源,性价比高。综合比较以上两个方案,选择TI公司生产的430芯片,在低功耗方面有显著的优势,处理数据快,且其片内资源丰富,满足系统设计需求。1.2角度检测模块方案论证方案一:采用模拟三轴加速度计MMA7260,MMA7260QT是检测物件运动和方向的传感器,它根据物件运动和方向改变输出信号的电压值。通过A/D转换器读取输出信号,检测其运动和方向。方案二:采用mpu6050传感器可准确追踪快速与慢速动作,并且可调整感测范围,可快速、直接将检测信号给控制器。控制帆板角度是个快速处理的过程,方案一还需采集电路对AD进行采集转化为数字量,综合考虑选择方案二。1.3电机驱动模块本设计的主要目的在于控制风机的转速,因此电机驱动模块是必不可少,其方案有以下两种。方案一:采用大功率晶体管组合电路构成驱动电路,这种方法结构简单,成本低、易实现,但由于在驱动电路中采用了大量的晶体管相互连接,使得电路复杂、抗干扰能力差、可靠性下降,我们知道在实际的生产实践过程中可靠性是一个非常重要的方面。因此此中方案不宜采用。方案二:采用专用的电机驱动芯片,例如L298N、L297N等电机驱动芯片,由于它内部已经考虑到了电路的抗干扰能力,安全、可靠行,所以我们在应用时只需考虑到芯片的硬件连接、驱动能力等问题就可以了,所以此种方案的电路设计简单、抗干扰能力强、可靠性好。设计者不需要对硬件电路设计考虑很多,可将重点放在算法实现和软件设计中,大大的提高了工作效率。基于上述理论分析和实际情况,电机驱动模块选用方案二。1.4显示模块方案2方案一:选用常见的数码管显示,成本低,只能显示简单的字符和数字。显示位数较多时,轮番扫描占用CPU时间。方案二:选用12864显示屏做显示。12864的显示为128x64,显示面积大,数字和汉字显示容易实现,程序要求不是很高,更加方便。方案三:用彩屏做显示。彩屏显示效果好,但成本高,功耗大,编程设计相对繁琐。由于系统显示信息量较多,对比所述方案,选择12864作为系统显示器。1.5电源模块方案电源是任何系统能否运行的能量来源,本系统中电源模块为主控制器、电机驱动、角度检测模块等提供电源。方案一:通过电阻分压的形式将整流后的电压分别降为控制芯片和电机运行所需的电压,此种方案原理和硬件电路连接都比较简单,但对能量的损耗大,在实际应用系统同一般不宜采用。方案二:通过固定芯片对整流后的电压进行降压、稳压处理(如7812、7805等),此种方案可靠性、安全性高,对能源的利用率高,并且电路简单容易实现。根据系统的具体要求,采用方案二作为系统的供电模块。2.系统理论分析与计算2.1角度确定风板运动过程中需要实时检测角度的变化,通过计算加速度传感器传回的数据,可以测得风板的角度,加速度与角度存在如下关系:2.2风速控制风速的快慢直接决定了系统风板角度的大小。通过pid调节,单片机输出PWM波形,可对风板进行快速、准确的调整。3通过不断调整P(比例)、I(积分)、D(微分)值,系统的稳定性得到明显的提高,响应时间也加快了。由各个参数的控制规律可知,比例P使反应变快,微分D使反应提前,积分I使反应滞后。在一定范围内,P,D值越大,调节的效果越好。3.电路与程序设计3.1硬件电路设计系统总体框图如图3.1所示。单片机电源模块显示模块角度检测模块电机模块按键操作声光报警模块图3.1系统总体框图3.1.1单片机最小系统设计MSP430F149单片机,其最小系统包括电源电路、复位电路、时钟电路,具体电路设计如图3.2所示。图3.2最小系统原理图3.1.2角度测量设计4本系统中要实时监控风板的角度,系统采用mpu6050传感器,通过计算可迅速得出测量的角度,从而反馈给单片机进行相应操作。3.1.3显示模块设计本系统采用LCD12864作为显示,模块电路图如图3.3所示。图3.3LCD12864电路图3.1.4直流风机驱动电机驱动芯片L298N内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器。L298可驱动2个电机,OUT1、OUT2和OUT3、OUT4之间分别接2个电动机。5、7、10、12脚接输入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。利用单片机产生PWM信号接到ENA,ENB端子,对电机的转速进行调节。电机驱动电路如图3.4所示。图3.4电机驱动3.1.5供电系统电路5在电子电路及设备中,一般都需要稳定的直流电源供电。小功率的稳压电源的组成如图3.5所示,它由电源变压器、整流电路、滤波电路和稳压电路四部分组成。直流稳压电源电路如图3.6所示。图3.5直流稳压电路工作原理图3.6LM2596可调电源模块3.2程序设计3.2.1程序功能描述根据设计要求,软件部分主要实现风机转速控制以及声光报警与液晶显示。(1)风机转速控制部分:在键盘按下设定风板的角度后,风板15s内处于指定位置并稳定5秒以上,上下波动不超过5度,根据传感器测出的距离通过PID算法调整风机转速来调整风板的位置。(2)键盘设置部分:在键盘按下后,风机作出相应转速,风板达到指定位置。(3)液晶显示部分:液晶器显示风板位置及维持时间。3.2.2程序设计思路系统程序主要由角度检测部分,PID调节部分和显示部分组成。设定需求角度,通过获取测量角度值来反馈给单片机,单片机做出相应的PWM调节,从而达到需求的角度。同时液晶将对实时采集的角度和按键值信息进行显示。63.2.3程序流程图程序总体流程图如图3.7所示,PWM控制流程图如图3.8所示,12864液晶显示电路流程图如图3.9所示。开始系统初始化采集角度达到设定值调节电机液晶显示结束设定角度YNYN开始初始化读取角度值是否需要PID调节Pwm脉冲调整电机驱动PID调节运算输出NY图3.7程序主流程图图3.8PWM控制电路图3.912864液晶程序流程图4系统测试4.1测试仪器高精度的数字毫伏表、模拟示波器、数字示波器、数字万用表、指针式万用表、量角器、秒表。4.2测试方案1、硬件测试对各个模块进行测试,测试通过后使用。2、软件仿真测试对程序的错误和不能正确实现的部分进行调节和改正。3、硬件软件联调对整体功能的实现进行进一步调节。4.3测试结果及分析4.3.1测试结果a.风板实际角度与角度传感器角度比较7实测角406080100120130150角度传感器值405981101120131150b.风板角度与pwm关系如表4.2所示。不带砝码测试次数设定角度测试结果测试误差完成时间14526538549051156135带砝码745865985109011115121354.3.2测试分析与结论根据上述测试数据,随着PWM的增加,风机的风速逐渐加大,风板设定的角度能维持3~5s,由此可以得出以下结论:1、风机的转速可通过PWM调控且成正比关系。2、风板实际角度与传感器检测的角度误差1度,当稳定时,角度误差小于5度波动,符合系统要求。8综上所述,本系统达到设计要求。5设计总结不说我们在电赛中学到的新知识是多么有价值,也不用说它拓宽了多少我们的眼界,只是说它让我们的能力得到提高就已足以成为我们努力付出的回报。在这四天三夜的奋战中,遇到过很多困难,搭载硬件时,由于对量角器安装角度有误差,导致软件校准时存在较大误差,经过仔细排查,不断改变方案,最终解决了问题。软件调试时,PID参量设置成了最头疼的问题,过大调整系统波动较大,过小调整风板很难达到预设角度。功夫不负有心人,两天的幸苦没有白费,当风机稳定的转动到达预设角度时,喜悦之情难以言表。理论与现实总是用通过实践联系起来的,我们在这次比赛中不再是局限于课本或是参考资料中的理论知识,而是把所有的实验都按部就班的做过,并通过实验结果对所理解的知识进行了加强巩固,更是对原来的理解偏差进行了改正,使我们对平时所学的课程更加透彻。当然,我们自己动手焊接了不少硬件电路,用到了大量的基础知识,还把实习中学到的焊接技术,对以前的知识进行了一次整合。再来,它增强了我们的沟通能力。合作精神是一个团队成立成长的根本所在,我们组的队员从第一个合作项目起就十分的团结,大家各有分工,共同讨论,为我们日后的工作能力打下了基础。这次大赛给予了我们很多,通过这次比赛大家一起交流学习,互帮互助,增强了合作意识。老师们的帮助让我们感觉老师不再仅仅是一个指导者,更像一个家长带领我们成长,让我们跟老师之间的关系更加的紧密。最后,我们衷心感谢我们的指导老师,也祝愿此次大赛圆满成功!9附录1:电路原理图10附录2:源程序#includemsp430x14x.h#includePID.h#defineP_DATA0.5#defineI_DATA0#defineD_DATA0typedefstructPID{intSetPoint;//设定目标DesiredValuelongSumError;//误差累计doubleProportion;//比例常数ProportionalConstdoubleIntegral;//积分常数IntegralConstdoubleDerivative;//微分常数DerivativeConstintLastError;//Error[-1]intPrevError;//Error[-2]}PID;staticPIDsPID;staticPID*sptr=&sPID;voidIncPIDInit(inttarget){sptr-SumError=0;//误差的累加sptr-LastError=0;//Error[-1]sptr-PrevError=0;//Error[-2]sptr-Proportion=P_DATA;//比例常数ProportionalConstsptr-Integral=I_DATA;//积分常数IntegralConst11sptr-Derivative=D_DATA;//微分常数DerivativeConstsptr-SetPoint=target;//目标}//增量式PID控制设计voidPID_dat(unsignedinttarget){sptr-SetPoint=target;//目标}intIncPIDCalc(intNextPoint){registerintiError,iIncpid;//当前误差iError=sptr-SetPoint-NextPoint;//增量计算iIncpid=sptr-Proportion*iError//E[k]项-sptr-Integral*sptr-LastError//E[k-1]项+sptr-Derivative*sptr-PrevError;//E[k-2]项//存储误差,用于下次计算sptr-PrevError=sptr-LastE