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