自制全分立元件 OP 式耳放
上次的简易的耳放制作完成之后,兴趣也被勾了起来,正好继续补习模电的知识,顺便把这个耳放加强一下吧~
前级完全 OP 化了,在洞洞板上和雕刻板上尝试了好几天才把这个电路正确运行起来,虽然里面还有一些疑惑,不过经过这么一折腾,比看书的认识深多了。
全部用了分立元件,连稳压器部分也只用了三极管和稳压管,只要外接一个 24V 的电源,通过稳压器稳压后到 20V 左右,就可以使用了~
一般来说功放都是设计成正负双电源的,网上搜到的设计图也都是如此,但是为了省事,就用了单电源,用中点当做零点,所以 20V 单电源相当于 +10V -10V 的双电源,我也不知道图中的偏置方法是否正确,总之运行得还不错~

最终的外观相当华丽~
本来想用廉价电容来焊,但是发现手上的廉价电容都是 16V 耐压的,无奈只好拿出很久之前买的发烧电容(50V 耐压),最后就成了看上去很奢华的耳放了。
废了相当大的功夫焊接完毕,非常走运没有什么问题。听感比上次的廉价耳放好多了,声音非常平衡,导致感觉有点冷 :D。
不过还是有点小遗憾,电源部分忘了一个误差电容;右边中间的两个三极管离得太近了,装上散热片就快靠在一起了,而且正好是一个 +20V 一个地,安装的时候不小心用剪刀短路了一下这两个散热片,结果打了一个很大的火花,剪刀的一个尖还粘在了一个散热片上,太汗了……
此外为了调节音量,输入那边搞了一个双联的电位器(左边中间那个旋钮),但是这个电位器精度太低了,满值 10K,转到中间左右,两个值一个 5K,一个 5K4,误差快 10% 了,老有心理作用觉得两个声道不平衡,所以最后干脆拆了下来。
静态总电流 100mA 左右,功放管很烫,不过加了个小的散热片之后就比较温了,这个应该算作什么类的放大器呢?A 类?B 类?AB 类?目前对这个分类概念也不是很清楚。
为了测试耳放,还给 ER4 配了一条高阻线,说是高阻其实也只有 80 欧而已。原来一直觉得换线会改变声音是胡扯,但是这次换上高阻线之后的确声音有变化,声场变大了,层次更清晰了。原因不是很清楚,大概是阻抗可以抵消掉耳机的部分容性或感性负载的比例的吧,这样就可以让输出更加线性;另外高阻抗强制输入端必须提高音量,这样底噪占得比例也会变小。

