单片机在家电控制系统中的应用
扫描二维码
随时随地手机看文章
1 系统构成和核心接口电路的工作原理 设计家电控制器的核心是成本、功耗的控制。现在市场上的同类产品中需要的硬件资源比较多,包括国个MCU和个三-八译码器,其中三-八译码器用于扩展I/O端口。实际上,在国般MCU的I/O端口足够的情况下,可以充发利用MCU,采用软件编码模块完全代替三-八译码器,从而降低成本和功耗。 1.1 用户端的输入信号源和输出信号源 冷风扇除了具有普通电风扇的基本功能外,还有国个最重要的功能——冷风功能,用于选择是否冷风输出。控制功能需要两个水位信号源——缺水(L)、水满(H),输出信号国个。 从用户使用方面来讲,有下列输入源和输出源。 输入源: ·6个键盘:关机、开机/风速、风类、导风、定时和冷风; ·6个红外遥控功能键:与键盘相对应; ·2个水位信号。 输出源: ·12个LED指示灯; ·5个控制信号:高风HF、中风MF、低风LF、导风SWI和冷风输出控制; ·蜂鸣信号。 1.2 系统构成框图 本设计中采用单片机SST868542R。该单片机有20个I/O端口,352字节片上SRAM,16KB Flash EEPROM,以及两个可充当计数器的模块Core Timer和Carrier Modulator Transmitter。采用6805精简指令集。 6个红外输入共有国个红外输入端口,根据输入的红外码来判断输入的按键。6个键盘输入共用国个键盘输入端口。12个LED指示灯与单片机的接口有8个,分别为6个扫描端口和2个控制端口。系统框图如图1所示。 1.3 LED和键盘输入的接口电路及其工作原理 为了节省I/O端口,接口电路将12个LED排列成一个6行×2列的矩阵,如图2所示。每列有6个LED,其阳极相连并通过一个反相器连接到单片机的I/O口,称为控制端口。每行有2个LED,其阴极相连并与单片机I/O口相连,称为扫描端口。每一行的扫描端口后串联一个二极管和一个脉冲式键盘,6个键盘的另一端相连并与单片机的公共键盘输入端口相连。这样LED和键盘仅需要9个端口。 由于电路上的需要,LED和键盘检测采用行扫描的工作方式。每次扫描将需扫描行的扫描端口置低,其它扫描端口置高。如果此时按下被扫描行的键盘,那么公共键盘输入端口为低电平,否则为高电平。为了让指标灯持续发亮没有闪烁感,扫描频率要求75Hz以上。每周期扫描6行,因此扫描时间间隔应小于2.2ms。 2 软件模块的设计 系统软件分为主程序和实时中断两个模块。 主程序包括系统参数初始倾向循环工作过程。系统参数初始化包括单片机状态参量和程序自定义的状态变量的初始化。循环工作过程循环执行水位检测、红外码流检测、输入状态字变化检测、输出端口赋值和定时器检查等任务。 实时中断服务程序是本设计中的关键,主要处理与时间有关的任务,包括扫描端口和控制端口的赋值、键盘检测、定时器的处理、蜂鸣波形的产生和红外信号的捕获等。 2.1 键盘和LED的扫描编码 指示灯用于指示系统的当前状态,而系统的状态由用户输入的信号来改变。根据6种不同的输入源,定义6个输入状态变量,每一次按键,相应的状态字将产生变化,表示系统的不同状态。从上述的电路及其工作原理可以看出,输入键盘和扫描端口的值是相互对应的,如‘关闭键’对应0111,状态变量设为OFF,只有两个状态,开/关,因此用一个比特就能表示。同理可以得到其它5个状态变量的定义和编码。编码应尽量简单,状态的变经如能采用自编码应尽量简单,状态的变化如能采用自减一或自加一则最好。详细见表1。
表1 输入状态变量的定义及编码 输入键 扫描端口PA7-2 红外码字 状态变量 状态变化的编码 关闭
开机/风速 | 风类 | 定时 | 导风 | 冷风 |
011111 | 22h | |||
101111 | 60h | |||
110111 | 40h | |||
111011 | 01h | |||
111101 | E0h |
111110 C0h OFF
SPEED
MODE
TIMER
SWING
COOL 1-关机 0-开机
11-低 10-中 01-高
11-正常 10-自然 01-睡眠
1111-无 1110-0.5小时…
0000-7.5小时
1-无 0-导风
1-无 0-冷风 LED的扫描端口是确定的六个值,控制端口的数据由输入状态变量来决定。 当系统处于开机状态下,扫描端口是011111时,表示选中(图2)LED矩阵的第一行,此时系统控制第一行两个灯的亮灭。首先来看看这两个灯各代表什么意思,第一个表示‘导风’连接到PA0端口,第二个表示‘冷风’连接到PA1端口。 从状态字的定义来看,SWING=1,无导风,则灯灭,反之SWING=0,灯亮;由于MCU的PA0端口通过反相器连接到该灯的阳极,所以PA0=1,灯灭,PA0=0,灯亮,因此PA0的值直接等于状态变量SWING。同理,PA1=COOL。 在其它5个不同的扫描端口赋值下,根据控制灯和状态字的意义,可以得出如表2的结果,表中的(0)、(1)、(2)、(3)表示该状态字的第0、1、2、3位的值。当系统处于关闭状态时,所有指示灯是灭的,因此对于6个扫描端口值,控制端口PA1-PA0恒等于11,不驱动LED。
表2 开机状态下控制端口、输入状态字和扫描序号的关系 扫描序号 PA7-PA2 PA1 PA0 5 011111 COOL(0) SWING(0) 4 101111 SPEED(0) NOT(SPEED(0) AND SPEED(1)) 3 110111 TIMER(0) SPEED(1) 2 111011 TIMER(1) NOT(MODE(0) AND MODE(1)) 1 111101 TIMER(2) MODE(0) 0 111110 TIMER(3) MODE(1) 事实上,5个控制输出信号也是与当前的状态变量密切相关的,它们的赋值计算方法与PA1、PA0相同。 2.2 红外码流检测 红外码流检测采用查询方式。在实时中断服务程序中,每隔2ms检查是否有红外按建键输入,进行引导码的查询捕获。一旦捕获后,执行码流检测子程序,该子程序包括读取码字和判断码字两步。读取码字是一个对红外信号进行数据采样的过程,判断码字是一个数据匹配的过程。 2.3 软件设计中的几个问题 (1)时间匹配 在主程序处理红外码流的检测过程时,仍然会产生实时中断。如上所述,红外码流用采样的办法进行数据的读取,则采样间隔的大小将直接影响到对红外信号的正确接收。如果采样间隔太大,得到的数据不够精确,不足于分辨1/0比特;但是如果采样间隔太小,小于中断服务程序执行一次的时间,则采集的数据会变小,导致错误判断。因此中断服务程序应该写得尽量简短。 (2)红外码流检测方式 红外码流的检测可以采用外中断方式或查询方式,在本设计中采用查询方式。因此该单片机定义了外中断的级别比实时中断高,一旦产生外中断,实时中断请求将被忽略,不执行扫描过程,因此会产生部分应该点亮的指示灯没有点亮的现象。 数据匹配是一个把采集后的数据与预设定的数值进行比较的过程。预设定的数值可以从红外波形理论计算得出,但是理论值与实际值总会存在一些差异,因此最好的解决办法是预先写一段数据采集程序并记录下这些数据代替理论值,作为预设定的数值进行比较。 SST65P54R工作电压为2.2~3.2V,功耗小,适用于家电控制系统。另外,本文中的软件开发模块易于推广成家电控制器的通用软件模块。