基于51单片机和DA转换的数控音频功率放大器设计文档格式.docx
《基于51单片机和DA转换的数控音频功率放大器设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机和DA转换的数控音频功率放大器设计文档格式.docx(13页珍藏版)》请在冰豆网上搜索。
具体接法见上图。
利用TDA2030进行功率放大。
TDA2030具有体积小,输出功率大,失真小等特点。
功率放大器内含多种保护电路,工作安全可靠性高,主要保护电路有:
短路保护,热保护,地线偶然开路,电源极性反接,以及负载泄放电压反冲等。
其中,热保护电路能够容易承受输出的过载,甚至是长时间的,或者环境温度超过时均起到保护作用。
与普通电路相比较,散热片可以有更小的安全系数。
结温超过时,也不会对器件有所损害。
(3)单片机STC89S52
STC89S52是比较常用的52系列单片机。
它的工作电压是+5v。
外围电路加上12M的晶振,使其正常工作。
P2口控制DAC0832。
通过对P2口赋值来改变输出增益的大小。
(4)1602液晶
1602显示容量为16乘2个字符。
工作电压为+5v。
编号
符号
引脚说明
1
VSS
电源地
9
D2
DateI/O
2
VDD
电源正极
10
D3
3
VL
液晶显示偏压信号
11
D4
4
RS
数据/命令选择端
12
D5
5
R/W
读写选择端
13
D6
6
E
使能端
14
D7
7
D0
15
BLA
背光源正极
8
D1
16
BLK
背光源负极
(5)DAC0832
DI0~DI7:
数据输入线,TLL电平。
ILE:
数据锁存允许控制信号输入线,高电平有效。
CS:
片选信号输入线,低电平有效。
WR1:
为输入寄存器的写选通信号。
XFER:
数据传送控制信号输入线,低电平有效。
WR2:
为DAC寄存器写选通输入线。
Iout1:
电流输出线。
当输入全为1时Iout1最大。
Iout2:
电流输出线。
其值与Iout1之和为一常数。
Rfb:
反馈信号输入线,芯片内部有反馈电阻.Vcc:
电源输入线(+5v~+15v)Vref:
基准电压输线
(-10v~+10v)AGND:
模拟地,摸拟信号和基准电源的参考地DGND:
数字地,两种地线在基准电源处共地比较好.
六.软件编程
按照电路图的设计焊接好硬件电路。
就开始软件编程。
程序主要分为两个部分,即液晶显示部分和控制DAC0832的部分。
由于本设计采用的是用按键分别控制。
可以在主函数中调用一个键盘扫描的函数,当相应的不同按键按下后控制液晶显示和单片机P2的输出,从而控制DAC0832的输出增益。
源程序见附录。
七.调试部分
本次实验的调试部分花了大量的时间。
当程序写好编译通过后,下载到单片机中,调试硬件看有无显示和输出。
调试主要分为3个部分。
分别是液晶显示部分,前级放大部分,功放输出部分。
首先是液晶部分,经过几次程序的修改,和对液晶部分电路的检测终于将液晶部分调出有显示。
然后检查前级放大部分。
在输入端输入峰峰值为50mv的正弦波。
用示波器检查运放的输出。
最后一遍联合按键控制用示波器观察DAC0832输出部分的波形。
结果显示良好。
八.实验心得体会与总结
经过这次试验,我还是有一些收获的。
首先感觉到我们所学知识的肤浅,既没学活也没学深。
以后要想做好电信专业的工作,我们还有很长的路要走。
我也认识到模拟电路是一门很值得研究而且可以大有作为的学科,要想成功做出一个模拟电路出来需要付出许多汗水,并不是能够将电路设计出来就算成功,由于模拟电路本身的特点,理论值和实际情况往往有着很大的区别,当我们设计出一个合理的电路并把它焊接出来后,心中小有成就感,然而在调试的过程中却遭受了失败的一次次打击,我们甚至出现了上午把电路板调试好,下午输出信号完全混乱的情况,幸运的是我们任然坚持到最后并且品尝到了成功的喜悦。
可以说完成理论设计只是完成了整个课题的很小一部分,调试过程占了很大的比重,在这个过程中通过与同学交流我们学到了很多,比如说电源要接去耦电容、液晶背光灯调节电阻的几种解法,单片机程序中几个函数的用法,电路虚焊的检验方法等等。
通过这次实验,进一步验证了我的编程能力,使我看到了自己有许多需要提高和改进的地方,也增强了我学习本专业的兴趣和信心,可以说以后不管是读研还是找工作,我要想成为一名合格的电子工程师还有很长的路要走。
。
附录一实验电路图
附录二实验源程序
#include<
reg51.h>
#include<
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitE=P1^2;
sbitRS=P1^0;
sbitRW=P1^1;
sbitkey1=P1^3;
sbitkey2=P1^4;
sbitkey3=P1^5;
sbitkey4=P1^6;
sbitkey5=P1^7;
voidlcd_init();
voidwrite_comm(uchar);
voidwrite_data(uchar);
voidwrite_string(uchar,uchar,uchar*);
voidlcd_delay();
voiddelay_ms(uint);
voiddelay_ms(uinti)//延时i毫秒
{
uintj;
while(i--)
{
for(j=0;
j<
=74;
j++)
{
_nop_();
}
}
}
voidlcd_init()
lcd_delay();
write_comm(0x38);
//显示模式控制:
设置16*2显示,5*7点阵,8位数据口
write_comm(0x08);
//关显示
write_comm(0x01);
//清屏
write_comm(0x06);
//输入模式控制:
光标右移,整屏不移动
write_comm(0x0c);
//开显示,显示光标,光标闪烁
//0x0e,开显示,显示下光标,光标不闪烁
write_comm(0x80);
write_comm(0x02);
//数据指针清零
voidwrite_comm(uchari)
RS=0;
RW=0;
P0=i;
E=0;
lcd_delay();
E=1;
voidwrite_data(uchari)
RS=1;
voidwrite_string(ucharrow,ucharcolumn,uchar*dis_buffer)
switch(row)//这种结构保持以后升级到多行显示液晶
{
case1:
write_comm(0x80+column);
break;
case2:
write_comm(0x80+0x40+column);
//重新调整数据地址指针
default:
while(*dis_buffer!
='
\0'
)//'
结束符
write_data(*dis_buffer);
dis_buffer++;
column++;
if(column==16)
{
column=0;
row++;
if(row>
=3)
return;
else
write_comm(0x80);
write_comm(0x80+0x40);
//重新调整数据地址指针
}
voidlcd_delay()
uchari;
for(i=0;
i<
255;
i++);
voidmain()
lcd_init();
//cntl1=1;
cntl3=1;
cntl2=0;
cntl4=0;
cntl5=1;
cntl6=0;
write_string(1,0,"
Gain:
"
);
while
(1)
if(key1==0)
delay_ms(15);
while(!
key1);
P2=0x02;
write_string(2,0,"
0dB"
if(key2==0)
key2);
P2=0x08;
10dB"
if(key3==0)
key3);
P2=0x1A;
20dB"
if(key4==0)
key4);
P2=0x51;
30dB"
if(key5==0)
key5);
P2=0xff;
40dB"