杭州电子科技大学
创新性实验探索
设计报告
实验名称:智能插座控制系统之GSM模块
姓名学号:刘峰07046219
王斌07046229
姚慧超07046232 指导老师:刘公致等
实验报告
1.Abstract:
本次实验的基本要求是制作一个能接受短信,根据短信内容(查询、开、关)反馈本地用电器工作状态,控制控制本地用电器的GSM控制系统。该系统主要由西门子TC35i及其电源和接口电路、单片机、本地用电器(这里使用电机)组成。该系统关键是TC35i模块的AT指令调试,模块电源制作(TC35i对电源要求较高,电压低于3.3V模块自动关机),另外就是单片机和GSM模块的串口通信及控制程序,要根据模块的不同回复做出判断并发送控制指令。在制作调制中遇到了硬件和软件方面的问题,通过自己在网络上面、书本上查资料和请教用过该模块的同学,一步步解决问题,最终实现了所有功能,并做了一定扩展。具体问题和解决方法在后面有说明。
2.制作情况简介:
本次实验主要设计制作采用手机发送短信通过GSM网络控制单片机实现具体操作,同时也能实现反向的运行(单片机的操作信息通过GSM网络反馈至手机)的功能。使用单片机通过RS232串口与GSM模块通信,使用标准的AT命令来控制GSM模块实现各种无线通信功能,例如:发送短信等。
3.引言:
3.1GSM优势及特点:
随着科技的飞速发展和人民生活水平的不断提高,手机的普及率越来越高,更新也越来越快,价格也越来越便宜。因为手机工作的无线网络覆盖范围广,在信息传递方面性能稳定、可靠,所以把手机作为信息传递的载体,与单片机结合起来构成应用系统有着强大的生命力和广阔的应用空间,特别是在远程数据传输、远程监控等领域更是受到电子设计应用工程师的关注。
GSM系统是目前基于时分多址技术的移动通信体制中最成熟、最完善、应用最广的一种系统。GSM的短消息业务,由于其方便、快捷、廉价等特点而受到用户的青睐,它作为GSM网络的一种基本业务,已得到越来越多的系统运营商和系统开发商的重视。目前,很多网络公司就是靠短消息业务生存和发展。随着短消息业务的不断发展,它在移动终端上的应用也越来越广,最典型的就是车载监控系统。
GSM全名为:Global System for Mobile Communications,中文为全球移动通讯系统,俗称"全球通",是一种起源于欧洲的移动通信技术标准,是第二代移动通信技术,其开发目的是让全球各地可以共同使用一个移动电话网络标准,让用户使用一部手机就能行遍全球。
我国于20世纪90年代初引进采用此项技术标准,目前,中国移动、中国联通各拥有一个GSM网,为世界最大的移动通信网络。GSM系统包括 GSM 900:900MHz、GSM1800:1800MHz 及 GSM1900:1900MHz等几个频段。GSM使用的是时分多址的变体,并且它是目前三种数字无线电话技术(TDMA、GSM和CDMA)中使用最为广泛的一种。GSM将资料数字化,并将数据进行压缩,然后与其它的两个用户数据流一起从信道发送出去,另外的两个用户数据流都有各自的时隙。
GSM实际上是欧洲的无线电话标准,据GSM MoU联合委员会报道,GSM在全球有12亿的用户,并且用户遍布120多个国家。因为许多GSM网络操作员与其他国外操作员有漫游协议,因此当用户到其他国家之后,仍然可以继续使用他们的移动电话。
美国著名通信公司Sprint的一个辅助部门,美国个人通信正在使用GSM作为一种宽带个人通信服务的技术。这种个人通信服务将最终为爱立信、摩托罗拉以及诺基亚现在正在生产的手持机建立400多个基站。手持机包括电话、短信寻呼机和对讲机。
GSM系统有几项重要特点:防盗拷能力佳、网络容量大、手机号码资源丰富、通话清晰、稳定性强不易受干扰、信息灵敏、通话死角少、手机耗电量低。
1.频谱效率。由于采用了高效调制器、信道编码、交织、均衡和语音编码技术,使系统具有高频谱效率。
2.容量。由于每个信道传输带宽增加,使同频复用栽干比要求降低至9dB,故GSM系统的同频复用模式可以缩小到4/12或3/9甚至更小(模拟系统为7/21);加上半速率话音编码的引入和自动话务分配以减少越区切换的次数,使GSM系统的容量效率(每兆赫每小区的信道数)比TACS系统高3~5倍。
3.话音质量。鉴于数字传输技术的特点以及GSM规范中有关空中接口和话音
编码的定义,在门限值以上时,话音质量总是达到相同的水平而与无线传输质量无关。
4.开放的接口。GSM标准所提供的开放性接口,不仅限于空中接口,而且报刊网络直接以及网络中各设备实体之间,例如A接口和Abis接口。
5. 安全性。通过鉴权、加密和TMSI号码的使用,达到安全的目的。鉴权用来验证用户的入网权利。加密用于空中接口,由SIM卡和网络AUC的密钥决定。TMSI是一个由业务网络给用户指定的临时识别号,以防止有人跟踪而泄漏其地理位置。
6.与ISDN、PSTN等的互连。与其他网络的互连通常利用现有的接口,如ISUP 或TUP等。
7.在SIM卡基础上实现漫游。漫游是移动通信的重要特征,它标志着用户可以从一个网络自动进入另一个网络。GSM系统可以提供全球漫游,当然也需要网络运营者之间的某些协议,例如计费。
GSM模块将GSM射频芯片、基带处理芯片、存储器、功放器件等集成在一块线路板上,具有独立的操作系统、GSM射频处理、基带处理并提供标准接口的功能模块。因此,GSM模块具有发送SMS短信,语音通话,GPRS数据传输等基于GSM网络进行通信的所有基本功能。简单来讲,GSM模块加上键盘、显示屏和电池,就是一部手机。
目前,GSM模块依然在广泛的工业应用领域使用,在更行各业都能看到GSM 模块应用的产品。例如,在车载监控领域,使用GSM模块将车辆行驶的GPS数据传输回车辆管理中心;在电力、水务系统,通过GSM模块实现了远程智能抄表,可以实时监控用户的用电和用水量;在测绘行业,为很多偏僻的测绘点安装了GSM模块实现了实时的监控,不必再人工收集数据;[2]在家庭,可以安装无线报警系统,一旦发生火情或盗窃行为,可以立即通知户主和报警;在国外,很多老人小孩带了个人跟踪器,防止老人和小孩走失或意外发生,里面也是集成了GSM模块。可以说,随着GSM的网络建设的完善,GSM模块的应用范围也越来越广。
3.2.实验采用GSM(TC35)模块介绍:
GSM(TC35)模块介绍:
TC35i是Siemens公司推出的新一代无线通信GSM模块,可以快速安全可靠地实现系统方案中的数据、语音传输、短消息服务(Short Message Service)和传真。模块的工作电压为3.3 -5.5V,可以工作在900MHz和1800MHz两个频段,所在频段功耗分别为2W(900M)和1W(1800M)。模块有AT命令集接口,支持文本和PDU模式的短消息、第三组的二类传真、以及2.4k,4.8k,9.6k的非透明模式。此外,该模块还具有电话簿功能、多方通话,漫游检测功能,常用工作模式有省电模式、IDLE、TALK等模式。通过独特的40引脚的ZIF连接器,实现电源连接、指令、数据、语音信号、及控制信号的双向传输。通过ZIF连接器及50Ω天线连接器,可分别连接SIM卡支架和天线。
TC35i模块主要由GSM基带处理器、GSM射频模块、供电模块(ASIC)、闪存、ZIF连接器、天线接口六部分组成。作为TC35i的核心,基带处理器主要处理GSM 终端内的语音、数据信号,并涵盖了蜂窝射频设备中的所有的模拟和数字功能。在不需要额外硬件电路的前提下,可支持FR、HR和EFR语音信道编码。非常适合本项目的使用。
4. 总体设计:
用户终端手机
GSM 网络
控制终端(接被控制电器)
4.1方案论证:
4.1.1 方案一:
若只是达到实验最为基础的目的实现开关的通断,也可用无线的方式。 设计初曾考虑使用红外模块,实现开关的通断,类似无线遥控的方式,例如:车库门的开启关闭和电视的遥控等。
但是考虑到红外模块的发射接收的距离严格有限,操作人必须在接受器的周围一定范围内使用红外进行遥控,此外信号的接受的有效程度也大大受到了环境的因素的制约,而考虑到本实验设计的初衷是要实现远距离,无障碍,零时刻的控制。红外模块有其致命的缺陷。
4.1.2 方案二:
GSM 控制单片机实现开关的通断,主要是联系到了现今人人必备的手机,操作人通过手机(短信指令)的GSM 网络来实现对单片机的控制,不仅可以控制开关的通断,而且还能实时通过单片机来发送反馈信息监控开关的情况,如:温度(通过温度传感18B20),通断时间(计时器),从而开关的提高稳定性和安全性。
考虑到GSM 的远距离,无障碍,零时刻发送控制短信的便捷性,和现如今人们都携带手机的实用性,实验考虑使用GSM 模块是很有实际意义的。
4.2设计总体结构流程框图: 5硬件设计:
主要完成串口控制电路,电源电路的硬件电路和GSM 模块的外部驱动电路的
设计。
5.1总的硬件设计图:
5.2单个硬件的设计及其作用:5.2.1:
5.2.2:
5.2.3:
5.2.4:
GSM模块PCB图
5.软件设计:流程图
缓冲区是否出
现OK?
清缓冲
检测是否收到
短信
提取缓冲区内容
清缓冲
初始化
收到“0”
关电机、短信返回
关机提示
收到“1”
开电机、短信返回
关机提示
收到“9”
返回电机工作状态
及开关机提示根据短信内
容做出响应
清缓冲
显示短信内容
YES
NO
NO
YES
//主程序
#include
#include
#include <5110.c>
#define uchar unsigned char
#define uint unsigned int
#define RxIn 67//67为短信接收一个byte最小buffer长度
sbit motor_state=P0^0;
sbit motorcontrol=P0^1;
sbit start=P3^7;
uchar code AT_CMGR[8]="AT+CMGR=";//读取
uchar code AT_CMGS[8]="AT+CMGS=";//发送
uchar code AT_CMGD[8]="AT+CMGD=";//发送 8
uchar code num[10]="0123456789";//删除短信的序号
uchar code open_state[]="The motor is running,return\"0\" to shutdown.";
uchar code close_state[]="The motor is close,return \"1\" to open.";
uchar data AT_Read[12];
uchar idata AT_D[9];
uchar data AT_SendNumber[25];
uchar idata numberbuf1[2];
uchar idata message[1]={0xaa};
uchar idata m=0;
uchar idata SystemBuf[RxIn];//接收缓冲区
uchar idata Rx=0;
uchar idata s_byte=0;//通过短信返回的P2口电平状态
bit idata motorstate=0; // 电机工作状态,1=工作,0=停止
bit idata receiveready=0;
bit idata sendready=0;
bit idata send=0;
void delay_ms(uint ms)
{
uchar tt;
for(;ms--;ms>0)
for(tt=125;tt>0;tt--); }
void Start_GSM()
{
start=0;
delay_ms(500);
start=1;
delay_ms(1000);
}
void UART_init (void)
{
TMOD=0x20;
PCON=0x00;
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
EA=1;
ES=1;
TR1=1;
}
void sendchar(uchar idata ch) {
ES=0;
SBUF=ch;
while(TI==0);
TI=0;
ES=1;
}
void sendstring(uchar*p)
{
while(*p)
{
sendchar(*p);
p++;
}
sendchar(0x0D);
sendchar(0x0A);
}
void receive(void) interrupt 4 using 1// promote {
if(RI)
{
if(Rx { SystemBuf[Rx]=SBUF; Rx++; } RI=0; } } void clearbuffer(void)//清除缓冲区 { uchar idata num; for(num=RxIn;num>0;num--) { SystemBuf[num]=0x00; } Rx=0; } void GSM_INIT(void) { LOOP: delay_ms(1000); sendstring("ATE");//关闭回显 delay_ms(1000); sendstring("AT+CNMI=2,1"); //接到短信后直接通过串口发给MCU delay_ms(1000); sendstring("AT+CSCA=+86138********"); delay_ms(1000); clearbuffer(); sendstring("AT+CMGF=1"); delay_ms(1000); if((SystemBuf[2]=='O')&&(SystemBuf[3]=='K')) { clearbuffer(); } else { clearbuffer(); goto LOOP; } } void receive_ready(void) { if((SystemBuf[5]=='T')&&(SystemBuf[6]=='I'))//T I 0x54 0x49 { receiveready=1; } { clearbuffer(); } } void sendyready(void) { if((sendready==1)&&(SystemBuf[5]=='G')&&(SystemBuf[6]==' R')) { send=1; } sendready=0; } void read_message() { uchar i; delay_ms(1000); for(i=0;i<2;i++)// 收到的短信提示 +CMTI SM,10 第14 15个byte { // 0D 0A 2B 43 4D 54 49 3A 20 22 53 4D 22 2C 31 30 0D 0A numberbuf1[i]=SystemBuf[14+i];// 14 15 } for(i=0;i<8;i++) { AT_Read[i]=AT_CMGR[i]; } for(i=8;i<10;i++) { AT_Read[i]=numberbuf1[i-8]; clearbuffer(); sendstring(AT_Read); delay_ms(1000); } void sendmessage(bit idata sta) { uchar i; for(i=0;i<8;i++) { AT_SendNumber[i]=AT_CMGS[i]; } for(i=8;i<24;i++) { AT_SendNumber[i]=SystemBuf[14+i]; } sendstring(AT_SendNumber); delay_ms(1500); if(sta)//电机开着 { sendstring(open_state); } else { sendstring(close_state); } delay_ms(1000); sendchar(0X1A); } void delete_mess(uchar number) //num 0--99 { uchar idata i,shi,ge; number=number%100; shi=number/10; ge=number%10; for(i=0;i<11;i++) { AT_D[i]=0x00; } for(i=0;i<8;i++)// 在数组AT_SendNumber[]内加上“AT+CMGD”= { AT_D[i]=AT_CMGD[i]; } AT_D[8]=num[shi]; AT_D[9]=num[ge]; sendstring(AT_D); delay_ms(5000); } void main() { uchar idata d=51; uchar idata receive; motorcontrol=0; Start_GSM(); //delay_ms(10000); UART_init(); GSM_INIT(); LCD_init(); LCD_clear(); while(1) { //删除短信/* while(1) { delete_mess(d--); if(d==0) d=51; delay_ms(1000); }*/ receive_ready(); if(receiveready==1) { read_message(); receiveready=0; sendready=1; message[0]=SystemBuf[64];//取出短信内容 receive=message[0]-48; } delay_ms(300); sendyready(); if(send==1) { delay_ms(3000); //s_byte=P2;//发送P2口拨码开关状态 30--0 motorstate=motor_state; switch (receive) { case 0 : { motorcontrol=0; sendmessage(0); break; } case 1 : { motorcontrol=1; sendmessage(1); break; } case 9 : { sendmessage(motorstate); break; } } clearbuffer(); send=0; delay_ms(2000); LCD_shuzi(1,1,receive); } } } 7.调试时出现的问题以及改进方案: 硬件: 1、在设计模块电源部分时,最初了想法是,过7805,得到5V,然后做2576,得到4.2V。这也在硬件上面实现了,但是由于7805先天的缺陷,电流只支持到1.5A左右,而TC35i在刚登录网络和接打电话是的峰值电流可以达到2A,这样TC35i模块 2、RXD0 TXD0 和正常的理解不同,刚开始没有看tc35i的PDF,直接和单片机交叉连接了。由于这个原因,我一直在找单片机串口和TC35i的接口问题,一度以为是两者接口电平不兼容造成单片机不能和模块通信。试过加上拉电阻,