一、芯片特色及引脚阐明
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=0、MOD1=1时,MSM7512B作业于解调办法。AI的输入频率为2100Hz、1300Hz的FM模仿信号,RD对应输出解调后的“0”、“1”数字信号。CD是输入检测的指示端。芯片的内连线如图4所示。
当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机未准备好,持续联络*/
do{
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);
}
}