基于MSP430G2211实现的家用窗帘自动开关控制器(朱晓香) - 图文

更新时间:2024-06-24 13:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MSP430G2系列Launchpad开发板应用实例作品

基于MSP430G2211实现的家用窗帘自动开关控制器

朱晓香

美国德州仪器半导体技术上海(有限)公司 西安电子科技大学MSP430单片机联合实验室

2011年12月

1

目 录

第一章 作品概述 .................................................................................... 1

第一节 作品功能和单片机介绍 ........................................................................................... 1

第二节 设计方案 ................................................................................................................... 1

第二章 硬件系统设计 ............................................................................ 3

第一节 MSP430G2系列Launchpad开发板介绍 ............................................................... 3 第二节 传感器介绍 ............................................................................................................... 4 第三节 各单元电路的介绍 ................................................................................................... 5 第四节 系统原理图及元器件清单 ....................................................................................... 7 第五节 PCB板设计注意事项 .............................................................................................. 9 第六节 硬件安装调试注意事项及方法 ............................................................................. 10

第三章 软件系统设计 .......................................................................... 12

第一节 程序总体状态转移图 ............................................................................................. 12

第二节 子程序API介绍 ...................................................................................................... 12 第三节 软件程序的调试方法 ............................................................................................. 15

第四章 总结与思考 .............................................................................. 16

2

第一章 作品概述

第一节 作品功能和单片机介绍

该作品的主要功能是:当外界光照度高于某一参考值时窗帘自动打开,低于该参考值是窗帘自动关闭。用线程的方法来控制电机的停转,即在窗帘的顶部和底部分别安装一个微动开关S1和S2,当窗帘正转到顶部时,碰触微动开关S1,在按键被按下时,在单片机P1.6口产生一个下降沿中断,在中断内单片机向P1.2和P1.3口输出低电平,则电机停止转动;当窗帘反转到底部时,碰触微动开关S2,在按键被按下时,在单片机P1.4口产生一个下降沿中断,在中断内单片机向P1.2和P1.3口输出低电平电机停止转动。所选用的芯片型号是TI公司的MSP430G2211。

本作品选用MSP430G2211单片机,该单片机超低功耗,具有5种节电模式,1us内便可从待机模式唤醒,并具有一个强大的16位RISC CPU、16位寄存器和常数发生器,有助于最大限度的发挥代码效率。此单片机还具有丰富的时钟源,包括LF、OSC和VLO。它可通过串行口系统编程,无需外部编程电压,具有可编程的保密熔丝代码保护,它具有Spy-Bi-Wire仿真逻辑接口。另外它还有10位IO口、8个比较器通道和16位的Timer_A定时器,带2路捕获和比较寄存器。此单片机的IO口和Timer_A定时器都具有强大的中断能力。

第二节 设计方案

光 敏 传 感 器 G2211单 片 机 电 机 控 制 电 路

图1.1 系统组成结构框图

1

用光敏传感器(具体为硅光电池)将外界的光照度转换成电压信号,并将该电压信号经过一级跟随器电路输入到G2211模拟比较器的正输入端,在硬件上的具体连接就是将27L2的7脚连接至单片机的P1.1口。并通过与负输入端的内部参考电压作比较,使得比较模块寄存器的CAOUT端置“1”或清零来控制单片机的P1.2和P1.3口输出高低电平,进而控制电机的正反转,实现窗帘的打开与关闭,在硬件上的具体连接就是将单片机的P1.2和P1.3口分别连接至电机驱动芯片L298n的12脚和10脚。利用按键S1和S2触发I/O口中断来控制电机转到窗帘的顶部或是窗帘的底部停止转动。直流电机连接至电机驱动芯片L298n的13脚和14脚。

2

第二章 硬件系统设计

第一节 MSP430G2系列Launchpad开发板介绍

基于LaunchPad的MSP-EXP430G2低成本实验板是一款适用于TI最新MSP430G2xx系列产品的完整开发解决方案。其基于USB的集成型仿真器可提供为全系列MSP430G2xx器件开发应用所必需的所有软、硬件。LaunchPad具有集成的DIP目标插座,可支持多达20个引脚,从而使MSP430ValueLine器件能够简便地插入LaunchPad电路板中。此外,还可提供板上Flash仿真工具,以直接连接至PC轻松进行编程、调试和评估。LaunchPad实验板还能够对eZ430-RF2500T目标板、eZ430-Chronos手表模块或eZ430-F2012T/F2013T目标板进行编程。此外,它还提供了从MSP430G2xx器件到主机PC或相连目标板的9600波特UART串行连接。其实物图如图2.1所示。

图2.1 MSP430G2系列Launchpad开发板实物图

MSP-EXP430G2

采用

IAR EmbeddedWorkbench

集成开发环境(IDE)或

