读书时也学过单片机,不过那是应付考试用的,而且当时用的是汇编语言,太难懂了。毕业后发现单片机的用途相当广泛,特别是想做一些功能处理,用模拟跟数字电路都要比较复杂才能解决的问题,用单片机却可以轻松搞掂,那时已有重学之心,但后来又由于各种原因总是一拖再拖。直到上几个月,觉得还是趁着年轻,多学一两项技术傍身吧,自用也好,谋生也罢,懂多一点总是有用的,于是重学单片机又再放上日程了。上网查看了一下,原来现在的编译器已经支持C语言了,大喜!一拖再拖不想学单片机,就是因为当时的编绎语言是汇编语言,难懂移植性低且枯燥,但C语言可是我的强项,读书时就能用C语言编些小病毒来捉弄一下同学了(后来那程序还发表上《电脑爱好者》,印像中赚了100块的稿酬)……
接着从网上订回了一块功能较齐全的51单片机学习板,几天就到货了,正式开启了我的单片机之路 。
跟着资料学习了一个星期后,接到了第一个工程任务,就是帮一台老式的电冰箱装控制器。 这款老式的冰箱温度控制器是机械式,就是那种热电偶形式,通过热电偶的热涨冷缩去接通或断开冰箱压缩机,从而达到恒温原理。但这个控制器已损坏,于是正好用51单片机做一个控制器,可以达到高精度控制。由于人家并没有提出具体的交货时间,所以可以边学边写程序,慢慢来,毕竟这时才正式学习单片机1个星期。
然后在选材上就用DS18B20这个做温度检测,就一个IC,通过跟单片机的协议通信,就可以直接得出检测温度了,简单可靠。于是又从网上订来了DS18B20IC跟单片机最小系统板。顺便下载了一个参考案例协助编写程序。
看似简单,但实际操作起来还是相当的麻烦的,因为温度传感器是走单总线形式, 编程上还是相当的麻烦的,最重要的是,这个参考资料居然是有错误的!!按它的程序,完全无法得到正确的温度,后来只能看着IC的功能介绍,一步一步慢慢调试,终于在花掉两个晚上后,成功地在学习板上显示出正确的温度值了。
然后拿自家的冰箱不断做测试跟调整程序 。按照人家的要求,初步设计三档选择,低档为急冻室温度在-3度时压缩机停机,升到-1度时压缩机再次工作制冷,中档是-4到-2度,高档是-6至-3度,然后设计了一个防错值,若选择开关信号不良,则自动在-4到-1度运行。对于这种双阀值的设计,若用普通的模拟电路来实现,相当困难了,但单片机来说则只是写程序而已,轻松完成。又花了一晚的时间,总算把所有功能都在学习板上调试完成通过了。
接着画好原理接线图,买齐各种零件,开始实物电路组装了。为了让单片机更稳定地工作,所以把晶震也用慢一点的8MHZ,这个晶震就是决定单片机的工作频率了,最高支持到40MHZ,但频率越高,工作稳定性越差。总供电电压为12V,而由于单片机使用工作电压为5V,所以还要有一个5V的三端稳压管,继电器用12V驱动,减轻5V三端稳压管的负载,单片机通过ULN2003驱动继电器,原本打算用分立原元做降低成本,但后来还是觉得用IC稳定可靠一点。
原本以为这只是一件很轻松的事,毕竟外围电路相当简单。谁知接好后居然完全不能工作!晕得一阵阵,多方排查无果!最后实在没法,唯有查成品的单片机最小系统的电路了,这一查还真查出问题了,原来订回来的最小系统板订错了,订的是AVR的系统板,外观跟我要的51单片机系统板外观几乎一样,但就是完全不通用的!怪不得死活不工作了!就这个最小系统板,订的时候没注意看,结果浪费了我大量的时间,悲~~
由于打算赶在五一放假前交货,再订系统板赶不及了,于是把插座焊下来,再手工搭桥吧!还好自己的焊接功底还可以,不到一个小时间就重新整理完成线路板了。橙色线就是高中低的选择端,插到下面的三个针上代表选择。
再次试验,终于程序能正常运行了!但试了一会儿,问题又来了,继电器不能保证每次都能良好吸合!测量过继电器是没有问题的,ULN2003也是好的,单片机也是好的!学习板上驱动继电器的也是ULN2003,每次都工作得好好的,但在这里单片机却有时会驱动不起ULN2003,无奈唯有给ULN2003的驱动脚接了个10K的上拉电阻,终于能每次都能可靠地通断继电器了。
五一时把电路板装到冰箱上了,看到工常工作,并两次循环正常后,才有点放下心来。 但其实内心还有点小不安的,因为最大的隐患是我这个设备没有装上看门狗电路,万一单片机运行到神马时候死机了,没看门狗那它永远就无法自行复位,那冰箱的压缩机要么就是一直制冷,要么就是一直不制冷,所以还是属于有缺陷的设计,还好,现在得到的消息是,那家伙不间断工作了一个星期,未曾死过机,且我装上去的是52单片机,理论上比51单片机的稳定性要高得多,而且52单片机支持软件看门狗,可以用程序做看门狗,迟点学习好后,把新的程序刷写到这个单片机上就行了。