基于STC89C52RC 和DAC0832 的音频平衡系统设计

2023-06-07 05:47卢玮
电子制作 2023年9期
关键词:检波寄存器差分

卢玮

(国家广播电视总局723台,河北石家庄,050408)

0 绪论

我单位的发射机房负责广播节目的发射传输,并且要对传输效果监听监测。目前使用的是20 多年前的老设备,其原理是从平转取样模拟信号,将其通过75 欧的射频电缆传送到调幅度测试仪。经过一系列转化后送到功放音箱,进行监测。该方法有2 个弊端,第一,无法循环切换通道,我机房有6 部发射机,每一部发射机都要监听,这就需要值班人员不停的手动切换,增加了值班的工作量;第二,不同的发射机送来的音频信号,其音量大小不一,声音忽大忽小,给值班员的监听造成困扰。鉴于以上原因,我机房计划开发一套数字式音频监听系统,平衡各个发射机的音频输出信号,改善监听效果。

1 硬件设计原理

在本方案中,系统有以下几部分组成。采样、差分放大、检波、八选一、模数转换、算法补偿、数模转换、音频监听,如图1 所示。

图1 系统基本结构

■1.1 采样

在采样时,使用1 个真空电容加在平转的输出端,通过电容耦合来将大电流大电压的包络信号采集出来,之后送到差分放大电路。

■1.2 差分放大

在这个环节,电路使用了2 个放大器,做成前后两级,每一级都是用数个电阻和比较器组成放大电路。具体电路图如图2 所示。

图2 差分放大电路第一级

第一级的作用是消除共模干扰,从平转到差分电路之间的信号线容易受到包括气压、温度、湿度等因素的干扰。它是由1 个比较器S1 和4 个电阻R1,R2,R3,R4 还有2个电容C1,C2 搭配组成了减法器电路,将电缆芯和外层包裹的地线都存在的干扰信号一同减掉,这样就得到干净的信号。在图1 中,比较器S1 接±15V 电源,这两个电源通过电容C1,C2 接地,目的是消除电源中的交流毛刺。根据比较器虚短虚断的原理,在电路中U3=U4,经过R1 的电流不会流入比较器的引进2,而是全部流向R3。流过电阻R2 的电流不会进入比较器的引进3,而是全部流向R4,进而流入地。因此可以得到两个公式:。在选择电阻的阻值时,取R1=R2=R3=R4,则这两个公式可变成,又由于U3=U4,得到U5=U2-U1。这样电压U5 的值就是两个输入端口的差值,这样就消除了共模干扰。之后,信号被送至第二级,电路图见图3。

图3 差分放大电路第二级

在第二级电路中,R8,R9,R10,R11 组成调零电路。在电路使用时,首先进行调零操作。将第一级的两个输入端短接,即U5=U2-U1=0,这时候测量第二级的输出电压U7是否为0。如果不为零,则调整R10,使得U7 变成0。

对于放大功能,主要是通过R6,R7,R13 来实现的。根据虚短虚断的关系可得:,令R5+R6=R7,得到U5-U6=U6,U5=2U6。而可得。则,这样就确定了差分放大电路输入与输出之间的关系。输出信号被送往检波电路进行检波处理。

■1.3 检波

检波也称为解调,是调制的逆过程,即从已调波中提取出调制信号的过程。由于我机房安装的是调幅发射机,一次需要从调幅度中提取调制信号,也叫包络检波。这里的调制信号即收听的音频信号,高频信号是载波信号。

本方案中,我们使用二极管检波器,其原理如图4 所示。

图4 检波原理

在图4 中,二极管VD1 是负责检波的主要工作,C1 是滤波电容,把信号里面的高频载波成分出去,电阻R1 是检波电路的负载电阻,电容C2 是耦合作用,将信号里面的直流成分去除,在输出端得到一个频率较低的音频信号。工作的时候,调制信号加到该电路的输入端,即二极管VD1 的正极,VD1 的工作原理和整流二极管基本上一样,利用信号的幅度变化控制二极管的导通与截止,最后得到音频信号。

■1.4 八选一

在检波电路输出了音频信号后,送入八选一电路。因为我们部门的发射机有6 台,都要进行监听,为了节省成本,使用8 选1 电路。主要的芯片是CD4051。这是一个单刀8掷开关。他的基本作用是从前级送来的最多8 路模拟信号,在每一时刻只有一路可以被CD4051 选择输出到后级,其余的7 路被阻止。CD4051 芯片的引脚有16 个,其中包括8 路模拟量输入端口,VDD 电源端口,3 个地址选择端口,数字信号接地端口,INH 禁止端口,VEE 负电压端口,公共输出端口。

