资源描述
嵌入式系统技术实验报告
题 目:基于MSP430和TC35模块的
智能家电控制系统设计
姓 名:张若愚
学 号:1012121109
导 师:楼顺天
基于STC89C52和TC35模块的智能家居控制
摘要
本文提出一种基于为实现温室环境监测的便捷化,设计一种基于STC89S52和TC35i 的温室环境短信监测系统。该系统采用多种传感器实现对温度、湿度、光照强度、CO2浓度等参数的实时采集,实现数据的获取、处理功能,提高了对环境数据采集的自动化水平,具有扩展性好、实用性强、便于操作等特点,并具有较高的推广价值。
关键字:TC35i 智能家居 GSM
第一章 绪论
1.1 引言
随着通信技术、计算机技术、网络技术、控制技术的迅猛发展与提高,促使了家庭实现了生活现代化,居住环境舒适化、安全化。这些高科技已经渗透到生温室环境的各项参数是否符合规定要求需进行检测得知,而科技的发展为温室环境的监测自动化、高效化提供了重要条件。GSM 短信息以其覆盖区域广、快捷、高效、准确、费用低廉、受环境影响小等特点,逐步应用于工业控制、移动作
业环境、远程数据采集和监控中,可随时随地通过GSM 模块以短消息方式发送和接收现场采集到的数据, 具有实时性强、精度高的优点,便于数据信息的集中管理和远程控制。
智能家电控制系统是以HFC、以太网、现场总线、公共电话网、无线网的传输网络为物理平台,计算机网络技术为技术平台,现场总线为应用操作平台,构成一个完整的集家庭通信、家庭设备自动控制、家庭安全防范等控制系统。
以GSM网络作为数据无线传输网络,利用GSM短信息系统进行无线通信还具有双向数据传输功能,性能稳定,为远程数据传送和监控设备的通信提供了一个强大的支持平台。
1.2 系统功能
单片机连接8颗LED灯,模拟家电,灯亮表示相应家电打开,灯灭表示相应家电关闭。TC35模块插入SIM卡,单片机通过AT指令控制TC35模块发送信息和接收信息。开机,单片机发送向主控手机发送握手信号“Hi, I am ready.”, 主控手机收到握手信号后,则可以对控制系统进行短信控制,如发送“open1”,则对应的led1灯亮,发送“shut1”,则对应的led1灯熄灭。控制系统操作成功后,再向主控手机反馈信息,“Operate successfully!”,若操作失败则发送“Operate fail,try again!” 。
第二章 硬件平台
2.1系统硬件构成
该控制系统以STC89C52单片机为核心,组成单片机最小系统,通过串口连接TC35模块,P0口作为8位控制输出端口。因为该系统是用的单片机学习板,P1、P2、P3端口已作其他用途,只有P0口有引出,故选用P0口作为输出,只需要添加加上拉电阻即可。
图1 系统结构图
2.2 51单片机及外围电路
单片机主要控制TC35模块的收发短信,并对短信内容进行处理,得到相应的控制目的。试验中用的是单片机的学习板,但实际上只用到很少的一部分硬件资源,主要是通过串口与TC35进行通信和P0口得控制输出。单片机及外围电路图如下:
图2 单片机及外围电路图
选用STC89C52单片机,选用22.1184MHz的外部晶振,以方便进行串口通信波特率设置;采用USB供电,也可以外接电池供电;串口通过MAX232进行电平转换,这里不通过转换也可以,为了下载程序方便,故用了232电平转换电路;P1.0口接蜂鸣器,方便调试跟踪程序;将P0口上拉作为输出端口,接8颗LED状态灯,模拟家电的开启和关闭。
2.3 TC35模块
2.3.1 TC35模块简介
TC35是Siemens公司推出的新一代无线通信GSM模块,它自带RS232通讯接口,可以方便地与PC机、单片机连机通讯。可以快速、安全、可靠地实现系统方案中的数据、语音传输、短消息服务和传真。TC35模块的工作电压为3.3 ~5.5V,可以工作在900MHz 和1800MHz 两个频段,所在频段功耗分别为2W(900MHz)和1W(1800MHz)。模块有AT 命令集接口,支持文本和PDU模式的短消息、第三组的二类传真以及2.4k、4.8k、9.6k的非透明模式。此外,该模块还具有电话簿功能、多方通话、漫游检测功能,常用工作模式有省电模式、IDLE、TALK 等模式。通过独特的40 引脚的ZIF 连接器,实现电源连接、指令、数据、语音信号及控制信号的双向传输。通过ZIF连接器及50Ω天线连接器,可分别连接SIM卡支架和天线。TC35 模块主要由GSM基带处理器、GSM 射频模块、供电模块(ASIC)、闪存、ZIF连接器、天线接口六部分组成。作为TC35的核心,基带处理器主要处理GSM终端内的语音、数据信号,并涵盖了蜂窝射频设备中的所有的模拟和数字功能。在不需要额外硬件电路的前提下,可支持FR、HR和EFR语音信道编码。
图3 TC35模块结构框图
GSM 基带处理器是整个模块的核心,它控制着模块内各种信号的传输、转换、放大等处理过程。GSM 射频部分是一个单片收发器,它完成对射频信号的接收和发送等处理。GSM 模块电源把外部输入的电源电压进行稳压处理后供GSM 基带处理器和GSM 射频部分使用。Flash 用来存储一些用户配置信息、电话本和其他信息。TC35 的数据输入/输出接口实际上是一个串行异步收发器,符合RS232 接口标准,有固定的参数:8 位数据位和1 位停止位,无校验位,波特率在300bps~115kbps 之间可选,硬件握手信号用RTS0/CTS0,软件流量控制用XON/XOFF,CMOS 电平,支持标准AT命令集。通过这一接口可以用AT 命令切换操作模式,使它处于语音、数据、短消息或传真模式。
2.3.2 AT指令
G S M 引擎模块提供的命令接口符合G S M 0 7 . 0 5 和GSM07.07 规范。GSM07.07 中定义的AT Command 接口,提供了一种移动平台与数据终端设备之间的通用接口; GSM07.05 对短消息作了详细的规定。在短消息模块收到网络发来的短消息时, 能够通过串口发送指示消息, 数据终端设备可以向G S M 模块发送各种命令。与S M S 有关的GSM AT 指令如表1 所列。GSM AT 指令集,是由诺基亚、爱立信、摩托罗拉和H P 等厂家共同为G S M 系统研制的,其中包含了对SMS(Short Message Service)的控制。
常见的AT指令:
AT+CMGF 选择短信息格式
AT+CSCA 短信息中心地址
AT+CNMI 显示新收到的短信息
AT+CMGR 读短信息
AT+CMGS 发送短信息
2.3.3 短信收发原理及程序设计
要使用TC35 模块实现短信收发,就必须理解串口通信、AT 指令和短信的编码、解码。PC机或单片机通过串口向TC35模块发送AT命令,完成对TC35模块的控制和通信。对于短信的收发控制模式,按时间先后,共有三种模式:Block Mode、基于AT 指令的Text Mode、基于AT 指令的PDU Mode(ProtocolData Unit)。使用Block 模式需要模块生产厂家提供驱动支持,使用Text 模式收发短信代码简单,实现容易,但只能发送英文短信(纯文本格式),而使用PDU 模式编码的短信内容则可以是中文、英文、声音或图像,本文主要介绍利用AT 指令在Text 模式下通过GSM 无线模块收发短消息。
发送:AT+CSCA=+8613800290500 即设置短信中心为西安移动,设置成功TC35模块通过串口返回:AT+CSCA=+8613800290500
OK
发送:AT+CMGF=1 设置短信格式为Text模式,设置成功TC35返回:
AT+CMGF=1
OK
2.3.4 TC35外围电路
图4 TC35模块外围电路图
电源模块系统由5V供电,通过REG117-3.3产生TC35需要的3.3V电压。
TC35模块通过一个40针的卡座连接在电路板上。在电路板上接SIM卡和串口电路以及电源部分。
SYNC引脚可以用来输出一个同步信号(synchronization signal),也可以在应用使来控制一个LED灯的输出状态。:SYNC端通过一个三极管或门电路来控制LED。一个简单的电路接法是:SYNC端通过一电阻接到NPN三极管(如9013)的基极,射极直接接地,集电极通过一个接限流电阻接到LED的负端,LED的正端接VCC。LED的工作模式完全类同于同步信号,显示的是TC35的工作状态:
1〉LED灯灭,表示TC35电源关闭,处于休眠、报警或单纯的充电模式
2〉600 ms 亮 / 600ms 灭,表示未插入SIM卡,或者个人身份未登记/已注销,或者网络正在搜寻中,或者正在进行用户身份鉴定,或者网络注册正在进行中
3〉75ms 亮 / 3s 灭,表示网络注册成功(控制通道和用户交换信息完成),无来电
4〉LED灯亮,依据不同的呼叫类型:声音呼叫,数据呼叫,在建立或者完毕时的状态。
TC35的触发点火信号端/IGT, 用OC门或者一个简单的开关拉低该端电平来开启模块,低电平有效。在空闲/通话/关机模式:Vout = 2.0V,Vlow,max = 0.45V @ Iout = 10µA,tlow ≥ 100ms。对于点火信号IGT的处理,需要首先拉低该脚电平到地,并至少维持100ms。
第三章 软件设计
3.1 设计要求
当系统开启,系统初始化,完成后向主控手机发送准备好信号“Hi,I am ready!”,则表示系统通信没问题,主控手机可以发送命令实行远程控制了。主控手机收到准备好信号后,可向系统发送“open1”,打开第一颗led灯,或者“shut1”,关闭第一颗led灯。操作成功后,系统回馈给主控手机信息“operate successfully!”,若失败则返回“operate fail,try again!”。
单片机与TC35模块串口通信,设置串口波特率9600bps,8 位数据位和1 位停止位,无校验位。在串口接收中断处理函数把TC35返回的内容拷贝到一个全局变量,以便后续判读,处理信息。
3.2 程序流程图
图5 程序流程图
3.3 程序举例
单片机实现短信自动发送
进行短信发送的前提是短信内容的正确编码。经过以上对短信发送过程的分析,可以通过单片机对其进行实现。下面是实现程序例程:
函数名:PDU_SMS()
功能 :发送短信
参数说明:SMS_Center为短信中心号码 11位
SMS_Telenum为短信接收方的号码 11位
SMS_Context为短信的内容
--------------------------------------------------------------------------------*/
int PDU_SMS(char *SMS_Center, char *SMS_Telenum,
char *SMS_Context,char is_GB)
{
int i,j;
unsigned char len,time;
char lens[3];
time=0;
for(i=0;i<300;i++) PDU_Code[i]=PDU_t[i];
/*----------设置短信中心号码--------------*/
for (i = 0, j = 0; i < strlen(SMS_Center) / 2; i++)
{
PDU_Code[6+(j++)] = SMS_Center[2 *i + 1];
PDU_Code[6+(j++)] = SMS_Center[2 *i];
}
PDU_Code[6+j++] = 'F'; //在最后补上的F
PDU_Code[6+j] = SMS_Center[strlen(SMS_Center) - 1];
/*----------设置接收号码--------------*/
for (i = 0, j = 0; i < strlen(SMS_Telenum) / 2; i++)
{
PDU_Code[26+(j++)] = SMS_Telenum[2 *i + 1];
PDU_Code[26+(j++)] = SMS_Telenum[2 *i];
}
PDU_Code[26+j++] = 'F';
PDU_Code[26+j] = SMS_Telenum[strlen(SMS_Telenum) - 1];
/*----------设置短信内容长度--------------*/
if(is_GB==0)
len = strlen(SMS_Context) *2;
else
len = strlen(SMS_Context);
PDU_Code[44] = (len >> 4) > 9 ? (len >> 4) + 55: (len >> 4) + 48;
PDU_Code[45] = (len &0x0f) > 9 ? (len &0x0f) + 55: (len &0x0f) + 48;
/*----------编码短信内容--------------*/
if(is_GB==0)//如果不是GB码,短信内容为ascii码字符串
{
for (i = 0,j=0; i<strlen(SMS_Context);i++)
{
szzh16(SMS_Context[j++],lens);
PDU_Code[46+i*4] = '0';
PDU_Code[46+i*4+1] = '0';
PDU_Code[46+i*4+2] = lens[0];
PDU_Code[46+i*4+3] = lens[1];
}
PDU_Code[46+i*4] = 0x1a;
PDU_Code[46+i*4+1] = 0xff;
}
else //短信内容为GB码,如果要使手机能够显示,改到UNICODE编码
{
for (i = 0,j=0; i<strlen(SMS_Context);i++)
{
szzh16((int)SMS_Context[j++],lens);
PDU_Code[46+i*2] = lens[0];
PDU_Code[46+i*2+1] = lens[1];
}
PDU_Code[46+i*2] = 0x1a;
PDU_Code[46+i*2+1] = 0xff;
}
/*---------------------------------------------*/
if(PDU_HandShake())
{
do
{
//LCD_PutChn(5,96,"SS...");
//if(is_GB)
PDU_EnablePDU();
if(is_GB==0)
PDU_SetLength(Strlen(SMS_Context)*2);
else
PDU_SetLength(Strlen(SMS_Context));
PDU_Send(PDU_Code);
//LCD_PutEng(5,96,"SS");
for(i=0;i<25;i++)
delay(20000);
sbuf[counter]=0;
//LCD_PutNum16(5,96,time);
counter=0;
time++;
}
//判断是否发送成功,如果不成功继续发送,最多4次,如仍不成功,返回0
while(strpos(sbuf+strlen(sbuf)-20,'G')==-1&&time<4)
if(strpos(sbuf+strlen(sbuf)-20,'G')==-1)
return 0;
else
return 1; //成功的话返回0
}
else
{
//LCD_PutEng(5,96,"LL");
sbuf[counter]=0;
//LCD_PutEng(0,0,sbuf);
counter=0;
return 0;
}
}
以上程序成功实现短信的发送,其中的一些函数限于篇幅可自行实现。
(6)单片机对短信的读取与解码
单片机可以通过AT指令对短信猫中的短信进行读取,并对读入的短信数据进行分析与解码。
读出的短信格式与发送时的短信编码大致是相同的。下面给出相应的程序例程,读者可以在自行实验中对照验证。
1. 读取某一条短信,并将其进行显示
函数名:LAD_SMS()(short for "Load And Display the Short MessageS")
功能:用户函数,读取第n条短信,并在LCD的(x,y)位置显示出来
unsigned char LAD_SMS(unsigned char n,unsigned char x,unsigned char y)
{
unsigned char i,len,t;
char temp[5];
char temp1[3];
//IN_Draw_BlankorBlackRect(0,20,30,72,0);
szzh10(n,temp1);
//将n转为相应的字符串,如n=21,则字符串为"21",用以与AT指令拼接。
t=85;
clear_sbuf();
counter=0;
send_s("AT+CMGR=");//AT+CMGR为读取短信的AT指令
send_s(temp1);//上面所得的字符串
send(0x0d);
send(0x0a);
for(i=0;i<10;i++) delay(10000); //等待读取完毕
sbuf[counter]=0; //在收到的数据末尾附加'\0'
temp[0]=sbuf[23];
temp[1]=sbuf[24];
temp[2]=sbuf[25];
temp[3]=0;
if(sbuf[25]!=0x0d) t++;
for(i=0;i<strlen(temp);i++) if(temp[i]==0x0d) temp[i]=0;
len=atoi(temp); //获取收到的短信内容长度
//LCD_PutEng(23,76,"(SM:");
//LCD_PutNum16(27,76,n);
//LCD_PutEng(29,76,")");
if(len==0)
{
//LCD_PutEng(5,96,"EMP");
//LCD_PutChn(x,y,">短信空");
delay(50000);
return 0;
}
len-=20;
if(len>90)
{
//LCD_PutEng(5,96,"MTL");
//LCD_PutChn(x,y,">短信太长");
delay(50000);
return 0;
for(i=0;i<len;i++)
{
temp[0]=sbuf[t+2*i];
temp[1]=sbuf[t+2*i+1];
temp[2]=0;
sbuf[i]=_hex_(temp);
//收到的短信内容是内存方式的显示表示,转为十六进制数
}
sbuf[i]=0;
Analysis_Pro();//解码后的内容在sbuf中,此函数对其进行显示输出
//LCD_PutEng(x,y,inf_bw.Date);
//LCD_PutEng(x,y,sbuf+29);
delay(50000);
clear_sbuf();
counter=0;
return 1;
}
由于本文的宗旨在于讲解串口通信,因此,我们屏蔽图形用户界面的细节,制作一个简单的短信收发软件,它包含了控制短信终端的所有串口通信内容。实际上,一个理想的短信收发软件的界面应类似于Outlook或Foxmail,包含收件箱、发件箱、已发送短信箱等内容,但是这些东西都与我们要介绍的串口通信无关
第四章 调试结果
经实验调试,智能家电系统已经达到设计要求,通过GSM网络能够准确的控制各led灯的亮灭。开机,系统发送准备好信号“Hi,I am ready!”,主控手机发送“open1”、“shut1”,“open2”、“shut2”…能准确控制各led灯的亮和灭,“openA”则打开所有的灯,“shutA”则关闭所有的灯。主控手机能收到系统的反馈信息“operate successfully!”。
图6 系统实物图
图7 开机系统向主控手机发送“Hi,I am ready.”
图8 发送命令“open1”,打开第1路led
图9 第一路led亮,操作成功,返回信息“Operate Successfully!”
图10 发送命令“open4”,打开第4路led
图11 第4路led亮,操作成功,返回信息“Operate Successfully!”
图12 打开第8路led
图13 关闭第8路led
图14 关闭第8路led成功
图15 打开全部led
图16 打开全部led成功
图17 短信读取函数
图18 短信发送函数
调试过程中遇到的问题及解决
1、TC35的电流消耗指标:
1〉通话模式的峰值电流(TALK mode of peak),1.8A
2〉通话模式的典型电流(TALK mode),300mA @900MHz / 270mA @1800MHz
3〉空闲模式(IDLE mode)的消耗电流,10mA
4〉休眠模式(SLEEP mode)的消耗电流,3mA
5〉关机模式(Power Down mode)的消耗电流,50µA
2、关于LED灯显示的状态
SYNC引脚可以用来输出一个同步信号(synchronization signal),也可以在应用使来控制一个LED灯的输出状态。:SYNC端通过一个三极管或门电路来控制LED。一个简单的电路接法是:SYNC端通过一电阻接到NPN三极管(如9013)的基极,射极直接接地,集电极通过一个接限流电阻接到LED的负端,LED的正端接VCC。LED的工作模式完全类同于同步信号,显示的是TC35的工作状态:
1〉LED灯灭,表示TC35电源关闭,处于休眠、报警或单纯的充电模式
2〉600 ms 亮 / 600ms 灭,表示未插入SIM卡,或者个人身份未登记/已注销,或者网络正在搜寻中,或者正在进行用户身份鉴定,或者网络注册正在进行中
3〉75ms 亮 / 3s 灭,表示网络注册成功(控制通道和用户交换信息完成),无来电
4〉LED灯亮,依据不同的呼叫类型:声音呼叫,数据呼叫,在建立或者完毕时的状态。
2、关于VDD端:
TC35正常工作时,VDD引脚输出信号的幅度(大约在开机后60ms产生):2.9V/70mA,可作为外部应用。
空闲或者通话模式: VDDout = 2.9V ±3% @ 70mA Imax = 70mA;电源关闭模式: VDDout = 0V。
3、关于VBATT+端:
TC35的工作电压输入端VBATT+,电压幅度为 3.3V-5.5V,Vtyp = 4.2V,最大电流Imax ≤ 2 A @ GSM天线回波损耗(return loss)≥ 6 dB。必须注意:最低工作电压不能低于3.3V,否则电压将会跌落,从而导致TC35停止工作。由于VBATT+引脚的峰值电流为 2A ,一个GSM发射脉冲(transmission burst)可能引起相当大的电压跌落,此外由于外部电源的扁平柔性连线的内在固有阻抗也可能损失一部分。因此,在任何时候,必须保证VBATT+ 的电压不能低于 3.3V,而且电压跌落差值不能超过400 mV。另外,为了保证TC35在发射脉冲区间的电压跌落值处于最低值,采用尽可能短的连接模块和ZIF座的扁平柔性FFC电缆,长度不得超过200mm,和低输出阻抗(low-impedance)的电源。
4、关于POWER端:
TC35的充电电压正端POWER,如果通过外部的电源(如充电器)供电,应保证Imax = 500 mA,Vin=5.5-8V。
5、关于/IGT(Ignition)端:
TC35的触发点火信号端/IGT, 用OC门或者一个简单的开关拉低该端电平来开启模块,低电平有效。在空闲/通话/关机模式:Vout = 2.0V,Vlow,max = 0.45V @ Iout = 10µA,tlow ≥ 100ms。对于点火信号IGT的处理,需要首先拉低该脚电平到地,并至少维持100ms。
注意,如果你通过充电器回路(接到POWER引脚)供电,或者通过电池供电(接到VBATT+引脚),那么IGT信号必须维持至少1秒!
6、关于PD(Power down):
TC35的关闭电源端/PD,关机信号脉冲,信号波形为~~~|______|~~~ ,拉低到低电平,至少维持3.5秒方为有效。Vin,low,max = 0.45V @ I = 0.1mA,可用OC门或者一个简单的开关实现,通过关机信号端可以关闭TC35。而在IGT引脚施加一个低电平脉冲信号可以重新开启模块及系统。另外,关机信号端/PD也可用来实现看门狗信号输出:Vout,low = 0.35V @ 0.01mA,Vout,high = 2.30V @ -0.01mA,fout = 0.5-2.0Hz
7、启动TC35的方式:
TC35 可以通过以下方式激活,开始工作
1〉通过点火线IGT触发,进入正常工作状态
2〉通过电源线,开始进入充电区
3〉通过RTC中断,开始进入报警模式
8、TC35的开机操作时序
当开始应用,TC35的加电过程必须按照以下步骤进行:
1〉直到VBATT+脚的电平超过3.0V时方可对ignition线的信号电平变换。
2〉VBATT+脚的电平上升达到3.0V后维持10毫秒,方可拉低IGT线的信号电平。IGT线的电平跌落时间(下降时间)必须不超过1ms。
3〉另外,该IGT线的低电平信号必须维持最少100ms。
4〉在IGT线信号转换区间必须保证 VBATT+ 的电压不能低于3.0V,否则模块不能被激活。本系统设计的还有很多值得改进的地方:
1、功能还不够强,最好能添加实时时钟模块,实现定时控制;最好能添加PDU模式,实现中文短信发送接收;最好能够添加键盘输入模块,以便可以手动设置主控手机的号码;最好能添加状态查询功能,能通过短信查询个家电的开启和关闭状态。
2、输出端口驱动力不够,由于使用的是单片机学习板,资源有限,本系统用的P0端口控制输出,以后要扩展为继电器输出,驱动力不够。
3、电路不够简约。由于成本及时间问题,本系统选用的是单片机学习板和TC35模块,电路分散,所以以后可以将单片机和TC35综合在一个板子上。
展开阅读全文