1,焊接
因为是多数是贴片元件,对于刚拿到析子,很多人都是喜欢先把好焊的插件元件焊上,这样感觉焊起的会快,似乎只要再焊这几个小元件就完成了一样。这是一个不好的习惯,焊接顺序最好是先焊最不容易焊的,比如IC,再焊焊费时的,就是那些数量最多的贴片元件,最后焊那些插接件连接器之类,假如析子上有怕静电的元件,这些元件可以考虑放到最后再焊,比如一些mosfet,蓝色LED,砷化镓工艺的射频IC等,这些都是比较怕静电的,200V的静电都可以让这些元件失效半失效,人体可以感知的静电差不多在2500-3000V左右。这些元件都是在不知不觉中损坏的。此处略10000字.......
言归正传,如果是新手,功放板最好先把两个两个IC焊接,LM4811脚比较密,先把PCB上的焊盘上锡,再把板子上的锡拖平整,把IC放正位置,小心方向别反了,一边用锡固定上,焊另外一边,并把锡慢慢拖干净,完了再拖固定脚位的那一边。
元件位号图 高清pdf下载 PCB位号图.zip
开始焊接几个料

TPA3110D2这个芯片是面是有散热焊盘的,一般这种焊盘一定要用热风枪才能搞定。不过这个板子,没有热风枪也不怕,这个散热焊盘下留一个大孔,还是先焊IC的两边的脚,然后反过来在板子的另一面再焊中间那个焊盘,因为这个焊盘散热的铜面积比较大,这个时候烙铁温度可以调得高一些。

还有四个电感,也可以先焊。两个电解电容调试时可以先不焊,不影响调试。
注意:这个板子的所有插件元件封装为了焊接时少偏移,元件孔尺寸都不太大,焊上去是很难再取下来了。
2,调试
焊好后,单片机没有程序是不会出声音的,Q3导通时TPA3110D2输出是静音的。可以编程让它单片机P1.4输出低,Q3不导通,TPA3110D2输出打开。最快的方法就是把Q3 be极短接。

这个有一个写好的hex程序,参考代码看第4点。可以烧到单片机中,这个程序当插入耳机后,单片机就会打开TPA3110D2的输出。如果焊接没问题,接上喇叭,播放音频,就会有声音出来。
音频输入,是采用3.5耳机输入,另这一端最好也是用3.5耳机插头,可以用两个废耳机接在一起,这样可以做手机和电脑功放。如果是接机顶盒或DVD之类,可能就要用到3.5耳机和莲花插头转接线或转接头。
关于输出喇叭的接法,是不可以用3.5耳机转莲花插头这样的转接线的,这是BTL输出的,喇叭线和电源是不共地的,两个喇叭要四根线,没有公共极,3.5耳机头是三线的,有一个公共的极子,通常是电源负极。所以两个喇叭输出口,只能老老实实的用两个电气上独立的莲花头接喇叭。
喇叭正确的接法应该是酱紫的

3,功放改进
待续。。
4,参考代码
工程文档在最下面
几个使用到的IO的宏
//指示灯
sbit LED = P1^5;
//红外
sbit IR_INT0 = P3^2;
//调音按键
sbit KEY_SUB = P1^2;
sbit KEY_ADD = P1^3;
sbit KEY_MUTE = P1^1;
//检测音频线有没有接入
sbit CHECK = P1^0;
//功放静音
sbit MUTE = P1^4;
//MCU调音量
sbit CLOCK = P3^3;
sbit UPDOWN = P3^6;
还有几个全局变量,主要是存功放和按键状态的
unsigned char uup=0; //有连续按键时用
unsigned char IRtimer;
unsigned char phonejack; //有没有音频线状态
unsigned char MUTEstate = 0; //MUTE状态
//配置功放关开IO,P1.4=1时是关功放,=0时是开功放
P1M1&=~(1<<4); //P1.4(MUTE)推挽
P1M0|=(1<<4);
MUTE = 1;
音量控制是这样操作的
//控制音量加
void Volume_add(void)
{
UINT8 iadd = 5;
UPDOWN = 1;
while(--iadd)
Delay1ms();
CLOCK = 0;
iadd = 5;
while(--iadd)
Delay1ms();
CLOCK = 1;
}
// 控制音量减
void Volume_sub(void)
{
UINT8 isub = 5;
UPDOWN = 0;
while(--isub)
Delay1ms();
CLOCK = 0;
isub = 5;
while(--isub)
Delay1ms();
CLOCK = 1;
}
功放静音控制只要
MUTE = 1; //静音
MUTE = 0; //不静音(开功放)
关于检测有没有插入3.5的音频头请参考下面代码
if(CHECK == 0) //没有音频线插入
{
MUTE = 1;
phonejack = 0; //没有音频线
}
else //有耳机
{
if(phonejack == 0)
{
flash_LED(20);
}
phonejack = 1;
if(MUTEstate == 1)
{
MUTE = 1;
}
else
{
MUTE = 0;
}
}
关于按键,软件上一定要做延时处理
下面是给大家一个延时的方法,高手请略过;
void Scan_key(void)
{
UINT16 loop;
if(KEY_SUB == 0)
{LED = 1;
loop = 10;
while((KEY_SUB == 0) && (loop >0))
{--loop;Delay1ms();}
if(KEY_SUB == 0)
{
Volume_sub();
u_sstr("-1\n\r");
flash_LED(20);;
loop = 1500;
while((KEY_SUB == 0) && (loop >0))
{--loop;Delay1ms();}
}
while(KEY_SUB == 0)
{
Volume_sub();
u_sstr("-1\n\r");
flash_LED(20);;
loop = 200;
while((KEY_SUB == 0) && (loop >0))
{--loop;Delay1ms();}
}
}
if(KEY_ADD == 0)
{LED = 1;
loop = 10;
while((KEY_ADD == 0) && (loop >0))
{--loop;Delay1ms();}
if(KEY_ADD == 0)
{
Volume_add();
u_sstr("+1\n\r");
flash_LED(20);
loop = 1500;
while((KEY_ADD == 0) && (loop >0))
{--loop;Delay1ms();}
}
while(KEY_ADD == 0)
{
Volume_add();
u_sstr("+1\n\r");
flash_LED(20);
loop = 200;
while((KEY_ADD == 0) && (loop >0))
{--loop;Delay1ms();}
}
}
if(KEY_MUTE == 0)
{
LED = 1;
loop = 10;
while((KEY_MUTE == 0) && (loop >0))
{--loop;Delay1ms();}
if(MUTEstate == 1)
{
MUTEstate = 0;
// MUTE = 0;
// u_sstr("MUTE\n\r");
}
else
{
MUTEstate = 1;
// MUTE = 1;
// u_sstr("CLOSE MUTE\n\r");
}
flash_LED(20);
while(KEY_MUTE==0)
{
loop = 10;
while(loop >0)
{--loop;Delay1ms();}
}
}
if(CHECK == 0) //没有耳机插入
{
MUTE = 1;
phonejack = 0; //没有耳机
}
else //有耳机
{
if(phonejack == 0)
{
flash_LED(20);
}
phonejack = 1;
if(MUTEstate == 1)
{
MUTE = 1;
}
else
{
MUTE = 0;
}
}
}
参考工程请参考请下载 STC_ClassD(anjian).zip
我要赚赏金