有机会把前级改成集成的 OP 芯片看看有没有区别,自我感觉应该差别不是很大。虽说差分对三极管如果没有精确配对会带来误差,但是 Vbe 的差别虽然被放大,因为在单电源的情况下输出有电容耦合,所以直流的部分并不会被输出。hFE/Ic 之类的差别,可以被发射级电阻抵消大半,所以即便不如 OP 也不应该很明显的听出来才对。 至少用分立元件总体噪声会少,频率特性应该也会变好,此外也可以自由在各个部分选择特殊的三极管或者灵活的设计。我估计着,如果在差分部分用上孪生对管,再在各个部分用上用上高品质的三极管,最终的效果应该会超过 OP 才对,也许 HIFI 级别的功放里面都有大部分的分立元件,也是因为如此吧。
以这个东西为标志,模电三极管的补习算是告一段落。
以后就用这个耳放听歌了~ :D
接下来继续补习其他的东西……汗
趁着春节前的工作日,赶紧买了一些电感和 pF 级别的电容,春节期间看看高频的内容吧,这部分貌似也挺好玩的~
自制耳机放大器
看了半个月的模拟电路,今天做了第一个模拟电路的玩具 -- 一个耳机放大器~
其实这个电路是驱动低阻的无源音箱用的,但是手上没有:(。
电路板早就打样了,只不过今天中午才收到,下午焊上测试了一番,效果相当不错~ :D
左声道原理图(右声道相同):

大牛们请无视,因为目前就学习到这里,所以只能弄出这样的电路,并且基本是抄书。
5V 就可以工作,高了更好,只要不超过电容的耐压值,3.8V 以下就要被削波了。15V 下驱动 8 欧负载理论上可以输出 0.5w 以上。
成品:
使用兆信的稳压电源输出 5V ~ 15V、电池(4x1.5v)、USB 电源(再经过自制的稳压器),都可以很稳定的工作。
手上只有 ER4p 和 HD570 这两个耳机可以测试,都不难推:(,所以只能测试下音质效果。测试下来效果令人满意~ 原来曾经用过一个铁三角的廉价耳放,听上去效果没什么差别 :D。
总结:
无信号下噪声很低,是因为只有一级放大的缘故。不过插上耳机,还是会听到一些“沙沙”的噪声,主要来自信号线和音源的噪声,因为前级的电压放大把噪声也放大了,铁三角的那个耳放也有同样的现象。这个看来只有改善传输线和音源的品质才行。
原理图中的 C11 就是高音增强电容,想增强高音,就增大这个电容,不过太大了就没意义了(因为全增强了)。如果你的耳机高频很突出,那么可以不要这个电容,不过大部分情况下还是需要的。我开始听的时候,觉得高音太刺耳了,所以就认为 470uF 太高了,后来换成 10uF 的感觉不错,但是最后才发现是因为播放器的 EQ 把高音区打得太高了,把 EQ 调成水平,然后再换回 470uF,就正常了。拿掉这个 470uF,感觉很浑浊。
相比在播放器上用 EQ 拉高高音,使用电容调整的效果就要自然多了,这次自制耳放最大的体会就是这个。但是缺点也是有的,因为噪声也在这个频率区域,所以用电容调整,噪声也会变大:(,用 EQ 就不会有这种状况了。
C8 和 C6 是输入和输出的隔直电容,输入是 10uF,输出是 1000uF。实验的时候犯过一个错误,就是把 C6 也换成 10uF 的,结果发现低音全没了。后来才知道,为什么这两个电容不一样,是输入和输出阻抗不同造成的。
输入阻抗是 R7 和 R9 并联的值,大概 10K 左右,配合 10uF 的 C8,截止频率在 1.6Hz 左右(
),对低音信号(最小 20Hz)完全没问题。
输出阻抗其实是耳机的阻抗,比如 ER4p 是 27 欧,配合 10uF 的 C6,截止频率就在 590Hz 左右,自然低音都没了。换成 1000uF 的,到 5.9Hz 就没问题了~
下一步:
这次用的元件都是非常廉价的,第一级的三极管是最便宜的 2N5551,后面的推挽输出也没有配对,随便抓了个 TIP31C 和 42C 来用,电容也都是论斤卖的那种,所以下一步就是更换好一点的原件,看看音质上是不是有提升,也可以一定程度上了解那些音响的“磨机”有没有意义。
另外,这个电路板是上个星期五去打样的,周末出差,回来之后继续看晶体管的书,就看到了负反馈放大和差分放大,后悔没有加在这个电路里面。那么,接下来就是设计更有技术含量的电路吧,看看可否改善音质。
一般的功放,似乎前级的电压放大都是 OP 来实现的,既省空间又稳定。但是我也用 OP 就不好玩了,那么就尝试用分离元件搭个 OP 吧,正好书上也有这部分的内容,看看效果咋样 :D。
迟到的 09 年总结 + 2010 年计划
本来想 09 年 12 月 31 号写来着,但是不知道那天干啥去了,没有写,后来就忘记了,今天赶紧补上。
单片机之年
09 年基本一年都在折腾单片机。除了写代码就是画电路板和焊电路板,从原型到几次改版再到最终产品,再给产品加上外壳和标签,成就感非常大~
虽说还处在入门阶段,但是总体来说是个成功的转行~ ; )
暂别 Linux 之年
和许多人一样,曾经幻想以后用 Linux 作为自己工作和生活的平台,不过 09 年几乎都在 Windows 下度过,因为要用到的所有工具都是 Windows 下的。
虽说开始有些别扭,但是习惯了之后发现 Windows 下也没有预想的那样糟糕,反而因为不用考虑一些折腾的事情(比如 emerge -uD world、编译内核、更新驱动...),从而可以更专心的干自己的工作。
在用 C# 和 WPF 开发了客户端软件的时候,花了一个月看了下 C# 和 WPF,就可以依靠着方便的 VS Studio 开发完一个像样的程序,整个过程畅通无阻并且很舒适。也让我反思作为一个程序员真正的目的是什么,是开发出一个好的程序造福更多的人?还是专注一种工具了解全部的细节?
不过,Chito 的开发还是在 Gentoo 下完成,今后也不会放弃 Linux 平台,只不过目前的重心渐渐转移到网络应用和硬件开发上,相比之下操作系统平台就显得有些无关紧要了。
依旧宅男之年
基本一年都在屋里宅着,而且作息时间颠倒。曾经有一个多月的时间,经常在外面跑,那时候我都有种不再是宅男的错觉了,但是跑完那段时间,马上恢复了以往的生活。
继续顺其自然,这种状态还真让人上瘾 : )。
依旧很穷之年
东西做了不少,赚钱的不多,08 年的时候还想赚了钱去败点东西,比如去买 Mac 啦,换服务器啦,结果这个愿望要平移到今年了。接着努力~
嗯,接下来是 2010 年的计划:
学习模拟电路
原来就很想看,但是没有腾出时间。做单片机的时候,对模拟电路的东西还是能躲就躲。现在要抓紧把这部分内容补上了。
看了晶体管的部分内容,搭了一个放大器,又搭了一个稳压源,觉得模拟电路比想象中的有趣,而且感觉思路又扩宽了很多,配合单片机那些数字的东西,又可以做不少好玩的东西吧~
换个地方宅
宅在家里太不像话,所以争取租个房子换个地方宅吧,也会方便不少,嗯嗯,前提是赚到租房子的钱。
目前就这么多,慢慢补上~ :D
宅男必备 -- 脚踏键盘
嗯嗯,作为一名宅男,对着电脑吃饭是一种习惯。不过,可能跟别人不一样,我更加喜欢在吃饭的时候看静态的东西,比如长帖子、博文、漫画之类。
吃包子的时候还好,但是如果是吃面什么的话,看两眼就要腾出手来去翻页,那是相当不爽的。现在,终于做了这个,咩哈哈效果不错~
最贵部分就是这个脚踏板,要 60 大洋,淘宝上买的,这个已经是能找到的最不土的了……相比这个,其他部分的成本可以忽略不计了……
电路部分很简单,一块 M48,和一块旧的 PCB 板,上面引出接口刚好可以连接 USB 接口,和键盘引出口。那块 8 脚的小芯片,只是个 MOS 管,给 PCB 搭桥用,上面顺便有个 TVS 管防静电:
脚踏按钮是四线的,量一下确定分组,PCB 上正好有两个按钮的位置,接上去:
软件用 V-USB 模拟一下 USB 传输,做个 HID 设备,就完成了~
完成的连接图,再来根 USB 延长线,插到主机背后的 USB 接口中,请自行忽略地上的脏土 ^ ^b :
| M48 | 4¥ |
| 二极管 x 2 | 0.3¥ |
| USB 接口 | 0.2¥ |
| MOS 管 | 0.7¥ |
| 其他元件 | 0.2¥ |
电路部分合计只要 5.4¥,可惜那个脚踏板太贵了……
默认的模式是 PageDown 和 PageUp,吃饭的时候看漫画用,此外也可以看 pdf 的时候做连续翻页,Protel 里面的放大和缩小也是 PageDown/Up,在鼠标拖动元件的过程中,通过脚踏板缩放图纸也很方便。
此外,也可以调为 Ctrl+C Ctrl+V 模式,解放左手
。
因为是 HID 设备,自然 Linux 下也能用,lyanry 出了个好主意,可以做个 Vim 模式,把脚踏调成 Esc 键,这样模式切换踩一下就可以了~
此外,做个老板键也不错~
拿来切换桌面也不错~
玩赛车游戏,设成油门和刹车键也不错~
……
用处很广阔啊~ 
目前的缺点:
1. 太贵,得去找个便宜点的脚踏板。
2. 脚感有点硬,而且声音咔哒咔哒的,夜里估计会很吵,得去找个软的静音踏板。
3. 切换模式得重新烧程序进去,下版搞个切换开关在上面。
Hootsuite 被墙,FuckGFW
单片机项目总结(一)-- 稳定性
以前只写桌面软件和 Web 程序,感觉一个稍有规模的软件要想做到良好的稳定性是要下一番功夫的,更不要说系统软件、内核模块、操作系统了这些了,因为他们确实太复杂了。
与此相对的,初涉单片机的时候,就感觉这东西很简单,也很难出故障,这个感觉和平常的经验也相符,毕竟,你什么时候看到过电子表死机?遥控器死机?刮胡刀死机?电梯死机?因为他们的逻辑就那么简单,根本就不可能死嘛……
不过现在才明白,如果你在实验室里做个电子玩具,那么以上是成立的,当你准备把这个玩具做成产品的时候,那么诸多问题就来了:你的产品也许不会像电 脑主机一样放在桌角就不动了,它也许会被放在 -20 度的户外,也许会被阳光晒到 50 度以上,也许会在湿度经常达到 80% 以上的南方夏天使用,也许会在干燥得一碰就能打出静电火花的北方冬天使用,也许会正好放在冰箱的压缩机旁边,也许会从桌上摔到地上再弹起来……
最初没有认识到这点,以为原型搞定了就算完工,结果之后在稳定性上花了大量的时间。不过也算了解了不少东西,特此记录一下~
1. Watchdog

看门狗,一直以来都知道有这么个东西,但是从来没有用过。第一印象是觉得这个模块的作用怎么这么弱智,不就是个定时的复位器吗,还要在程序中不断” 喂狗“,为啥要这么麻烦……现在明白了,因为你不知道你的程序会在什么地方跑飞,或者进入死循环,即便是设计的 100% 完美的代码,也可能在外部干扰、电压不稳的情况下,到错误的地方执行错误的代码,看门狗给让你的程序至少不会失去响应,大多数还有标志位让你能分辨出看门 狗重启从而做特殊处理。
无奈的是看门狗是要消耗电量的,对电池设备不是那么合适,不过如果你的设备不是要求一节纽扣电池就要运行两三年的话,那么还是把看门狗打开吧~
如果追求更低的功耗,和更健壮的稳定性,那么用专用的外部看门狗芯片也是不错的。除此之外也有不少芯片有看门狗这个附加功能,比如 HT1621,不用白不用~ :)
2.BOD
BOD 给我的第一感觉,也跟看门狗一样,不就是个低电压复位器嘛,认为在电压很波动的环境中用用还情有可原,一般情况下用不到。其实不然,因为电压过低是造成程 序混乱的一个主要原因,最低电压 1.8V 的处理器,在 1.0V 电压下也可以运行,但是内部已经混乱了。这次就遇到了用电池的设备在低温下莫名其妙跑飞的情况,最后才发现是电池在电量快耗尽的时候,在低温下电压会降得 很厉害,加上 BOD 就 OK 了。

