#一、 整体思路
紫外消毒烘干器是一个集紫外杀菌和加热板烘干功能、数码管时间显示功能于一体的日常家用小电器。它的原理比较简单,就是在32位ARM Cortex-M0内核的微处理器上读取时钟芯片,通过与读取到的时钟信息对比在固定时间微处理器驱动紫外灯板和加热板模块工作。这样最基本的能按固定时间消杀和烘干的紫外消毒烘干器就做好了。如果需要的话(看起来更上档次一些)可以加上时间显示模块(LCD1602、OLED或LCD12864都可以)、按键时间调整模块、电源状态监测模块、电量显示模块等,最后在程序里面实现用户可以自己设定消杀时间和电压报警监测这样的话高档次的紫外消毒烘干器就实现了。
# 二、 各个模块设计
根据整体思路,紫外消毒烘干器暂时细分为分为电源检测模块、数码管时间显示模块(包括时间采集、时间显示)、时间调整模块(包括系统时间、用户自定义时间)、整体工作模块(消杀、烘干、除湿)、电源检测及报警模块等五个大的模块,如果想各个模块更简洁可以将括号里面的内容都细分一下(这样虽然程序条理更清楚但每个模块的.c、.h文件内容就不会很多只有一两百行代码,看起来会给人一种代码量不多的感觉)。
## 1、电源检测模块
电源检测模块主要适用于有想把消毒架做成电池供电的类型,考虑到电池待机时长和电池容量(本就是个体积不大的小产品,不可能在内部整个几万毫安的电池)。为了增加电池供电时的待机时长,在电池供电时必须要砍掉或优化一些高耗能的功能,例如显示部分可以调低显示的亮度等级(这里用的数码管显示时间)、减小除湿风扇的驱动频率、烘干模组如果功率过高就可以直接砍掉或者优化一下(但现在市面上的产品基本上是把这个功能砍掉了)等。只要思想不滑坡,方法总比困难多嘛!具体要优化那些东西就根据自己的需求来,我这里是把烘干功能关闭了、调低了显示数码管的亮度等级。
电源检测模块其实很简单,只要在外部供电和电池供电时有明显且可以利用的区别就可以实现。相信大家已经想到了,不错就是充电宝。充电宝在充电和不充电的时候不就是这样的吗?再加上现在充电宝方案这么成熟而且充点电宝的电源芯片又不贵,简直就是最完美的选择。至于选择何种芯片就看你自己了。我是用的以前一个坏的充电宝的电源芯片IP5306,它的资料在网上一大堆,它的数据手册不仅有各种电气信息而且还给出了典型的应用原理图,最重要的是它灯在亮的时候是用PWM控制的这也太方便检测状态了,简直不要太舒服。我用的是双灯显示模式。在程序里面是在固定时间检测两个灯的电平变化次数,然后通过次数来确定状态。
电源检测参考程序:
Flip_Level_1=GPIOC_ReadPortPin(GPIO_Pin_1);
Flip_Level_2=GPIOC_ReadPortPin(GPIO_Pin_2);
while(Computing_Time(Get_Time(),Time_Power_LED)<2000)
{
if(Flip_Level_1!=GPIOC_ReadPortPin(GPIO_Pin_1)) {i++;}
if(Flip_Level_2!=GPIOC_ReadPortPin(GPIO_Pin_2)) {j++;}
Flip_Level_1=GPIOC_ReadPortPin(GPIO_Pin_1);
Flip_Level_2=GPIOC_ReadPortPin(GPIO_Pin_2);
// PRINT("电平变化次数:i=%ld j=%ld\r\n",i,j);
}
//数值经供参考,以实际测量为准
if((i>40)&&(i<160)) POWER_LED1=2;
if(i>200) POWER_LED1=1;
if(i==0) POWER_LED1=0;
//数值经供参考,以实际测量为准
if((j>40)&&(j<160)) POWER_