第一节基本情况
本作品使用MSP430G2211单片机实现了通过按键对四路功率继电器进行选择控制,达到对四路交流电源加电/断电的控制要求,由于是对220V市电进行控制,所以作品中尽可能的考虑了使用安全问题,使用了隔离电路以及在每一路上都有功率限制。
第二节软硬件总体设计方案
系统总体设计框图如下
图1.1 系统总体设计框图
为了实现安全的控制220V的交流电,本作品使用隔离控制大功率继电器的方式实现。220V交流电引入系统后,经过继电器和保险管后再经过四路插座输出。在控制继电器的方式上,为了安全起见,控制信号通过光耦隔离之后控制继电器。本作品可以实现4路220W 的功率输出控制。
各个模块之间的具体工作关系如下,用户通过键盘像MSP430处理器发送命令,MSP430G2211处理器在检测到案件后,会对相应的继电器控制I/O置位,注意此时的控制信号是隔离之前的信号;此信号经过隔离模块之后交给控制模块,用来控制相应的继电器动作,从而使得不同的通道导通。
第一章作品硬件系统设计
第一节MSP430G2系列Launchpad开发板组成及硬件资源情况介绍
MSP430G2系列Launchpad是TI推出的一款低成本的开发平台。它适用于适用于TI 最新MSP430G2xx 系列产品其基于USB 的集成型仿真器可提供为全系列MSP430G2xx 器件开发应用所必需的所有软、硬件。LaunchPad 具有集成的DIP 目标插座,可支持多达20 个引脚,从而使MSP430 Value Line 器件能够简便地插入LaunchPad 电路板中。此外,其还可提供板上Flash 仿真工具,以直接连接至PC 轻松进行编程、调试和评估。LaunchPad 试验板还能够对eZ430-RF2500T 目标板、eZ430-Chronos 手表模块eZ430-F2012T/F2013T 目标板进行编程。此外,它还提供了从MSP430G2xx 器件到主机PC 或相连目标板的9600 波特UART 串行连接。
MSP430G2系列Launchpad开发板硬件资源:
? USB 调试与编程接口无需驱动即可安装使用,且具备高达9600 波特的UART 串行通信速度
? 支持所有采用PDIP14 或PDIP20 封装的MSP430G2xx 和MSP430F20xx 器件
? 分别连接至绿光和红光LED 的两个通用数字I/O 引脚可提供视觉反馈
? 两个按钮可实现用户反馈和芯片复位
? 器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板? 高质量的20 引脚DIP 插座,可轻松简便地插入目标器件或将其移除
第二节关键器件选型以及性能指标参数
作为大功率电源开关的核心器件,大功率继电器的选型对整个系统的可靠性和性能都起着至关重要的作用。本作品中选用了厦门宏发电声生产的HF115-1ZS1型大功率继电器。其关键指标如下:
1.触点负载达到12A,250VAC,完全可以满足1A,220VAC的通过能力要求
2.最大切换电压和电流达到440VAC和12A。
3.触点间耐压达到1000VAC。
实物图如图2.1所示
图2.1 继电器实物图
在对驱动的要求上,该继电器的线圈驱动规格为:驱动电压大于 3.5V,驱动电流大于80mA。
综上可见,HF115-1ZS1型大功率继电器可以完全满足本作品的要求。
第三节单元电路介绍
1.MSP430G2211控制系统模块
模块电路如下
图2.2 单片机系统控制模块电路
如图2.1所示,P1.6,P1.7,P2.6,P2.7用于产生四个继电器的控制信号,由于本系统是用于大功率电源控制,从安全上考虑,在系统上电单片机复位阶段,由于I/O电平不确定,
有可能会给后级带来安全隐患,所以这里将四路I/O口全部下拉,用改变I/O口方向的方法实现控制电平的切换。这样,在系统复位到对I/O初始化的过程内电平都可控。确保了系统可靠性。同时由于G2211系列I/O资源较少,这里同时将指示灯功能也通过硬件的方法实现,高电平的时候继电器导通,并电量相应LED。
在按键控制方法上,由于G2系列单片机已经内置了上拉电阻,所以这里只需要将相应的P1.1,P1.2,P1.4,P1.5口与按键相连接地即可。
2.继电器控制模块
图2.3 继电器控制模块电路
这里使用一种最常用的继电器控制电路,同时为了保证系统安全,在每一路都增加的电流峰值吸收电路和保险管。
图2.4 继电器驱动电路
ULN2003是一款大功率的达林顿管阵列芯片,用在控制继电器上可以省略掉续流二极管。这里将经过光耦隔离出来的单片机控制信号进行电平转换和功率放大,以达到驱动继电器的目的。在继电器驱动中,R13和C1用于吸收在继电器切换瞬间的电流尖峰,以免造成单片机干扰。
3.控制信号隔离模块
图2.5 控制信号隔离模块
为了确保控制安全,控制信号全部经过一片TLP521-4芯片进行电器隔离,将强电弱电完全分离。
4.隔离电源模块
图2.6 隔离电源模块
由于控制信号的隔离,因此系统电源也隔离为两套。V电源引进系统后,一路经过直接供给用于驱动继电器和ULN2003;另一路经过DC-DC隔离模块之后供给单片机系统。
第四节系统元器件清单
系统元件清单如下
第五节PCB板设计要求和注意事项
由于本系统引入了220交流电,为了满足强电安全规范,在PCB设计时,应该将220V 电源的走线宽度大于50mil,走线间距大于20mil,以满足爬电距离要求。在加工PCB时也应要求PCB板厚度大于1.2mm。
同时由于强电和弱点采用了电器隔离,所以在对弱点走线和覆铜是应该尽量远离强电走线。需要在光耦芯片TLP521-4下面机械层开槽以增加爬电距离。
图2.7 机械隔离完整系统原理图如图2.8
图2.8 完整系统原理图系统PCB图如图2.9,2.10
图2.9 系统PCB正面
图2.10 系统PCB图背面
第六节安装调试注意事项
由于本系统涉及到了强电,所以在上电之前请务必将保险管安装到位,同时对涉及到220V的接线端子,请务必使用耐压参数合格的产品。系统板实物图如图2.11
图2.11 系统版实物图
在系统加电之前,请检查好保险管的规格参数,这里使用的1A的保险管。根据本作品的设计,输入和输出的一根线是接通的,另一根线由继电器控制,所以为了确保安全,在改变负载之前请确保电源已经彻底断开。
系统连接实物图如图2.12所示
图2.12 系统连接实物图
第二章作品软件系统设计
第一节程序流程图介绍
1.程序流程图
图3.1 系统总流程图
图3.2 中断服务程序流程图
程序流程说明:由于控制继电器的I/O口采用的下拉方式,所以控制程序使用改变I/O 方向的方式来改变输出电平。例如,需要将P1.6口输出高电平时,需要将P1.6输出设为高,同时将方向设置为输出模式;如果希望P1.6输出低电平,则将P1.6口方向置为输入即可。这样可以保证在系统复位时也有确定的低电平输出。
2.程序代码及注释
#include"msp430g2231.h"
void Sys_Clk_Init();
void Delay(unsigned int time);
void Port_Init();
//对I/O操作口进行宏定义,方便后面的操作
#define CONTROL_1_HIGH P1DIR|=BIT6 //将P1.6口设置为输出模式,输出高
#define CONTROL_1_LOW P1DIR&=~BIT6 //将P1.6口设置为输入模式,通过下来电阻使其输出低
#define CONTROL_2_HIGH P1DIR|=BIT7
#define CONTROL_2_LOW P1DIR&=~BIT7
#define CONTROL_3_HIGH P2DIR|=BIT7
#define CONTROL_3_LOW P2DIR&=~BIT7
#define CONTROL_4_HIGH P2DIR|=BIT6
#define CONTROL_4_LOW P2DIR&=~BIT6
unsigned char PushCnt=0; //记录按下的次数,该变量决定了I/O口的反转
void main()
{
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
Sys_Clk_Init(); //系统时钟初始化
Delay(60000); //略微延时等待系统时钟稳定
Port_Init(); //I/O口初始化设置
_EINT(); //打开系统总中断
while(1)
{};
}
#pragma vector=PORT1_VECTOR
__interrupt void Port_Control()
{
//按键消抖
unsigned char Pushkey;
Pushkey=P1IFG&(BIT1+BIT2+BIT4+BIT5);
Delay(20000);
if((P1IN&Pushkey)==Pushkey)
{
P1IFG=0;
return; //如果是毛刺直接返回
}
//不是毛刺,进入按键处理程序
if(Pushkey&BIT1) //如果按下BIT1
{
if(PushCnt&BIT1) //检测上一次I/O状态
{
CONTROL_4_HIGH; //如果上一次为低则这一次将其设置为高,反之亦然 }
else
{
CONTROL_4_LOW;
}
PushCnt^=BIT1; //记录响应按键的动作
}
if(Pushkey&BIT2)
{
if(PushCnt&BIT2) {
CONTROL_3_HIGH; }
else
{
CONTROL_3_LOW; }
PushCnt^=BIT2;
}
if(Pushkey&BIT4)
{
if(PushCnt&BIT3) {
CONTROL_2_HIGH; }
else
{
CONTROL_2_LOW; }
PushCnt^=BIT3;
}
if(Pushkey&BIT5)
{
if(PushCnt&BIT4) {
CONTROL_1_HIGH; }
else
{
CONTROL_1_LOW;
}
PushCnt^=BIT4;
}
P1IFG=0;
return;
}
/*******************************************************
函数名称:Sys_Clk_Init
函数功能:对系统时钟进行初始化
入口参数:无
出口参数:无
*******************************************************/
void Sys_Clk_Init()
{
DCOCTL = 0xA0;//使用内部DCO,频率约为32768*51=1632kHz
BCSCTL1= 0x07;//ACLK不分频 RSEL=7
BCSCTL2= 0; //MCLK时钟源选为DCOCLK,不分频,SMCLK选为DCOCLK,不分频}
//延时程序
void Delay(unsigned int time)
{
for(unsigned int i=0;i