摘要:介绍一种由OKI公司推出的FSK调制解调芯片MSM7512B。它可用于内置式Modem、数据传输系统,家庭安防系统等场合。本文着重介绍其功能特点、工作原理及其在电力线通信中的应用,并给出点对点通信的C51程序。
关键词:移频键按(FSK) 调制/解调 电力线 C51编程
一、芯片特点及引脚说明
1.特点
MSM7512B是OKI公司推出的1200bps半双工FSK Modem芯片,采用16脚双立直插塑封或24脚扁平封装,具有如下特点:
*单电源(3~5V)供电,提供掉电工作方式;
*低功耗CMOS电路(工作模式功耗典型值为25mW,掉电模式功耗低达0.1mW);
*FSK移频键控,符合ITU-TV.23标准,1200bps半双工;
*模拟输出可直接驱动600Ω通信电路;
*片内回音消除电路;
*使用3.579545MHz晶振;
*外围电路简单。
2.引脚说明
芯片MSM7512B(16DIP)的引脚排列如图1所示,引脚说明见表1。表1中打星号的引脚内部均具有上拉电阻。
表1 MSM7512B引脚说明
引脚号 | 名称 | I/O | 说 明 | |
RS | GS-K | |||
1 | 1 | VDD | - | +3-+5V电源 |
2 | 3 | AI | I | 模拟接收信号输入 |
3 | 5 | AO | O | 模拟送信号输出 |
4 | 6 | EAI | I | 外部模拟信号输出。此脚上的信号通过送输出放大器从AO脚发送出去。不此脚时,它应该被悬空 |
5 | 7 | GND | 地,0V | |
6 | 8 | X1 | I | 3.57954M H晶体谐振器应连至X1和X2。当器件采用3.579545MHz外部时钟时,它应通过1个100pF的AC耦合电容加至X2(而非X1),且X1应该悬空 |
7 | 10 | X2 | O | |
8 | 12 | CLK | O | 3.579545MH时钟信号输出 |
9 | 13 | RD | O | Modem接收串行数据输出。数字“1”和“0”分别对应“Mark”和“Space”。当CD(载波检测)关断时,RD被保持在“Mark”状态 |
10 | 15 | CD | O | FSK接收信号和应答信号控制。数字“0”和“1”分别表示“检测到”和“未检测到” |
11 | 17 | XD | I* | Modem发送串行数据输入。数字“0”和“1”分别对应“Mark”和“Space” |
12 | 18 | RS | I* | FSK信号和应答信号发送使能脚。当数字“0”加至RS时,被使能 |
13 | 19 | TEST | I* | 芯片测试输入。TEST应为开路或数字“1” |
14 | 20 | MOD1 | I* | 工作模式选择。参见表2 |
15 | 22 | MOD2 | I* | |
16 | 24 | AOG | I* | 模拟发送信号幅度选择:数字“1”--10dBm(典型值,AO脚);数字“0”--4dBm(典型值,AO脚) |
二、MSP7512B的工作原理
MSM7512B的内部结构如图2所示。
MSM7512B主要由输入/输出回路、FSK调制/解调器、晶体振荡以及控制器组成。其中MOD1、MOD2控制MSM7512B的工作模式,即调制/解调/掉电。工作模式如表2所列。
表2 工作模式
MOD | MOD |
模 式 |
0 | 0 | FSK发送模式(图3) |
0 | 1 | FSK接收及75bps发送模式(图4) |
1 | 0 | 模拟环路返回测试模式(图5) |
1 | 1 | 掉电模式 |
当MOD2=0、MOD1=0时,MSM7512B工作于调制方式。XD输入值为“0”、“1”的数字调制信号,AO对应输出频率为2100Hz、1300Hz的FM模拟信号。RS是模拟信号输出的使能控制端。芯片的内部连线如图3所示。
当MOD2=1、MOD1=0时,MSM7512B工作于模拟环路返回测试模式。芯片的内部连线如图5所示。
当MOD2=1、MOD1=1,MSM7512B工作于掉电方式,此时MSM7512B功耗仅0.1mW,其它方式一般功耗为25mW。
三、MSM7512B在电力线通信中的应用
在电力线上实现数据通信,人们进行了很多尝试。电力线作为一种通信传输介质,具有可变信号衰减、阻抗调制、脉冲噪声以及等幅振荡波干扰等不利数据传输的特性。为了排除这些干扰,目前利用电力线进行通信的产品有很多,通信质量和距离各有差异。这里介绍的是利用FSK调制解调芯片MSM7512B来实现的一种点对点通信方式。这种传输方法是隔离(变压器隔离方式)的。当通信距离较远时,可用MSM7512B替代隔离的RS-485接口芯片。它具有抗干扰能力强、误码率低、可靠性高、投资少、建设方便等优点,同时也存在着数据传输速度低(只能达到1200bps),在通信距离变得很远时误码率有所增高的缺点。这种基于MSM7512B来实现电力线通信已经在智能小区数据通信的实践应用中取得了良好的使用效果。图6是其实际电路原理图。
从图6可以看出,由U3、U4、U5以及外围的电阻、电容构成接口电路,完成电平调整和阻抗变换功能。电力线采用的是600 Ω平衡输入/输出,通过600 Ω 1:1变压器完成不平衡到平衡的电路转换。U3、U4、U5采用高速运放NE5534,以提高转换速率,提高动态响应。U5跟随器,完成阻抗变换、输入/输出隔离以及提高负载能力。U3、U4完成接收、发送信号的放大。通过调整W1和W2来实现电路增益的调整。发送除了硬件调整外,还可以通过程序设定AOG端口0或1状态达到配合硬件调整发送电平的目的。
单片机采用的是由ATMEL公司推出一种小型单片机AT89C2051。它具有Flash存储器、成本低、与MCS-51完全兼容、可多次电可擦写编程等特点。AT89C2051与MSM7512B的连接如图6所示。它们之间的通信方式采用8位异步通信模式。波特率为1200baud,fosc=11.0596MHz,T1工作在定时器模式2,TH1=TL1=0E8H,PCON寄存器的SMOD位为0,传送的数据采用ASCII码格式。下面给出双机点对点通信程序。假定A机为发送者,B机为接收者。可在函数中根据程序的发送、接收设置TR,采用条件判别决定使用发送函数还是接收函数,这样点对点通信的双方都可以运行此程序,只需在程序运行之前进行人为设置选择TR(一个为0,另一个为1),然后分别编译,在两个机器上分别装入,同时运行。
用C51语言编写的点对点通信程序p_pcom.c如下:
#include
#define uchar unsigned char
#define TR 1 /*发送接收差别值TR=0发送*/
sbit AOG=P1^0;
sbit MOD1=P1^2;
sbit MOD2=P1^1;
sbi TEST=P1^3;
sbit CD=P3^7;
sbit RS=P1^4; /*定义位寻址的对象位*/
uchar idata buff[16]; /*数据块长度为16个字节*/
uchar check_sum; /*定义校验和变量*/
void InitSerialPort(void){ /*串行口初始化函数*/
TMOD=0x20; /*设置定时器1为模式/2*/
TH1=0xe8;
TL1=0xe8; /*设波特率为1200baud*/
PCON=0x00;
TR1=1; /*启动定时器1*/
SCON=0x50; /*设置串行口为模式1,并允许接收*/
}
void SetMSM7512B(uchar st){ /*设置收发状态*/
if(st= =0) {
MOD1=0;
MOD2=0; /*发送模式*/
TEST=1;
TS=0; /*发送使能*/
AOG=0; /*发送信号幅度选择-4dBm*/
}
else{
MOD1=1;
MOD2=0; /*接收模式*/
TEST=1;
}
}
A机发送程序
void SendData(uchar idata *dat){
uchar i;
do{
SBUF=0xaa; /*发送联络信号“AA”*/
while(TI= =0); /*等待发送出去*/
TI=0; /*清TI标志,允许再发送*/
while(RI= =0) /*等待B机回答*/
RI=0;
}while((SBUF^0xbb)!=0) /*B机未准备好,继续联络*/
check_sum=0; /*清校验和*/
for(i=0;i<16;i+ +){
SBUF=dat[i];/*求校验和*/
while(TI= =0);TI=0;
}
SBUT=check_sum; /*发送校验和*/
while(TI= =0);TI=0;
while(RI= =0);RI=0; /*等待B机应答*/
}while(SBUF!=0); /*回答出错,则重发*/
}
B机接收程序
void ReceiveData(uchar idata *dat){
uchar i;
do{
while(RI= =0); RI=0;
}while((SBUF^0xaa)!=0); /*判A机请求否*/
SBUF=0xbb;
While(TI= =0);TI=0;
while(1){
check_sum=0; /*清校验和*/
for(i=0;i<16;i+ +){
while(RI= =0);RI=0;
dat(i)=SBUF; /*接收一个数据*/
check_sum+=dat[i];/*求校验和*/
}
while(RI= =0);RI=0; /*接收A机校验和*/
if(SBUF^check_sum)= =0){/*比较校验和*/
SBUF=0x00;breadk;} /*校验和相同发“00”*/
else{
SBUF=0xff; /*出错发“FF”,重新接收*/
While(TI= =0);TI=0;
}
}
}
void main(void){
InitSerialPort();
if(TR= =0){
SetMSM7512B(0); /*设置为发送状态*/
SendData(buff);
}
else{
SetMSM7512B(1); /*设置为接收状态*/
ReceiveData(buff);
}
}
上一篇:RS-485总线的死锁检测与解除
下一篇:用WindowsAPI设计多线程的串行通信ActiveX控件
- 热门资源推荐
- 热门放大器推荐
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况