电子门锁软件的设计模式

来源:互联网 发布:ubuntu 删除当前用户 编辑:程序博客网 时间:2024/04/27 19:51
    电子门锁软件作为众多电池供电的嵌入式软件大家族中的一员,这类系统都有一个普遍的问题,就是要尽可能地降低系统功耗,另外,因为次类系统处理事情相对不多,为了从成本方面考虑,应尽量选用8位单片机,综合众多单片机厂商的性价比,我觉得Atmel mega88系列是电子门锁软件的不二人选,下面说说该类系统设计的普遍模型,我们知道,嵌入式软件设计有两类模型:一是前后台系统模型,二是基于os的模型,其中是针对较复杂的系统设计而言的,而对于电子门锁软件,前后台系统模型足以应付。下面我跟大家介绍下前后台系统模型在电子门锁软件中的应用:    首先,让我们来了解下什么是前后台系统:    应用程序是一个无限的循环,循环中调用相应的函数完成相应的操作,这部分可以看成后台行为。前台程序通过中断来处理事件;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情况下,后台程序也叫任务级程序,前台程序也叫事件处理级程序。在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求特别严格的操作通常由中断来完成,仅在中断服务程序中标记事件的发生,不再做任何工作就退出中断,经过后台程序的调度,转由前台程序完成事件的处理,这样就不会造成在中断服务程序中处理费时的事件而影响后续和其他中断。    对前后台系统有了一个清楚的了解,下面我们来着手设计我们的门锁软件了,一般门锁电路均由以下5个模块组成:声光提示模块、马达控制模块(控制开关门)、日志记录模块(为了出于安全,对每一次开关门都必须记录日志,以便于跟踪调查)、通信处理模块(上传日志记录)、身份验证模块(例如只有身份合法的才能开们)。因为电子门锁采用的是电池供电,为了降低系统功耗,我引入了一个电源管理模块,负责管理整个系统功耗,对于外设,如蜂鸣器,led灯,马达通信端口等,只有它们需要启动的时候才给其供电,其余时间均处于断电状态,对于cpu来说,空闲时,让其休眠,工作时让其从休眠中唤醒,在电子门锁软件中,这个任务往往较给身份验证模块来完成,因为它是门锁系统的发起者。    1.声光提示模块的设计    该模块主要完成,led闪烁频率及闪烁次数,蜂鸣器的鸣叫的次数及频率,这个很简单,不论是控制led的亮灭还是蜂鸣器的叫与不叫,都是控制三极管的通断,设计难点关键是频度的控制,而这需要采用延时的方法,一是通过软延时的来达到,由于本设计采用的是前后台系统,这势必会占据大量的cpu时间,导致其他任务无法执行,因此这里采用定时器延时的方法,这样我们可以在闪灯的同时,可以开门,可以鸣蜂鸣器,从而达到更加人性化的设计效果。    2.马达控制模块的设计    马达控制电路实际上是一个h桥,控制马达的正转和反转,从而达到开门和关门的目的,其控制方式也是控制三极管的通断,为了使马达能够完全打开,马达需要上电大约5S,才能保证门锁能够完全打开和关闭,这过过程也需要一个延时,我们这里同样采用硬延时的方法。    3.日志记录模块的设计    日志记录模块需要操作EEprom,我们知道操作EEprom相对来说是比较耗时的,不过因这种操作只是在马达控制模块调用的时候才会调用,而且写一条日志记录也就几ms的事情,因此日志记录模块不做特殊处理,直接调用对应的写指令就行了,另外值得说一下,这里采用的eeprom采用的是at24c64,软件采用的模拟i2c程序与之通信,对于模拟i2c网上一大把,这里就不细述了。    4.通信处理模块的设计    前面讲了,通信处理模块主要目的是向pc端上传日志记录数据,便于跟踪,因从成本上考虑,这里采用的是模拟串口,网上也有类似的程序,这里也不做叙述。    5.身份验证模块的设计    身份验证模块是整个门锁控制软件的关键模块,它主要由按键模块、IC卡模块或者指纹识别模块组成,对于按键模块主要采用行扫描法扫描按键,注意按键防抖,一般需要二次读键状态码,两次读键码的时间间隔为10ms(经验值),10ms的延时采用定时器延时,不宜使软延时,这样会严重影响系统性能,另一个要注意的,按键是将cpu从休眠中唤醒的一种方法,ic卡模块采用的是rc522 读卡芯片,网上都可以找到rc522芯片的代码,在这里也不赘述,指纹识别模块采用专门的指纹识别芯片,采用的通信口为串口,可以共用通信处理模块,通过串口向指纹识别模块发送命令,如采集指纹,指纹匹配,指纹注册等,最后,需要注意的是,该模块是耗电的模块,当按键模块、ic卡模块、指纹识别模块不在使用的时候,应将按键模块的io口置为相应状态,对于ic卡模块、指纹识别模块应切断其电源,从而有效地降低系统功耗。    6.电源管理模块的设计    为了使系统的功耗降到最低,尽可能延长设备工作时间,本设计专门设计了一个电源管理模块来监控系统的电源使用情况,该模块监控系统每一个外围设备的工作状态,当外设不需要工作时,就使该外设进入最小功耗状态,另外,该模块还负责cpu的休眠和唤醒,休眠和唤醒也是通过检测系统的状态来进行的。    7.各模块之间的交互设计    前面我们介绍了门锁软件的各个模块之间的设计,现在,我们看看是怎么把这些模块安放到前后台系统中的,首先是前台系统安放的内容有,按键中断服务程序,负责唤醒cpu,这是cpu进入工作模式的唯一途径,其余时间cpu一直处于睡眠状态,在主程序中,当检测到cpu处于工作状态,启动定时器,定时器的最小时间间隔为10ms,这个在电子锁软件中以足够,主程序中会根据该时间间隔,来建立一个5s中调用一次的程序,1s中调用1次的程序,100ms调用一次的程序,根据你的要求将这些模块的相应的接口安插到相应的调用处,值得注意一点,每个模块都有一个状态,启动、运行和结束状态,这个需要我们在设计的时候合理的置相应的状态,这样便于电源管理模块执行动作。    总结,本文将嵌入式系统中常用的前后台系统的设计思想应用在电子门锁的设计上面,另外详细叙述了嵌入式软件的低功耗的设计方法,大家也可以将这些方法应用到其他的嵌入式设计中。
原创粉丝点击