BOD 也有同样的问题,就是一般也是要耗电的,因为为了比较电压,至少要维护一个电压基准。不过比如 MSP430 就有 zero-power BOD 技术做到零功耗的 BOD,新版采用 picoPower 技术的 AVR 处理器也有 Sleeping BOD 功能,同样可以达到睡眠状态下 BOD 无功耗,所以,也是不用白不用啦~ :D
3.好用的 EPPROM

对于一般功能的设备来说,有 Watchdog 和 BOD 就足够了,但是对于一些要维护状态信息和长期运行的设备,比如数据记录器、监控器,那么程序跑飞,就不能简单的重启了事,更重要的是要恢复现场,接着跑飞前的地方继续运行。
这就需要非易失存储器的帮助了,而 EPPROM 又是其中最好用的一个,100 万次的写入寿命,并且大部分处理器都内置了 EPPROM,又是不用白不用,即便没有,添加一块外置的 EPPROM,比如 24c02,也只需要几毛钱。
虽然 EPPROM 只有几千个字节的存储空间,却足够可以保存运行时的所有变量,配合 Watchdog 的重启中断,可以在处理器被重启前,把重要的运行时参数保存到 EPPROM 里去,重启之后再装载回来。
现在的项目中,把运行时的变量保存在一个 configs 数组中,然后定期把这个数组保存到 EPPROM 中,这样即便掉电重启,也可以快速恢复到最近的一个备份上~
4.插拔和对接
这里主要指运行中设备的插拔,和两个运行中设备的对接,因为在这些情况下会有一些需要注意的问题。
曾经做过一个设备,需要在 3V 和 5V 电源之间无缝切换,当 5V 电源插入的时候,就自动用 5V 电源,5V 拔下就自动用内部的 3V 电池。做好之后却发现一个奇怪的问题,3V 切换到 5V 没有任何问题,当把 5V 拔下来的时候,处理器重启了。一直以为是电源的切换速度不够快,5V 掉电却没有来得及切换到 3V 上去,但是后来发现原因不在这里,原因竟然出在电容上。因为 5V 是外接电源,所以习惯性的在电源入口处放了个大电容(下图 C11),这样当 5V 拔下的时候,这个电容就会瞬间放电,这个瞬时的高压就将处理器复位了,去掉这个大电容,一切正常了~