8 路输入端口接的是需要传输的音频信号,3 个地址选择端口,通过二进制组合来分成8 个不同的地址号,分别与8 路输入对应。这3 个端口与单片机的3 个IO 口相连接,由单片机对地址进行选择控制,决定哪一路模拟端口被打开使其音频信号流通。VDD 电源端口外接5 伏直流电压,为芯片供电。INH 禁止端口决定着芯片能否正常工作,当给INH 高电平的时候,芯片不工作,8 个输入通道的信号都无法向后级输出,只有INH 是低电平的时候,才可以输出。因此这个端口可以作为片选信号来使用。在编程的时候,如果使用了数据总线的模式,可以将该口作为片选信号来编程。接地端外接电路的地信号。VEE 是一个电平位移口,使得芯片可以传输最大峰峰值为VDD+VEE 的交流信号。公共输出端口将8 路输入信号里面的某一路输出到下一级。

■1.5 模数转换

本方案里面的模数转换是使用单片机控制MAX187 芯片来实现。MAX187 是1 个12 位精度的模数转换芯片,它使用了采样/保持电路,逐次比较寄存器,使用高速3 线的串行通信接口。只需要3 根通讯线SCLK,CS,DOUT 与单片机相连就能够实现控制和数字结果的传送。

MAX187 有8 个引脚。其中引脚1 外接5V 电源,为芯片供电。引脚2 是模拟信号输入端,信号的大小范围是0-VREF。引脚3 是/SHDN,操作模式的选择,外接高电平时可以正常工作。VREF 是参考电压,一般使用其内部参考电压4.096V,这个引脚外接一个4.7μF 的电容后接地。引脚5 是地信号。引脚6 是数据输出,将模数转换的12 位数字量经次引脚送给单片机。引脚7 是片选信号/CS,与单片机相连作为本芯片的是否工作的控制信号。引脚8 是时钟信号SCLK,与单片机相连,由单片机为芯片提供时钟信号,最高为5MHz。

MAX187、CD4051 与单片机的接线如图5 所示。

图5 MAX187、CD4051 与单片机的接线图

在图5 里面,单片机的P10,P11,P12 连接CD4051 的3 个地址端口A1,A1,A2。P13,P14,P15 连接MAX187 的/CS,SCLK,DOUT3 个信号线。具体的编程在下一节会讲解。

■1.6 数据处理

当数字式音频信号进入单片机之后,单片机对数据进行计算处理。在本方案里面使用了STC89C52RC 型号的51 单片机。它的引脚VD 外接5V 电源,XTAL1 和XTAL2 与外部晶振、电容组成晶振电路。引脚9 外接1 个按钮、电解电容、电阻,再接地,组成复位电路。本方案里面,单片机要实现以下几个功能:第一,控制CD4051 的8 路模拟量输入,在每一时刻只有1 路可以输出。第二,控制MAX187 芯片对模拟信号进行模数转换,并将转换结果接收。第三,对数字信号进行运算。当音频信号的音量较低时,通过算法补偿将其增大,反之将其减小,使其保持在一个相对稳定的音量上。第四,将补偿后平稳的音频信号传输给DAC0832 芯片进行数模转换。具体的代码讲解见后面。

■1.7 数模转换

本方案使用DAC0832 芯片进行数模转换操作。他是1个8 位的数模转换芯片,在内部含有2 个寄存器:输入寄存器和DAC 寄存器,是前后2 级的关系。有16 个引脚。DI0~DI7 是数字量数据的输入端口,单片机把数据从这8 个端口送进DAC0832。CS 是片选信号,与单片机相连,由单片机控制其是否工作。ILE 是输入寄存器的允许通过信号,高电平有效。/CS 是片选信号,/WR1 是第一个寄存器的写命令信号,他俩是低电平有效。以上3 个信号组成逻辑电路,决定着输入寄存器的工作状态。XREF 是数据传送控制信号,和/WR2 一起组成电路,控制DAC 寄存器的输入信号能否被输出。IOUT1 和IOUT2是两个模拟量输出端口,输出电流为I1 和12,他们的和是一个常数。当输入数据的8 位全 部 是1 的 时 候,IOUT1 的输出电流最大,IOUT2 的输出电流最小;当输入数据的8 位全部是0 的时候,正好相反。RFB 是负反馈电阻端,外接比较器,与IOUT1、IOUT2 组成电压放大电路。VREF 是基准电压,电压范围是-10V~+10V。VCC 和GND 分别是5V 电源和地端。DAC0832 与单片机的连接图如图6 所示。

