文档库 最新最全的文档下载
当前位置:文档库 › 基与BH1415的调频发射机

基与BH1415的调频发射机

数控调频发射器的设计

9.1 功能要求

数控调频发射器可在80.0 MHZ至109.9MHZ范围内任意设置发射频率,可预置13个频道,发射频率调整最小值为0.1MHZ,具有单声道/立体声控制,发射距离在20米至50米范围内,可应用于学校室内无线广播教学、电视现场导播等场所。

9.2 方案论证

为了实现调频中心频率的控制,决定采用Rohm公司生产的调频发射专用集成电路BH1415F,内含立体声信号调制、调频广播信号发射电路,BH1415F内有前置补偿电路、限制器电路、低通滤波电路等,因此具有良好的音色,内置PLL系统调频发射电路,传输频率非常稳定,并且调频发射频率可用单片机通过串行口进行控制。控制器采用ATMEL公司的AT89C52,32个端口可满足四位LED动态显示、16(4×4)个操作按键的设计需要。系统实现的框架构成如图9.1。

图9.1 数控调频发射器系统构成框图

9.3 系统硬件电路的设计

(1)单片机控制电路

单片机控制部分电路如图9.2,采用AT89C52单片机最小化应用系统设计。P0口和P2口作为共阳LED数码管驱动用,P1口作为16键的键盘接口,其中T0为加0.1MHZ键,T1为减0.1MHZ键,T2为单声道/立体声控制键,其余13个为频率数据预置键。P3.0、P3.1、P3.2三端口作为与BH1415F的通讯端口,用于传送发射频率控制数据,P3.3口用于立体声发射批示。使用12MHZ晶振,串口通讯。LED采用共阳数码管,用软件动态扫描实现发射频率的显示。

131

图9.2 数控调频发射器主控制器电路图

(2)调频调制电路

BH1415F各引脚的功能如表9.1,应用电路如图9.3。在11脚的输出口接上约0.5米的天线,在10米的范围内用调频收音机就可收到清晰的调频广播。如要增大发射距离可在后面加一级调频放大电路,在一般情况下仅用一级晶体管放大就可达到达50米以上的传播距离。

132

图9.3 BH1415F典型应用电路

(3)电源电路

采用单片机控制的数字调频器功耗很小,可用7805三端稳压块分别对单片机和BH1415F 电路单独供电,电源变压器功率大于10W即可。集成块电源脚应就近接0.1μF的瓷片电容。

9.4系统程序的设计

133

134

(1)主函数

主函数先对系统初始化,开机时先显示一下“8888”,以检查LED 的段码,然后预置发射频率为100MHZ ,送入BH1415,最后进入查键和显示函数的循环。主函数程序流程图如图9.4。

(2)延时子函数

延时函数在本系统中主要用于1毫秒和2秒钟的显示延时。 (3)LED 动态扫描子函数

扫描函数使用单片机的两个端口,一个端口输出段码,一个端口进行列扫描,以实现LED 的动态显示。扫描函数执行一次约为4ms ,在第二位LED 显示时点亮小数点。其程序流程图如图9.5。

(4)频率数据转十进制BCD 码子函数

频率数据转十进制BCD 码子函数用于将四位十进制数换算成四个十进制BCD 码分别用于显示,当最高位为0时放入“熄灭”代码0x0a ,这样当频率在99.9MHZ 以下时最高位不为显示“0”。

(5)控制命令合成子函数

BH1415F 的频率控制字为二个字节(如图9.6)。二个字节中低11位(D0—D10)为频率

图9.4 系统主函数流程图

图9.5 动态扫描子函数流程图

数据,其值乘0.1即为BH1415F的输出频率(单位MHZ)。高5位(D11—D15)为控制位。其中D11(MONO)位为单声道/立体声控制位,0时为单声道发射模式,1时为立体声发射模式。D12(PD0)、D13(PD1)位用于相位控制,通常为0,当分别为01和10时可使发射频率在最低和最高处。D14(T0)和D15(T1)为测试模式控制用,通常为00,当为10时为测试模式。合成时将控制命令(5位)与数据的最高三位合成一个字节。

图9.6 BH1415F的频率控制字及传送格式

(6)BH1415F字节写入子函数

按照BH1415F字节传送要求,按低位先送、低字节先送的原则。传送的延时应精确,在延时中用了_nop_()库函数,程序流程图如图9.7。

(7)查键子函数

系统采用4*4行列式键盘。查键方法是将键盘口的低四位置0,读入键盘口高四位,看是否为全1,若全为1,说明无按键按下,否则说明有键按下,应进行键码的查询。查询方法是依次对键盘口的低四位和高四位置0,再将二次读入的高四位和低四位合成一个字节,这个字节与每个按键有着唯一的对应关系,通过查对进行每一个按键的功能执行。查键子函数的程序流程图如图9.8。

135

136

9.5 调试及性能分析

9.5.1 硬件调试

硬件调试时可先检查印制板及焊接的质量情况,在检查无误后可通电检查。实验室制作时可结合示波器测试晶振及P0、P1、P2端口的波形情况进行综合硬件测试分析。 9.5.2 软件调试

软件调试用keil c51编译器,源程序编译及仿真调试应分段或以子函数为单位一个一个进行,最后可结合硬件实时运行调试。 9.5.3 发射频率的调试

在调通程序及硬件的情况下,调频发射器应基本能工作。在BH1415F 的11脚接上一段电线作发射天线,在室内应能收到调频广播了。当发现频率的最高端上不去(达不到109.9MHZ )时,应将振荡电感减小(减少匝数),而在低端的频率达不到时(80.0MHZ )应增加振荡电感的匝数。电感调整后还是没有达到频率覆盖范围时应考虑更换变容二极管(换变容范围更大的)

