1、基于MSP430G2211实现的家用窗帘自动开关控制器目 录第一章 作品概述3第一节 作品功能和单片机介绍3第二节 设计方案4第二章 硬件系统设计4第一节 MSP430G2系列Launchpad开发板介绍4第二节 传感器介绍6第三节 各单元电路的介绍7第四节 系统原理图及元器件清单9第五节 PCB板设计注意事项10第六节 硬件安装调试注意事项及方法10第三章 软件系统设计11第一节 程序总体状态转移图11第二节 子程序API介绍11第三节 软件程序的调试方法14第四章 总结与思考15word文档 可自由复制编辑第一章 作品概述第一节 作品功能和单片机介绍该作品的主要功能是:当外界光照度高于某一
2、参考值时窗帘自动打开,低于该参考值是窗帘自动关闭。用线程的方法来控制电机的停转,即在窗帘的顶部和底部分别安装一个微动开关S1和S2,当窗帘正转到顶部时,碰触微动开关S1,在按键被按下时,在单片机P1.6口产生一个下降沿中断,在中断内单片机向P1.2和P1.3口输出低电平,则电机停止转动;当窗帘反转到底部时,碰触微动开关S2,在按键被按下时,在单片机P1.4口产生一个下降沿中断,在中断内单片机向P1.2和P1.3口输出低电平电机停止转动。所选用的芯片型号是TI公司的MSP430G2211。本作品选用MSP430G2211单片机,该单片机超低功耗,具有5种节电模式,1us内便可从待机模式唤醒,并具
3、有一个强大的16位RISC CPU、16位寄存器和常数发生器,有助于最大限度的发挥代码效率。此单片机还具有丰富的时钟源,包括LF、OSC和VLO。它可通过串行口系统编程,无需外部编程电压,具有可编程的保密熔丝代码保护,它具有Spy-Bi-Wire仿真逻辑接口。另外它还有10位IO口、8个比较器通道和16位的Timer_A定时器,带2路捕获和比较寄存器。此单片机的IO口和Timer_A定时器都具有强大的中断能力。第二节 设计方案光敏传感器G2211单片机电机控制电路图1.1 系统组成结构框图用光敏传感器(具体为硅光电池)将外界的光照度转换成电压信号,并将该电压信号经过一级跟随器电路输入到G221
4、1模拟比较器的正输入端,在硬件上的具体连接就是将27L2的7脚连接至单片机的P1.1口。并通过与负输入端的内部参考电压作比较,使得比较模块寄存器的CAOUT端置“1”或清零来控制单片机的P1.2和P1.3口输出高低电平,进而控制电机的正反转,实现窗帘的打开与关闭,在硬件上的具体连接就是将单片机的P1.2和P1.3口分别连接至电机驱动芯片L298n的12脚和10脚。利用按键S1和S2触发I/O口中断来控制电机转到窗帘的顶部或是窗帘的底部停止转动。直流电机连接至电机驱动芯片L298n的13脚和14脚。第二章 硬件系统设计第一节 MSP430G2系列Launchpad开发板介绍基于LaunchPad
5、的MSP-EXP430G2低成本实验板是一款适用于TI最新MSP430G2xx系列产品的完整开发解决方案。其基于USB的集成型仿真器可提供为全系列MSP430G2xx器件开发应用所必需的所有软、硬件。LaunchPad具有集成的DIP目标插座,可支持多达20个引脚,从而使MSP430ValueLine器件能够简便地插入LaunchPad电路板中。此外,还可提供板上Flash仿真工具,以直接连接至PC轻松进行编程、调试和评估。LaunchPad实验板还能够对eZ430-RF2500T目标板、eZ430-Chronos手表模块或eZ430-F2012T/F2013T目标板进行编程。此外,它还提供了
6、从MSP430G2xx器件到主机PC或相连目标板的9600波特UART串行连接。其实物图如图2.1所示。图2.1 MSP430G2系列Launchpad开发板实物图MSP-EXP430G2采用IAR EmbeddedWorkbench集成开发环境(IDE)或CodeComposerStudio(CCS)编写、下载和调试应用。调试器是非侵入式的,这使用户能够借助可用的硬件断点和单步操作全速运行应用,而不耗用任何其他硬件资源。MSP-EXP430G2LaunchPad特性: USB调试与编程接口无需驱动即可安装使用,且具备高达9600波特的UART串行通信速度 支持所有采用PDIP14或PDIP2
7、0封装的MSP430G2xx和MSP430F20xx器件 分别连接至绿光和红光LED的两个通用数字I/O 引脚可提供视觉反馈 两个按钮可实现用户反馈和芯片复位 器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板 高质量的20引脚DIP插座,可轻松简便地插入目标器件或将其移除图2.1 MSP430G2211硬件资源框图第二节 传感器介绍这里介绍一下型号2DU5的硅光电池,之所以选择它,原因有两个:(1)在可见光范围内,该器件能使光照度与其输出电流有一个良好的线性关系,这样我们就可通过一个运放将其转换成电压信号;(2)具有较好的灵敏度,当你用手去遮住光源或者光照度稍微有点变化时
8、,运放的输出电压也随之改变。图2.2 硅光电池2DU5实物图其实,只要是硅光电池就行,不同型号只是输出电流(一般为微安或毫安)的大小不同,当然必须保证所选型号能感应你要控制的窗帘所处环境的光(比如,可见光)。由于该方案采用的是硬件校准,即通过调节运放反馈的电阻值的大小来调节输入单片机模拟器正端的电压值,所以当你所选的硅光电池输出电流比较小时,可将反馈电阻调大来提高输出电压值,反之亦然。图2.3为硅光电池2DU5参数信息。图2.3 为硅光电池2DU5参数信息图第三节 各单元电路的介绍第一部分:光电转换电路图2.4 光电转换电路这里需要注意的是,在实际的电路实现中RP2,R6和RP1,R5只需任选
9、一路即可,之所以这样连是为了在画板子时多一路备用,6和7脚连接构成一个电压跟随器,作用是将光电转换电路与单片机隔离开来。最终的输出电压为硅光电池电流与所选一路电阻之积。第二部分:电源电路5V转3.3V图2.5 电源电路由于电机和运放(27L2)的供电电压均选择为12V,所以将交流电通过适配器直接转换成了12V,而电机驱动芯片(L298n)的逻辑供电电压Vss(9脚)最大值为7V,典型值为5V,而且使能高电平Ven(11脚)的取值大于2.3V小于Vss,故选择5V给9脚和11脚供电,本方案用LM2940将12V转化为5V,用GM1117将5V转换为3.3V,给按键提供高电平接到单片机I/O口(其
10、实也可以直接用单片的电源给按键供电)。第三部分:电机驱动电路图2.6 电机驱动电路采用的是L298n芯片对电机进行驱动,其集成了两个H桥电路,10和12脚接单片机的I/O口,13和14脚接电机的两端,4脚接电源,该芯片的最大输入电压为46V,该方案采用的是12V,8脚接地,11脚为第二个H桥工作的使能端,高电平(2.3V到Vss,本方案选取Vss为5V)有效,具体的功能实现见下表:表2-1 电机状态表输入功能Venb(即11脚)=110脚=“1”;12脚=“0”正转10脚=“0”;12脚=“1”反转10脚=12脚电机停转Venb(即11脚)=010脚=X;12脚=X电机停转说明:(1)“1”表
11、示电压范围在2.3V到Vss的值之间;(2)“0”表示-0.3V到1.5V之间;(3)X表示为“0”,“1”任何一状态。第四节 系统原理图及元器件清单图2.7 系统原理图光电转换电路主要由27L2芯片组成,将光信号转换为电压信号经过跟随器接到单片机的P1.1口,电机控制电路主要由L298n芯片组成,将其连接到P1.2和P1.3口。按键S1和S2接到单片机的P1.6和P1.4口。3.3V和5V电源电路主要是给所用芯片供电使能以及逻辑电平的选择。表2-2列出了该作品所用到的元器件和芯片的型号。表2-2 元器件清单型号数量/个封装TLC27L21DIP(双列直插)L298n1Multiwatt15L
12、M29401TO-220GM11171SOT-123电位器(500k)1R(680K)11206R(100K)31206R(1K)21206二极管(4007)41206C(100nF)21206电解电容(10uF)2电解电容(22uF)1电解电容(47uF)1微动开关32DU51电机1第五节 PCB板设计注意事项图2.8 PCB顶层设计图2.9 PCB底层设计(1)由于有12V的电源,所以最好所有的电源线和地线都加粗,该作品电源线和地线均采用30mil线宽。(2)建议先焊实验板调试,再画板子,因为你原理图上的器件很可能在电子市场找不到(比如我GM1117的型号画成了SOT123,但电子市场几乎
13、都是SOT223),在焊实验板时就可以顺便了解你要用的器件的常用封装,如果找不到该型号的器件可以找市面上有哪些可以实现同样功能的其他型号的器件,及时对方案进行调整。(3)特别注意适配器DC座封装,作为一个脚使用的两个焊盘间距变为0mil,否则由于DC座脚太宽,插不进去。第六节 硬件安装调试注意事项及方法图2.9 作品实物图图2.10 直流电机实物图(1)R6,RP2和R5,RP1只需焊一组即可,本方案焊的是R6,RP2。(2)焊接时一定要注意硅光电池2DU5的正负,接反的话27L2的6脚是没有电压值的。(3)在将单片机和硬件电路连接在一起之前,一定要进行硬件校准,即通过调电位器的大小来改变27
14、L2的6脚的值,将电路置于你作为参考光照度的环境下,调节RP2让6脚的值为0.9V(这跟你的程序有关,因为我是将27L2的6脚的值作为单片机模拟比较器的正输入端,负输入端为单片机内部参考0.25Vcc),一定要注意单片机模拟比较器的输入端最大输入电压为2.6V。(4)在将单片机和自己画的硬件电路连接之前,先给硬件加上电源,测一下和单片机I/O口相连的端子的电压,看其是否正常,因为硬件的错误连接(比如短路)可能导致跟单片机连接的端子的电压异常,超过单片机的最大电压范围(3.6V),可能烧坏单片机。第三章 软件系统设计第一节 程序总体状态转移图电机正转处于关闭状态电机反转处于打开状态KEY1按下/
15、电机停转光照低/电机反转KEY2按下/电机停转光照高/电机正转图3.1 状态转移图基本思想:程序主要采用的是“状态机”的方法,分为四个状态:电机正转,电机反转,窗帘处于打开状态,窗帘处于关闭状态(程序的默认状态)。只有当光照度高于参考值同时窗帘处于关闭状态,电机才正转(正转打开窗帘),如果光照度高于参考值但窗帘已经处于打开状态,则电机不转;只有当光照度低于参考值同时窗帘处于打开状态,电机反转(反转关闭窗帘),如果光照度低于参考值但窗帘已经处于关闭状态,则电机不转。第二节 子程序API介绍初始化程序:WDTCTL = WDTPW + WDTHOLD; / 关闭开门狗P1DIR |= BIT0+B
16、IT2 + BIT3; /P1.0,P1.2及P1.3设为输出CACTL1 = CARSEL + CAREF0 + CAON; / 内部参考0.25 Vcc 为比较器负输入端,打开比较器CACTL2 = P2CA4; / P1.1为比较器正输入端P1IES |= BIT6+BIT4; /P1.4,P1.6下降沿中断P1IE |= BIT6+BIT4; /中断使能并打开总中断_EINT(); P1OUT=0X00; /P1口输出清零比较器模块:if (CAOUT & CACTL2) /如果CAOUT置“1”且窗帘处于关闭状态,P1.0,P1.2输出高电平,P1.3输出低电平 switch(sta
17、tus)case Close_Stop : P1OUT=0x05;status= Normal;break;case Open_Stop : break;case Normal : break;case Innormal : break; else /如果CAOUT清零且窗帘处于打开状态,P1.3输出高电平P1.0,P1.2输出低电平switch(status)case Close_Stop : break;case Open_Stop :P1OUT=0x08;status=Innormal ;break;case Normal : break;case Innormal : break;按键
18、检测:Void Key_Detect()unsigned char PushKey;PushKey=P1IFG&(BIT4+BIT6);_delay_cycles(5000);if(PushKey&BIT6)Key1_OnClick();if(PushKey&BIT4)Key2_OnClick();按键处理:void Key1_OnClick()switch(status)case Close_Stop : break;case Open_Stop : break;case Normal :P1OUT&=(BIT2+BIT3);status=Open_Stop; break;case Inno
19、rmal :break;void Key2_OnClick()switch(status)case Close_Stop: break;case Open_Stop : break;case Normal: break;case Innormal : P1OUT&=(BIT2+BIT3);status=Close_Stop; break;第三节 软件程序的调试方法建议分功能模块调试,要特别注意switch语句的书写规范。(1)调试比较器模块是否正常,如果觉得程序没问题但还是出不来效果,可能是单片机的比较器端口坏了,这事应该重新下载一个简单的程序检测一下,以下是TI公司提供的一个程序范例:#in
20、clude void main (void)WDTCTL = WDTPW + WDTHOLD; / Stop WDTP1DIR |= 0x01; / P1.0 outputCACTL1 = CARSEL + CAREF0 + CAON; / 0.25 Vcc = -comp, onCACTL2 = P2CA4; / P1.1/CA1 = +compwhile (1) / Test comparator_A outputif (CAOUT & CACTL2)P1OUT |= 0x01; / if CAOUT set, set P1.0else P1OUT &= 0x01; / else rese
21、t(2)调试按键中断是否正常,建议两个按键分开调试,调试一个时另一个屏蔽,如果按键按下没出现效果,可能是按键中断没进去,也可能是按键处理函数的问题,应在中断和处理函数处设置断点查出问题。第四章 总结与思考(1)假如窗帘在处于打开状态时断电了,等加电后且光照度低于参考值时,窗帘无法自动关闭,因为该方案在初试化时,默认窗帘是关闭的,可以采用给单片机强制加上高于参考值的光照度,这时就工作正常了,大家可以自己从软件商来解决该问题(比如FLASH)。(2)该方案将模拟比较器输出CAOUT位为“置1”或是“清零”的判断放在了主循环中,实际上由于光照度不会突变没有必要一直去判断CAOUT位的值,这样会造成能耗较大,可以编写能耗更低的程序来实现此功能。(3)该方案一上电就开始工作,大家可以增加手动和自动功能的控制,只有在某一按键被按下时,系统才处于自动工作状态。(4)由于窗帘所处的状态可能不止该方案所列出的四种状态,即电机正转,电机反转,窗帘处于打开,窗帘处于关闭,大家可以根据自己的要求增加状态,进一步扩展功能。