CodeComposerStudio(CCS)编写、下载和调试应用。调试器是非侵入式的,这使用户能够借助可用的硬件断点和单步操作全速运行应用,而不耗用任何其他硬件资源。

3

MSP-EXP430G2LaunchPad特性:

? USB调试与编程接口无需驱动即可安装使用,且具备高达9600波特的UART串行通信速度 ? 支持所有采用PDIP14或PDIP20封装的MSP430G2xx和MSP430F20xx器件 ? 分别连接至绿光和红光LED的两个通用数字I/O 引脚可提供视觉反馈 ? 两个按钮可实现用户反馈和芯片复位

? 器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板 ? 高质量的20引脚DIP插座,可轻松简便地插入目标器件或将其移除

图2.1 MSP430G2211硬件资源框图

第二节 传感器介绍

这里介绍一下型号2DU5的硅光电池,之所以选择它,原因有两个:(1)在可见光范围内,该器件能使光照度与其输出电流有一个良好的线性关系,这样我们就可通过一个运放将其转换成电压信号;(2)具有较好的灵敏度,当你用手去遮住光源或者光照度稍微有点变化时,运放的输出电压也随之改变。

图2.2 硅光电池2DU5实物图

4

其实,只要是硅光电池就行,不同型号只是输出电流(一般为微安或毫安)的大小不同,当然必须保证所选型号能感应你要控制的窗帘所处环境的光(比如,可见光)。由于该方案采用的是硬件校准,即通过调节运放反馈的电阻值的大小来调节输入单片机模拟器正端的电压值,所以当你所选的硅光电池输出电流比较小时,可将反馈电阻调大来提高输出电压值,反之亦然。图2.3为硅光电池2DU5参数信息。

图2.3 为硅光电池2DU5参数信息图

第三节 各单元电路的介绍

第一部分:光电转换电路

图2.4 光电转换电路

5

这里需要注意的是,在实际的电路实现中RP2,R6和RP1,R5只需任选一路即可,之所以这样连是为了在画板子时多一路备用,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口(其实也可以直接用单片的电源给按键供电)。 第三部分:电机驱动电路

图2.6 电机驱动电路

6

Venb(即11脚)=0 Venb(即11脚)=1 输入 Vss为5V)有效,具体的功能实现见下表:

10脚=12脚 (2)“0”表示-0.3V到1.5V之间;

(3)X表示为“0”,“1”任何一状态。

10脚=X;12脚=X 10脚=“0”;12脚=“1” 10脚=“1”;12脚=“0” 说明:(1)“1”表示电压范围在2.3V到Vss的值之间;

第四节 系统原理图及元器件清单

I/O口,13和14脚接电机的两端,4脚接电源,该芯片的最大输入电压为46V,该方案采用

采用的是L298n芯片对电机进行驱动,其集成了两个H桥电路,10和12脚接单片机的