双系统对接,电压不匹配是主要问题,比如 3V 和 5V 系统之间通过 I2C 总线互联。原来以为,只要 3V 的设备可以耐受 5V 的高压,双方的 VOH 什么的也可以保证逻辑正确的话就可以直接对接了,在实验室里中也经常这样干,但是在产品中用却发现了诸多的问题。比如做 3V 和 5V 设备直接的互联,3V 的设备要插入到 5V 设备上的端口上去,大部分时候插入没有问题,但是少数时候,一插入 3V 的设备就立刻死机了。

原因在于大部分处理器的 IO 口都有钳位二极管的保护(上图中红色框内),让 IO 口的输入电压不会高于 VCC 也不会低于 GND。这也就是为什么3V 和 5V 的系统互联后,即便双方 VCC 没有连接,但是还会发现 3V 系统的 VCC 变成将近 5V 了(其实就是 5V 减一个二极管的压降);这也是为什么有的芯片,不接电压,直接给它的 IO 口输入驱动也能跑起来。因为电流通过 IO 口的钳位二极管流到 VCC 去了。
但是通常钳位二极管有最大电流的限制,3V 与 5V 之间 2V 的电压差,在设备内阻的配合下,会造成将近 10mA 的电流流过钳位二极管,大部分情况下这个电流已经太大了,会造成设备闭锁失去响应,应该控制在 uA 的等级之内才对。
简易的解决办法就是将双方的电压拉近,比如将 5V 的电压用稳压器降到 3.3V,那么和 3V 之间只有 0.3V 的电压差,造成的影响就会减少很多。
除此之外一个效果不错又省事的办法就是加限流电阻(下图中 Rser),这样可以有效的限制住电流大小,因为双方只要 VCC 不互联,那么电压做到严格一致是不可能的,有了限流电阻,就稳妥得多,并且这个电阻还可以有防止双方高频互扰的效果。负面效果就是电阻会拖慢边沿速度,高 速系统中不是很适用,但对于 I2C 这类只有几百 K 的应用,串联个 100 欧左右的电阻,是非常合适的。
更多的不同电压转换技巧,网上可以搜索到一份 Microchip 的 3V 5V 电压转换技巧手册,非常有参考性。

