您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 基于msp430超低功耗单片机温度控制器设计
开放实验报告课题名称基于msp430单片机的超低功耗智能护眼灯的设计学生姓名系、年级专业信息工程系、11、12级电子信息指导教师于建坤2014年6月20日1基于msp430单片机的超低功耗智能护眼灯的设计一.实验目的1、了解pwm控制灯光亮度的原理,设计基于单片机的智能护眼灯控制装置。2、学习电子电路、PCB板设计,产品制作与调试。二.实验内容本智能护眼灯以MSP43G2553为核心,完成护眼灯的照明,电源管理,环境采集和中央处理及控制功能。灯珠采用高亮白光LED,恒流驱动,无频闪,不伤害眼睛,保护视力。电源管理,由专用电源管理方案,管理系统充电和用电。环境采集,用光传感器采集光照强度,根据光照强度控制灯珠亮度,用人体热释红外检测人远近。三.系统方案设计系统整体方框图如下:图2.1系统方框图(1)环境采集用光敏电阻采集环境亮度,人距感应部分采用热释红外。当人靠近台灯,产生信号给MCU控制器,打开台灯。光敏电阻采集当前亮度值,根据使用者选择的模式作出调整。(2)MCU控制亮度和环境采集采用闭环控制,具体算法用PID算法的增量式模式。具体函数如下:typedefstructPID{高亮LED驱动显示部分电源供电环境采集和人距感应部分MSPG2553控制2doubleSetPoint;//设定目标doubleProportion;//比例常数doubleIntegral;//积分常数doubleDerivative;//微分常数doubleLastError;//Error[-1]doublePrevError;//Error[-2]doubleSumError;//SumsofErrors}PID;doublePIDCalc(PID*pid,doubleNextPiont){doubledError,Error,rOUT;Error=pid-SetPoint-NextPiont;//偏差pid-SumError+=Error;//积分dError=pid-LastError-pid-PrevError;//当前微分pid-PrevError=pid-LastError;//Error[-2]=Error[-1]pid-LastError=Error;//Error[-1]=ErrorrOUT=pid-Proportion*Error+pid-Integral*pid-SumError+pid-Derivative*dError;//比例项//积分项//微分项return(rOUT);}(3)显示部分因为管脚不足,若用液晶或点阵屏或OLED,则需要串转并器件,在速度上对整体控制不利。故用74LS138器件,简单的将3个I/O口转为8个I/O口,用8个LED显示,在整体控制上,简单明了。四.硬件设计七、高亮LED驱动模块:传统的大功率LED电源,大部分是用220VAC~DC后面再用LM358或者三极管来做恒流,此电路恒流精度低,并且过温,短路等保护功能没有,输出的可变性不强.故在此设计中高亮LED采用,大电流,高压DC/DC升压恒流XL6004恒流驱动,其具有宽电压输入,大电流输出,且其效率可以达到92%,原理图如下:3图3.1高亮LED驱动模块八、无影的实现:无影灯原理参照手术无影灯通过多个光源实现无影效果的,手术无影灯用来照明手术部位,以最佳地观察处于切口和体腔中不同深度的小的、对比度低的物体。并能将色彩失真降到最低程度。此外,无影灯还要求在工作过程中不散发出过量的热。手术无影灯如下:图3.2手术无影灯布局本设计也采用多个光源实现无影效果,其特点是照度高,因为采用恒流驱动,使高亮灯能长时间工作,由于在设计中能充分散热,故不会发出过量的热量影响使用者的使用。九、光照采集:4采用可见光光敏电阻作为光照采集器件,其工作原理方框图如下图所以:图3.3光照采集原理方框图(4)人体感应:人体感应采用热式红外采集,其工作方框图如下:图3.4人体感应原理方框图(5)电源:电源由变压器、整流桥、和滤波电路组成,再由开关电源器件LM2596构成,设计较简单,不再叙述。四、程序设计程序流程图如图5.1所示。系统流程图如下:光照增加电阻减小电压减小PWM降低低加光照减小低加待机有人体靠近开始工作人远离5系统创新1、灯珠亮度自动可控,使台灯发出亮度与环境亮度之和保持一固定值,无需人为频繁操作。2、多模式选择,不同情景用不同模式。3、灯盘设计模拟手术室用的无影灯,避免写字时手得遮挡引起照明度不足,保护视力。4、环境探测,解决用户强光久照伤眼,弱光久视伤眼,用眼过度。突然离开忘记关灯费电情况等各种情况。5、优秀的电池管理方案,更高效率,增长电池和灯珠寿命。6、自动调节亮度,更加有效利用电源,更加节能。图5.1五、产品性能测试6实物作品(1)放大部分数据(放大68倍)电桥输出电压(mv)5101520253035404550放大输出(mv)34568810231361171020382380272730653409理论值(mv)34068010201360170020402380272030603400(2)总个系统的测试数据7十、总结从放大部分所测得数据可以看出,放大部分基本和理论值相对应,有些误差可能的来源有:仪用放大器本身的误差、人工测量误差、万用表的误差等。从总个系统的测试数据看,特别是看附表的曲线图,实际和理论有比较大的误差,这个是无法避免的,通过人为的修改后,取得了很好的效果。总而言之,本系统实现了题目的基本要求的全部、发挥部分的大部!附录#includemsp430g2553.h#defineuintunsignedint#defineucharunsignedchar#defineulongunsignedlong#defineCSBIT0#defineSIDBIT1#defineSCLKBIT2#defineLCDPORTP2OUT#defineSID_1LCDPORT|=SID#defineSID_0LCDPORT&=~SID#defineSCLK_1LCDPORT|=SCLK#defineSCLK_0LCDPORT&=~SCLK#defineCS_1LCDPORT|=CS#defineCS_0LCDPORT&=~CS#defineCLKBIT3#defineSH_LDBIT4#defineQHBIT5//#defineKEYPORTP2OUTAD采样(mv)626924112213191509170719112101229526932884307732753458公式温度34.441.145.449.854.158.563.167.471.780.784.989.393.897.9修正公式温度27.735.440.245.149.654.559.864.269.079.487.589.494.398.3实测温度27.835.440.145.149.754.559.864.469.179.587.589.494.498.58#defineCLK_1LCDPORT|=CLK#defineCLK_0LCDPORT&=~CLK#defineSH_LD_1LCDPORT|=SH_LD#defineSH_LD_0LCDPORT&=~SH_LD#defineCPU_F((double)1000000)#definedelay_us(x)__delay_cycles((long)(CPU_F*(double)x/1000000.0))#definedelay_ms(x)__delay_cycles((long)(CPU_F*(double)x/1000.0))unsignedchara[]={欢迎使用};unsignedcharb[]={当前按键:};unsignedcharc[]={实时温度:};unsignedchard[]={0123456789℃.V};unsignedchare[]={当前电压:};uintkey,value,key_shu;floattemperature;floatIntDegC;longtemp_IntDegc;longIntDegC_1;longtemp_set=30;voiddelay(unsignedcharms);voidwrite_cmd(ucharcmd);voidwrite_dat(uchardat);voidlcd_pos(ucharx,uchary);voidLCD_init(void);voidADC10_init(void);voidLCD_show(void);voidtemp_collect(void);voidpwm_control(ucharpwm_type);voidtemp_control();uintkeyscan();uintkeyvalue(uintkey_value);intmain(void){//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;ADC10_init();P2SEL=0x00;P2DIR=BIT0+BIT1+BIT2;P2DIR|=CLK+SH_LD;//P2.3,P2.4为输出9P2DIR&=~QH;//P2.5为输入LCD_init();delay(40);LCD_show();while(1){key=keyscan();key_shu=keyvalue(key);lcd_pos(2,5);write_dat(key_shu+48);if(key_shu==8){P1DIR=0x01;P1OUT^=BIT0;delay_ms(50);}ADC10CTL0|=ENC+ADC10SC;//ADC10Enable__bis_SR_register(CPUOFF+GIE);//LPM0withinterruptsenabled//temp_collect();temp_control();}}voiddelay(unsignedcharms){unsignedchari,j;for(i=ms;i0;i--)for(j=120;j0;j--);}voidwrite_cmd(ucharcmd){uchari,high4bits,low4bits;ulonglcdcmd;high4bits=cmd&0xf0;low4bits=cmd&0x0f;lcdcmd=((ulong)0xf816)+((ulong)high4bits8)+((ulong)low4bits4);CS_1;SCLK_0;10for(i=0;i24;i++){SID_0;if(lcdcmd&0x00800000)SID_1;lcdcmd=1;delay(3);SCLK_1;delay(3);SCLK_0;}CS_0;}voidwrite_dat(uchardat){uchari,high4bits,low4bits;ulonglcddat;high4bits=dat&0xf0;low4bits=dat&0x0f;lcddat=((ulong)0xfa16)+((ulong)high4bits8)+((ulong)low4bits4);CS_1;SCLK_0;for(i=0;i24;i++){SID_0;if(lcddat&0x00800000)SID_1;lcddat=1;delay(3);SCLK_1;delay(3);SCLK_0;}CS_0;}voidlcd_pos(ucharx,uchary){ucharpos;switch(x){11case1:pos=0x80;break;case2:pos=0x90;break;case3:pos=0x88;break;case4:pos=0x98;break;default:pos=0x80;}pos+=y;write_cmd(pos);}voidLCD_init(void){write_cmd(0x30)
本文标题:基于msp430超低功耗单片机温度控制器设计
链接地址:https://www.777doc.com/doc-2570978 .html