赵巧妮
(1.西南交通大学 2.湖南铁道职业技术学院)
功率放大器是把来自音源或前级放大器的弱信号放大,推动音箱放声。目前市场上大部分功放的音响效果控制是模拟的,无法调节具体的参数。本文设计一套数字控制功放,能把音量、音调以及响度准确地调整到所需参数,达到最佳听觉要求。
在功放系统中,按照工作点可分为A类、B类、AB类和D类。A类功放效率最低;B类功放有交越失真;AB类功放结合了A、B两类功放的优点,效率适中又没有失真;D类功放称为数字功放,虽然效率高但音质不及模拟功放。结合它们的优点,选择AB类集成芯片功放 TDA7372和音效控制芯片SC7313为功放的核心器件[1]。
系统主要包括单片机控制模块和数字控制模块两大类,如图1所示。
单片机控制模块主要包括液晶电路和按键电路。通过键盘可以控制音量的大小、音源的选择以及系统设置等。
数字控制模块主要实现数字音频信号的前期数字声场处理,由用户通过编程控制音量、音调、响度等参数,再将处理后的数字音频信号送入后级音频功率放大电路进行功率放大。
图1 系统框图
(1)矩阵键盘模块
本系统共使用了24个键盘,为减少I/O口的占用,把按键排列成4×6矩阵形式,通过J1与单片机的P1、P3.0、P3.1共计10个I/O口相接,其电路图如图2 所示。按键功能分别为通道选择(共有三个信号通道可供选择)、响度、输入信号加减、音量加减、低音加减、高音加减、左边低音加减(FL)、右边低音加减(FR)、左后方低音加减(RL)、右后方低音加减(RR)、增加(up)、减小(down)、确定(enter)、退出(esc)、开关、静音。各按键功能的实现通过软件编程实现。
图2 按键电路图
(2)液晶模块和存储模块
液晶模块是功放与用户机通信的主要界面。芯片采用具有中文显示功能的LM3033B液晶,与单片机的P0口进行并行的数据通信。
存储模块采用I2C芯片AT24C02保存功放上次设置的参数,无需每次设置功放的声场参数。
(3)单片机模块
核心处理器 MCU采用51单片机89s51,与存储电路、数字控制等电路采用 I2C总线来操作,电路如图3 所示。单片机本身不是 I2C总线的芯片,用单片机的P3.6、P3.7来模拟I2C总线的SDA、SCL线。单片机各 I/O口的分配如表1所示。
图3 单片机与从机连线图
表1 单片机的I/O口分配
数字控制部分采用具有音量、音调、平衡度和响度控制的音频处理芯片 SC7313。三路立体声数字音频信号通过阻容耦合分别从 SC7313的引脚 L1(Pin15)、R1(Pin11)、L2(Pin14)、R2(Pin10)、L3(Pin13)、R3(Pin9)输入,通过编程选择三路中任一路的音频信号,最小可实现 1.25dB的音量调节,范围在0dB~128dB[2]。经SC7313内部处理后,以独立控制的四声道方式通过电容耦合至AB类功放TDA7372,被放大后再送入扬声器还原为声音信号。功放数控电路图见图4。
图4 功放数控电路图
功放除了能正常放大音频信号,还具有静音功能,当3脚低电平的时候,功放无声音输出。还可设定某个时间点让功放进入省电模式(10脚低电平时进入省电模式),自动关机,方便快捷。
系统软件部分包括I2C总线的相关读、写函数,单片机与各个I2C器件通信的协议函数,液晶的读写函数以及按键的函数,本文主要描述I2C的相关函数。其它函数之间的关系用系统的总流程图(图5)来表示。程序首先对所有的器件初始化,液晶再显示功放的相关参数设置。若功放的设置不符合用户的要求,可通过按键来调整,也可通过液晶的菜单方式来确定是调整系统参数还是功放参数或是时间参数,最后将调整好的参数保存即可。
单片机没有I2C总线,故用两根I/O口(P3.6口、P3.7口)来模拟I2C总线,定义位变量:sbit sda=P3^6;sbit scl=P3^7。
I2C总线以字节位为单位收发数据[4]。每次传输的字节数量没有严格限制。首先传输的是数据的最高位,最后传输的是最低位,并且每个字节之后还要跟一个响应位成为应答位。依据I2C的数据传输协议规则,编写了对应的读函数uchar read_byte()、写子函数void write_byte(uchar dat)。
由I2C总线读写数据的传输协议,定义了初始化函数void init(),开始函数void start(),停止子函数void stop()。
图5 系统总流程图
具体初始化函数内容编写如下:
时钟芯片PCF8563、音频处理芯片PT2313、存储芯片AT24C02均是I2C器件的从机,为了在呼叫时确定某个器件,依据电路图定义三个从机的地址分别如下:
#define PCF8563 0xa3;
#define AT24C02 0xa1;
#define pt2313_init_code 0xaa//pt2313 初始化特征码。
再依据I2C协议的时序定义单片机与PT2313、PCF8563以及AT24C02之间读写的字节的子函数。
给pt2313写一个字节的函数:
void write_pt2313(uchar dat)
pt2313设置子函数:
void pt2313_set(uchar key_code)
初始化子函数:
void pt2313_init(void)
//将pt2313中的参数从AT24C02中读出。
给选定的 I2C器件中的某个存储单元写一个字节数据的函数:
void write_iic()
从选定的I2C器件读一个字节数据的函数:
Uchar read_iic()
实验证明,该数控功放的声场参数(音量、音调、响度)可以定量调节,使用便捷,控制可靠,音响效果较好,其功效在同类产品中性价比较高,值得在市场上推广应用。
[1]沙占友,马洪涛.纯数字音频立体声功率放大器设计[J].电声技术,2003(4):29-31.
[2]粟慧龙,韩雪.基于AT89S52智能家居背景音乐控制器的设计与实现.科技信息[J],2011(2):111-112.
[3]谢世武.I2c总线及其在视听系统中应用电脑知识与技术[J].电脑知识与技术,2004(23):58-60.