。振荡电感调整后应用蜡封好,防止发射器工作时因振动而产生频率漂移。 9.5.4性能分析

用BH1415F 设计的小功率调频发射器不仅设计简单,而且频率设定灵活,可有效地避开当地的调频台干扰,可应用于室内广播、电视伴音转发等小范围的无线调频转播。因为发射的频率变化范围较大,其功率放大级没有设计选频回路,因此工作时功率管较热,与市场上的单点调频发射器相比,发射效率不是很高。 9.6 控制源程序清单

图9.7 8位数据发送子程序流程图

图9.8 4*4行列式查键序流程图

以下是数控调频控制器C源程序清单:

/*********************************************************************/

// BH1415F调频台控制C程序

// 使用keil C51

// 2005.3.16通过调试

/*********************************************************************/

//使用AT89C52单片机,12MHZ晶振,用共阳四位LED数码管

//P0口输出段码,P2口扫描

//#pragma src(d:\aa.asm)

#include "reg52.h"

#include "intrins.h" //_nop_();延时函数用

#define Disdata P0 //段码输出口

#define discan P2 //扫描口

#define keyio P1 //键盘接口

#define uchar unsigned char

#define uint unsigned int

sbit DA=P3^0; //数据输出

sbit CK=P3^1; //时钟

sbit CE=P3^2; //片选

sbit DIN=P0^7; //LED小数点控制

sbit monolamp=P3^3; //立体声指示灯

uint h; //延时参量

//

//扫描段码表

uchar code dis_7[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};

/* 共阳LED段码表 "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-" */ uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; // 列扫描控制字

uint data f_data={0x00},f_data1; // 频率数据,数据运算时暂存用

uchar data display[4]={0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据

uchar bdata condata=0x08; //1415控制字高5位,开机为立体声状态

sbit mono=condata^3; //单声道/立体声控制位

uchar data concommand[2],keytemp; //合成后的2个控制字,键值存放

//

/**********************************************************************/

//

//

/***********11微秒延时函数**********/

//

void delay(uint t)

{

for(;t>0;t--);

}

//

/***********LED显示动态扫描函数**********/

137

scan()

{

char k;

for(k=0;k<4;k++) //四位LED扫描控制

{

Disdata=dis_7[display[k]];

if(k==1){DIN=0;}

discan=scan_con[k];delay(90);discan=0xff;

}

}

//

//

/***********频率数据转换为显示用BCD码函数**********/

turn_bcd()

{

display[3]=f_data/1000;if(display[3]==0){display[3]=10;}//最高位为0时不显示

f_data1=f_data%1000;

display[2]=f_data1/100;//求显示十位数

f_data1=f_data1%100;

display[1]=f_data1/10; //求显示个位数

display[0]=f_data1%10; //求显示小数位

}

/***********控制字合成函数**********/

command()

{

concommand[1]=f_data/256;

concommand[0]=f_data%256;

concommand[1]=concommand[1]+condata;

}

/***********写入1个字节函数**********/

write(uchar val)

{

uchar i;

CE=1;

for(i=8;i>0;i--)

{

DA=val&0x01;//

_nop_();_nop_();_nop_();_nop_();

CK=1;

_nop_();_nop_();_nop_();_nop_();

CK=0;

val=val/2;

}

CE=0;

138

}

/***********控制字写入1415函数**********/

w_1415()

{

write(concommand[0]);

write(concommand[1]);

}

//

//*************频率涮新*****************//

fup()

{

turn_bcd(); //显示BCD码转换

command(); //合成控制字

w_1415(); //写入1415

}

//

/***********查键函数**********/

read_key()

{

keyio=0xf0;

keytemp=(~keyio)&0xf0;

if(keytemp!=0)

{

keytemp=keyio;

keyio=0x0f;

keytemp=keytemp|keyio;

while(((~keyio)&0x0f)!=0); //

switch(keytemp)

{

case 238:{f_data++;if(f_data>1099){f_data=1099;}fup();break;}//加0.1MHZ

case 222:{f_data--;if(f_data<800){f_data=800;}fup();break;} //减0.1MHZ

case 190:{mono=~mono;if(mono){monolamp=0;}else monolamp=1;fup();break;}//立体声/单声道转换case 126:{f_data=1090;fup();break;}//预置109.0MHZ

case 237:{f_data=1070;fup();break;}//预置107.0MHZ

case 221:{f_data=1050;fup();break;}//预置105.0MHZ

case 189:{f_data=1030;fup();break;}//预置103.0MHZ

case 125:{f_data=1000;fup();break;}//预置100.0MHZ

case 235:{f_data=970;fup();break;}//预置97.0MHZ

case 219:{f_data=950;fup();break;}//预置95.0MHZ

case 187:{f_data=930;fup();break;}//预置93.0MHZ

case 123:{f_data=900;fup();break;}//预置90.0MHZ

case 231:{f_data=870;fup();break;}//预置87.0MHZ

case 215:{f_data=850;fup();break;}//预置85.0MHZ

case 183:{f_data=830;fup();break;}//预置83.0MHZ

139

case 119:{f_data=800;fup();break;}//预置80.0MHZ

default:{break;}//

}

}

keyio=0xff;

}

//

//

//

/**************主函数****************/

main()

{

Disdata=0xff; //初始化端口

discan=0xff;

keyio=0xff;

DA=0; //bh1415禁止

CK=0; //

CE=0; //

for(h=0;h<4;h++){display[h]=8;}//开机显示"8888"

for(h=0;h<500;h++)

{scan();} //开机显示"8888"2秒

f_data=1000; //预置1000MHZ

monolamp=0; //开机立体声灯点亮

fup(); //频率送入BH1415

while(1)

{

read_key(); //查键按纽

scan(); //显示4ms

}

}

//

140

相关文档