5. Delay and Try
单片机的固件中,经常看到类似的代码:
... enable_adc(); while((!(ADCSRA & (1<<ADIF))); read_adc_data(); ...
中间用 while 来等待标志位置位,即便不用轮询而用中断方式,也会遇到类似的判断,比如在 I2C 传输中判断 I2C 中断标志位是否已经被清除、循环等待 ACK 信号之类的。
这种无限期的等待就有死循环的风险,如果硬件错误使得标志位置位失败,或者是 I2C 设备意外掉电,ACK 信号丢失,处理器就卡死在 while 这里一直等下去了。
虽说有看门狗可以在这种情况下复位,但是更好的方法是 Delay and Try,让程序稍微有点容错性:
unsigned char i = 10;
do{
_delay_ms(2);
i--;
}while((!(ADCSRA & (1<<ADIF))) && (i != 0));
这样,重试 10 次,在足够长的 20ms 内要是还是没有置位,就不再等了,当然后面的程序要有相应的处理机制。
同样的机制,也可以用在桌面软件中。一些特殊的操作,比如检测硬件、从硬件中读取数据、和驱动交互之类的不是每次都能成功,加个 Delay and Try,会稳定不少:
bool succes = false;
int retry = 10;
do
{
succes = dwObj.FindDeviceFromID(VendorID, ProductID, ref path);
if (succes)
break;
Thread.Sleep(200);
retry -= 1;
} while (retry != 0);
return succes;
虽然方法很迂腐,但是很有效~ :)
各位节日快乐
写写代码,焊焊东西,喝喝咖啡,啃啃汉堡,推推推特,看看漫画,拆拆元件,调调程序,揉揉眼睛……又是一天
看到推特上有人说祝你“年年有今日,岁岁有今朝”,寒……
不过说实话,如果衣食无忧,这种生活挺爽,哇咔咔~