图6 DAC0832与单片机的接线图

/CS,/WR1 与单片机的端口相连,使得输入寄存器的通断状态由单片机来控制。XREF和/WR2 接地,使DAC 寄存器一直处于导通状态。ILE 和VCC 外接5V 电源。此时DAC0832 处于单缓冲工作方式。DI0~DI7 接单片机的P0 口,接收补偿后的数字式音频信号。IOUT1 后接电压放大器,将信号进行驱动放大,再接音箱,这样就能使其放出的声音音量保持恒定,不会忽大忽小,同时能够多部发射机的音频信号循环播放,省去人力操作。

2 程序设计

这部分进行程序编程的介绍。检波和差分放大功能是由硬件电路实现的,在软件编程时不需要考虑这2 块。本程序直接从差分放大电路后面的六选一功能开始,具体思路是:对CD4051 芯片进行控制,决定着某一时刻哪路音频模拟信号可以通过CD4051 芯片;之后对模数转换芯片MAX187编程,使其对模拟信号进行模数转换;之后对得到的数字信号送入单片机,进行软件算反补偿,对音频偏大的某路信号进行削减,对音频偏小的信号进行放大,以便使得多路信号有一个相同的音量大小;最后控制DAC0832芯片进行数模转换,将数字量转换成模拟量。主要是以上4 大功能,软件设计的流程图见图7 所示。

图7 软件设计流程图

下面给出关键代码。

(1)MAX187 的驱动程序unit 187ADc(void)//编写子函数,后面在主函数中之间调用{unchar i,linshi; //定义2 个局部变量187AD_CS=1;

187AD_CS=0; //出现下降沿时启动I2C 总线

187AD_CLK=0; //时钟信号低电平开始模数转换while(187AD_OUT==0);

//利用循环语句进行转换,该过程中187AD_OUT=0 187AD_CLK=1;187AD_CLK=0;

//时钟信号出现下降沿,传送数据给单片机linshi=linshi^187AD_OUT;

//将MAX187 的转换结果赋值给linshi

for(i=0;i<11;i++) //MAX187 的位数是12,因此传送12 次{187AD_CLK=1;

187AD_CLK=0; // 时钟信号出现下降沿,启动传输linshi=linshi<<1;

//位操作,使得linshi 的数据左移一位

linshi=linshi^187AD_OUT;}

// 将MAX187 的转换结果赋值给linshi

(2)主函数程序,对CD4051 编程,算法补偿和DAC0832 的输出程序

define ADR P1 //宏定义将P1 口用宏ADR 代替Define DAC0832 XBYTE[0x6fff];

//定义DAC0832 的端口地址

main( ){

char j,n[3]; //定义符变量j,n[3]

float a,b,m,linshi; //定义4 个浮点型变量a,b,m,linshi a=255;

while(1){for(j=0;j<6;j++)

{ADR=j; //对CD4051 编程,选择6 路音频输入信号

//里面的某一路,进入MAX187

m=Adc(); //开始模数转换,将结果传递给变量m linshi=(180×m)/4095;

//将电压信号计算还原成音频的音量大小信号b=a-linshi; //对音频信号进行算法补偿

DAC0832=b;}}

//对DAC0832 进行编程,将数字量转成模拟量

3 结论

该方案可以有效地实现音频音量的平衡,改善了值班人员的工作环境,减少其工作量,实现循环监听,避免错过异态音频的发现。提高了部门的数字化、自动化水平,实现了技术的升级。取得了良好的效果。

猜你喜欢
检波寄存器差分
一种实时频谱仪中帧检波器的FPGA 实现
数列与差分
Lite寄存器模型的设计与实现
GSM-R系统场强测试检波方式对比研究
分簇结构向量寄存器分配策略研究*
基于差分隐私的大数据隐私保护
相对差分单项测距△DOR
基于TDFT的有效值检波法测量短时闪变
差分放大器在生理学中的应用
波导检波装置的失效模式及改善措施