工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->综合电路图->综合电路图->基于TC35i 的PC机短信息收发模块

基于TC35i 的PC机短信息收发模块

作者:dolphin时间:2011-05-11

短信息服务作为GSM 系统为用户提供的一种基本数字业务,已经得到越来越多的系统运营商和系统开发商的重视,成为诸多领域远程监控的一种通信手段,很多应用场合需要通过PC直接控制短信息收发功能,完成系统的数据采集或远程信息传输,在一些偏远架设通信线路比较困难的地区,尤其需要用户直接通过PC控制短信息的远程传输。
本文通过介绍西门子公司TC35i GSM 的PC机短信息收发模块,详细阐述TC35i和PC之间的硬件连接及部分接口电路原理,PC通过软件编程利用AT指令控制模块工作,实现短信息的收发功能。该模块可应用于多个领域的远程信息传输系统,特别适用于需频繁传送小数据量的远程信息传输系统,如铁路远程信息传输、电力远程抄表和水利远程监控等领域。

硬件设计
针对TC35i模块与PC连接的电源接口、通信接口和控制接口等接口存在的一些问题,采取有效的方法实现两者硬件电路的连接,TC35i模块安装在PC内部,由PC电源供电,同时通过PC串行口实现数据交换,再经软件编程实现模块启动、关闭的收发功能。
TC35i模块TC35i模块是西门子公司推出的一种无线通信模块,它是集射频电路、基带于一体,向用户提供标准的AT命令接口,为数据、语音、短信息和传真提供快速、可靠、安全的传输,方便用户的开发设计及应用。
TC35i模块应用接口采用40脚的Zip插座,包含的引脚功能有:3.3~5.5V、峰值为2A的直流电源接口,模拟音频输入、输出接口,8个引脚的标准RS232信号接口,6个引脚符合GSM11.11标准的SIM 卡连接、控制接口。本文应用4个接口,电源接口、控制接口、串行通信接口及SIM卡连接接口。

系统结构
系统结构图如图1所示,为增强系统的灵活性,TC35i模块直接由PC内部5V电源供电,PC与TC35i模块通过串行通讯的RxD、TxD和地线三线制完成通讯,串行通讯的DTR和RTS接口与TC35i模块的控制接口连接,实现PC通过软件对短信息收发模块的控制和数据交换。


电源接口电路
电源接口电路如图2所示,除提供整个模块的5V工作电压外,最主要的是为TC35i模块提供工作电压。

TC35i模块工作电压为3.3~5 V,稳定工作电压4.4V左右,在启动连接登陆网络的传输过程中要求电源能提供2 A的峰值电流、不大于400 mV的压降,因为在数据传输过程中当电压的波动大于400 mV时,TC35i模块认为工作电压过低而自动关闭TC35i模块,因此在设计TC35i模块的电源时必须考虑电压下降的可能性,保证最小电压高于4V。PC直流输出电压通过比较电路与基准电压进行比较,误差电压由通/断时间比例控制电路调整直流输出电压,线路滤波器防止交流信号噪声输入,抑制电源内部产生的反馈噪声。控制接口电路
控制接口电路的目的是利用PC串行通讯的DTR和RTS信号线分别控制TC35i模块IGT点火线和EMERG0FF强制关闭线,实现PC对TC35i模块的启动和关闭控制。启动TC35i模块时,为使TC35i模块上电10ms后(供电电压必须大于4V)正常工作,须在IGT引脚加时长至少为100ms的低电平信号,该信号下降沿时间小于1ms,启动后IGT引脚的信号保持高电平;关闭TC35i模块时,须在EMERG0FF引脚加一个时长至少为3.2s的低电平信号。
一般设计中,上述延时直接通过PC机软件编程即可实现整个模块的启动和关闭控制,但在实际设计过程中发现,PC启动过程中DTR引脚和RTS引脚存在一个约4s左右的波动,波形图如图3所示,如果该波动不滤除,将会引起TC35i模块的非正常启动,本接口电路采用RC延时电路和施密特触发器滤除该波动信号,部分控制接口电路如图4所示。



数据通信接口电路
数据通信接口电路完成短信息收发及与PC通信等功能,TC35i模块与PC串行口使用简单的三线制进行数据交换。因PC的RS232接口和TC35i模块串行接口的电平规范不同,本文使用简单的施密特触发器、稳压管和电阻实现RxD和TxD电平转换,电路如图5所示。

软件设计
通过VC++6.0语言实现软件编程,PC首先通过编程打开与TC35i模块相连的串行口,然后通过此串行口向模块发送各种AT指令,实现对TC35i模块的控制,完成短信息收发功能。
串行口初始化在Windows环境下,常用编程实现串行口操作的方法除利用MSComm控件和某些现成的串行口通信外,还可以直接调用Windows API实现,程序如(程序1):
(程序1)
HANDLE hComm; //串行口设备控制
BOOL OpenComm (const char* pPort,int nBaudRate,int nParity,int nByteSize,int nStopBits)
{
DCB dcb; //串行口控制块
COMMTIMEOUTS timeouts={//串行口超时控制参数
100,//读字符间隔超时时间:100 ms
1,//读操作时每字符的时间:1 ms
500,//基本的(额外的)读超时时间:500 ms
1,//写操作时每字符的时间:1 ms
100}; //基本的(额外的)写超时时间:100 ms
hComm=CreateFile(pPort //串行口名称或设备路径
GENERIC_READ | GENERIC_WRITE,//读写方式
0, //共享方式:独占
NULL, //默认的安全描述符
OPEN_EXISTING,//创建方式
0,//不需设置文件属性
NULL); //不需参照模板文件
if(hComm == INVALID_HANDLE_VALUE) return FALSE;//打开串行口失败
GetCommState(hComm,&dcb); //取DCB
dcb.BaudRate= nBaudRate;
dcb.ByteSize=nByteSize;
dcb.Parity=nParity;



评论

技术专区