上篇我们完成了主要的功能分析以及一些底座的设计与制作
接下来主要就是电路部分的硬件以及程序设计了.
控制部分主要分为以下几个部分:

其中控制部分使用我最熟悉的51单片机,之前考虑过要不要试试看STM8,后来想想,不熟悉,还是算了,以后有空好好学吧.用的51单片机是STC15W408AS,其拥有8K程序空间,512字节的SRAM,以及5K的EEPROM,5个定时器以及硬件PWM输出.其实这个选型是失败的,但是因为手边只有这个芯片比较多,所以就用这个了,如果是我真的打算好好选型,主要是两点,首先引脚会根据外围去排,找个引脚数量达到或轻微超过要求的,这个芯片正好歪打正着,基本所有引脚都用到了.另外还要看定时器,以及是否有硬件PWM输出,因为本项目作为一个温度控制类的项目,需要通过PWM来调整输出,在这里就是PTC加热元件,要通过对比温度传感器所获取的温度以及设定温度的差值来调整PTC加热元件的加热功率.故如果有硬件PWM输出是最好的,没有的话只能使用定时器去软件PWM,也是可行的.

另外我还需要一个定时器去做系统心跳,我写程序有个习惯,一定要有个系统心跳,在系统心跳内做一些程序处理,可以做到类似非阻塞的效果.比如一些蜂鸣器鸣叫的情况.完全没必要让程序卡在那里等着蜂鸣器鸣叫完毕再执行下一行.如果单独用定时器配合中断去做蜂鸣器的鸣叫的话,又太浪费了,对于这种没有特别高时间要求的小功能,我会开一个定时器,产生一个系统心跳中断,例如每1ms调用一次系统心跳中断服务函数,在函数内进行分频,例如蜂鸣器10ms处理一次状态,ADC每5ms读取一次电压值等.
接下来是出电路原理图.

说一下几个考量,数码管部分,本来考虑使用网上的两个595芯片的方案,但是之前试过,发现时序要求挺高,自己做出来的效果不是很好,所以就放弃了,换专用的驱动芯片TM1620,换上去以后程序也好电路也好省心好多.另外那个按钮最后决定使用电容触摸模块,因为底座的控制面板是3D打印的,所以我尽量少开孔,毕竟没有机器了,只能淘宝上打印,一个孔直径不对很麻烦的.这个图的方案是后期的,第一期的板子在5V稳压部分不是这样的,用的是一片AMS1117-5.0V来解决5V供电的问题.但是后来发现可能是压差过大的原因,12V转5V虽然电流只有几十mA,但是LDO芯片发热很大,但是还是能长时间工作,故考虑第一期暂时就这样,后面换了Buck降压来解决这个问题.
另外原先考虑的是一个PTC发热元件配一个MOS管,但所有mos管的G极相连(统一开关),但后来发现PTC发热元件有个启动电流比较大,而且持续时间比较长,故第二期换成独立开关,分时打开mos来保证电流不超过12V电源的供电能力.
然后是去电路板打样.


OK,今天就先到这里~