的是12V,8脚接地,11脚为第二个H桥工作的使能端,高电平(2.3V到Vss,本方案选取

图2.7 系统原理图

表2-1 电机状态表

7

反转 正转 功能 电机停转 电机停转

光电转换电路主要由27L2芯片组成,将光信号转换为电压信号经过跟随器接到单片机的P1.1口,电机控制电路主要由L298n芯片组成,将其连接到P1.2和P1.3口。按键S1和S2接到单片机的P1.6和P1.4口。3.3V和5V电源电路主要是给所用芯片供电使能以及逻辑电平的选择。表2-2列出了该作品所用到的元器件和芯片的型号。

表2-2 元器件清单

型号 TLC27L2 L298n LM2940 GM1117 电位器(500k) R(680K) R(100K) R(1K) 二极管(4007) C(100nF) 电解电容(10uF) 电解电容(22uF) 电解电容(47uF) 微动开关 2DU5 电机 数量/个 1 1 1 1 1 1 3 2 4 2 2 1 1 3 1 1 封装 DIP(双列直插) Multiwatt15 TO-220 SOT-123 1206 1206 1206 1206 1206 8

第五节 PCB板设计注意事项 7654321212123212121231111227368272281231464511141551213114312123182712212431212120433B33A12211431B11A21651091232B22A21211122891011121314 图2.8 PCB顶层设计 7654321213211231812282773631464514155121311431091238712654311432123B3433A21B11A212B22A121122891011121314 图2.9 PCB底层设计 9 (1)由于有12V的电源,所以最好所有的电源线和地线都加粗,该作品电源线和地线均采用

30mil线宽。

(2)建议先焊实验板调试,再画板子,因为你原理图上的器件很可能在电子市场找不到(比如我GM1117的型号画成了SOT123,但电子市场几乎都是SOT223),在焊实验板时就可以顺便了解你要用的器件的常用封装,如果找不到该型号的器件可以找市面上有哪些可以实现同样功能的其他型号的器件,及时对方案进行调整。

(3)特别注意适配器DC座封装,作为一个脚使用的两个焊盘间距变为0mil,否则由于DC座脚太宽,插不进去。

第六节 硬件安装调试注意事项及方法

图2.9 作品实物图

10

图2.10 直流电机实物图

(1)R6,RP2和R5,RP1只需焊一组即可,本方案焊的是R6,RP2。

(2)焊接时一定要注意硅光电池2DU5的正负,接反的话27L2的6脚是没有电压值的。 (3)在将单片机和硬件电路连接在一起之前,一定要进行硬件校准,即通过调电位器的

大小来改变27L2的6脚的值,将电路置于你作为参考光照度的环境下,调节RP2让6脚的值为0.9V(这跟你的程序有关,因为我是将27L2的6脚的值作为单片机模拟比较器的正输入端,负输入端为单片机内部参考0.25Vcc),一定要注意单片机模拟比较器的输入端最大输入电压为2.6V。

(4)在将单片机和自己画的硬件电路连接之前,先给硬件加上电源,测一下和单片机I/O

口相连的端子的电压,看其是否正常,因为硬件的错误连接(比如短路)可能导致跟单片机连接的端子的电压异常,超过单片机的最大电压范围(3.6V),可能烧坏单片机。

11

第三章 软件系统设计

第一节 程序总体状态转移图

电机正转 KEY1按下/电机停转 处于打开状态 光照高电机正转光照低电机反转/处于关闭状态 KEY2按下/电机停转 / 电机反转

图3.1 状态转移图

基本思想:程序主要采用的是“状态机”的方法,分为四个状态:电机正转,电机反转,窗帘处于打开状态,窗帘处于关闭状态(程序的默认状态)。只有当光照度高于参考值同时窗帘处于关闭状态,电机才正转(正转打开窗帘),如果光照度高于参考值但窗帘已经处于打开状态,则电机不转;只有当光照度低于参考值同时窗帘处于打开状态,电机反转(反转关闭窗帘),如果光照度低于参考值但窗帘已经处于关闭状态,则电机不转。

第二节 子程序API介绍

初始化程序:

WDTCTL = WDTPW + WDTHOLD; // 关闭开门狗

P1DIR |= BIT0+BIT2 + 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下降沿中断

12

P1IE |= BIT6+BIT4; //中断使能并打开总中断 _EINT();

P1OUT=0X00; //P1口输出清零

比较器模块:

if ((CAOUT & CACTL2)) //如果CAOUT置“1”且窗帘处于关闭状态,P1.0,

P1.2输出高电平,P1.3输出低电平

{

switch(status) {

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; } } 按键检测: Void Key_Detect()

{

13

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 Innormal :break; } }

void Key2_OnClick()

{

switch(status) {

case Close_Stop: break; case Open_Stop : break; case Normal: break;

14

case Innormal : P1OUT&=~(BIT2+BIT3);status=Close_Stop; break; } }

第三节 软件程序的调试方法

建议分功能模块调试,要特别注意switch语句的书写规范。

(1)调试比较器模块是否正常,如果觉得程序没问题但还是出不来效果,可能是单片机的比较器端口坏了,这事应该重新下载一个简单的程序检测一下,以下是TI公司提供的一个程序范例:

#include void main (void) {

WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR |= 0x01; // P1.0 output

CACTL1 = CARSEL + CAREF0 + CAON; // 0.25 Vcc = -comp, on CACTL2 = P2CA4; // P1.1/CA1 = +comp while (1) // Test comparator_A output {

if ((CAOUT & CACTL2))

P1OUT |= 0x01; // if CAOUT set, set P1.0 else P1OUT &= ~0x01; // else reset } }

(2)调试按键中断是否正常,建议两个按键分开调试,调试一个时另一个屏蔽,如果按键按下没出现效果,可能是按键中断没进去,也可能是按键处理函数的问题,应在中断和处理函数处设置断点查出问题。

15

第四章 总结与思考

(1)假如窗帘在处于打开状态时断电了,等加电后且光照度低于参考值时,窗帘无法自动关闭,因为该方案在初试化时,默认窗帘是关闭的,可以采用给单片机强制加上高于参考值的光照度,这时就工作正常了,大家可以自己从软件商来解决该问题(比如FLASH)。 (2)该方案将模拟比较器输出CAOUT位为“置1”或是“清零”的判断放在了主循环中,实际上由于光照度不会突变没有必要一直去判断CAOUT位的值,这样会造成能耗较大,可以编写能耗更低的程序来实现此功能。

(3)该方案一上电就开始工作,大家可以增加手动和自动功能的控制,只有在某一按键被按下时,系统才处于自动工作状态。

(4)由于窗帘所处的状态可能不止该方案所列出的四种状态,即电机正转,电机反转,窗帘处于打开,窗帘处于关闭,大家可以根据自己的要求增加状态,进一步扩展功能。

16

本文来源:https://www.bwwdw.com/article/n953.html

Top