翻出一张老图
Win 7 发售了,对我的意义来说就是又多了一个平台要测试,软件是基于 .net 的,应该问题不大,就是看看驱动是否能够不修改移植过去。
昨天整理硬盘,翻出一张老图:
哇哈哈,10 年前的《电脑爱好者》杂志。这图片貌似是当初第一次买扫描仪,随便抓了本杂志试扫描仪留下的。
64M 内存,6.4G 硬盘,估计当时算海量吧,现在连个 Win7 都安装不下……
手上的那块 ARM 开发板,除了没有独立显卡,其他硬件性能已经超过 10 年前的电脑了~
10 年后又是啥样捏,现在多扫描点东西留起来 ![]()
慎用焊锡膏
焊东西都要加点助焊剂,一直以来用松香,便宜又好用,但是焊多脚的 SMD 贴片很不方便,后来换成日本产的一款焊油,相当好用。
但是这个日本焊油太贵了,而且含铅,前两天正好买元件,就顺便买了个国产的焊锡膏,两块钱一大桶,心想可用 n 年了。
结果,就被这桶焊锡膏搞了,晚上焊了几块板子,焊的时候感觉不错,甚至比那款日本的焊油感觉都好用,不过焊完了问题就来了。
先是工作电流应该只有几 uA 的电路,一上电就有三四 mA 的电流,而且还在不断变化,但是电路板上却找不到短路的地方,似乎一切正常。
于是开始一个一个拆元件,排除错误,哪里连焊了?芯片烧了?电容穿了?过孔连了?……
都不是。
最后我就震惊了,因为把所有的原件都拆除,就剩一张空板子,上电还有 1mA 左右的电流……
然后才怀疑到这个新焊锡膏上,测试了一下,果然如此。
拿了张新板子,板子上有一个 QFP 封装的 100pin 芯片,虽然引脚很密,但两个引脚肯定是绝缘的。
但是粘点焊锡膏,然后再拿烙铁烫烫刷刷,再测,竟然两个相邻的引脚有 50K 电阻!引脚相邻越远,电阻也就越大,不过即便很远的两个引脚,也有 2M 左右的电阻。
这下总算知道了为什么测不出短路,但是还有这么大的电流,因为这个焊锡膏,不是完全绝缘的!
可上焊锡膏的壳子上却印着”绝缘性良好“,网上查了一下,也确实有人提到焊锡膏腐蚀性很大,不适合电子焊接。
我也不知道是真不适合,还是国产货的质量太差,还是使用方法不对,也许是焊锡膏把板子腐蚀坏了吧。总之现在还是老老实实用回那个日本焊油和松香了了,虽然贵但是放心啊。
为了贪便宜耗费了一个晚上……
图为罪魁祸首。
改用 HootSuite 推
HootSuite 真不错啊,试用了一把就喜欢上了,可以同时用多个账号推,可以用多个分栏监视不同的推,UI 做得也很舒服,在宽屏下用起来很爽。
用了 HootSuite 才知道以前漏看了不少人的 reply,估计当时发了推就去睡觉或者去吃饭了,回来的时候被其他消息刷走了我又没仔细看。这下好了,reply 单独一栏~
今天在 HootSuite 上看大月饼直播,比看电视有趣多了~
