logo
 
首页-> 产品信息-> 8位单片机
 
入门指南
开发&工具
应用方案
客户支持
 
学习e条龙
一、单片机简介 二、指令系统 三、IO端口 四、中断系统
五、定时/计数器 六、串行接口 七、模拟外设 八、其它硬件
九、开发工具 十、应用实例 十一、附录  

SPMC65 系列单片机的应用实例

内容索引
10.1 ADC一线键盘输入应用 10.4 利用PWM实现音乐播放
10.2 SPI串行接口读写EEPROM  10.5 SPMC65P2404A在智能电饭煲中的应用
10.3 红外遥控接收应用例  10.6 SPMC65P2408A在定频空调中应用

10.1 ADC 一线键盘输入应用

  按键输入是单片机最基本的应用之一,本例将介绍利用 SPMC65 内置的 ADC 实现的按键输入功能,其特点是多个按键通过一条线与单片机相连,大大节省了 I/O 资源。本应用实例适用于具有内置 ADC 的 SPMC65 单片机,这里以 SPMC65P2404A 为对象加以说明。

10.1.1 功能规格

  利用 SPMC65P2404A 的 A/D 转换功能,扫描 16 个按键,并通过 4 个发光二极管将键值显示出来。

10.1.2硬件设计

  系统硬件框图如 图 10.1 所示,所有按键通过一个 A/D 转换通道( PA0 )接入单片机, PC3~PC0 初始化为输出低电平,分别接 4 个发光二极管 , 它输出的 16 种状态 1111~0000 分别表示按键 S15~S0 被按下。

图 10 . 1 ADC 一线键盘输入应用硬件框图

  如 图 10.2 ,按键 S0~S15 与电阻网络相连,当不同的按键被按下时, AD 转换的电压不同,通过 AD 转换值便可以判断出是哪个按键被按下。此种方法只能响应单个按键,若同时按下两个或两个以上的按键,则 AD 会采到错误的电压值,程序或者不响应,或者给出错误的键值。

图 10 . 2 键盘显示原理图

  AD 转换出来的结果共有 10 位,在程序中取其高 8 位作为有效位,便可以分辨出这 16 个按键。按键、输入电压和 AD 转换值(高 8 位)的对应关系如 表 10.1 所示。

表 10 . 1 按键与电压、 AD 转换值关系

按键

转换电压( V

A/D 转换值 ( 理论 )

0

00h

S0

0.156

08h

S1

0.469

18h

S2

0.781

28h

S3

1.094

38h

S4

1.406

48h

S5

1.719

58h

S6

2.031

68h

S7

2.344

78h

S8

2.656

88h

S9

2.969

98h

S10

3.281

A8h

S11

3.594

B8h

S12

3.906

C8h

S13

4.219

D8h

S14

4.531

E8h

S15

4.844

F8h

  但是,由于各分压电阻的阻值存在误差等原因,实际的 A/D 转换值不一定与理论值完全相同。在本例中,将 A/D 转换值的误差允许范围设置为± 4 ,例如 A/D 转换值在 14h~1Ch 之间时,都认为 S1 被按下。

  对于 16 个按键,选择精度为± 5 %的分压电阻即可。在选用分压电阻时,应当避免分压电阻产生累积误差。如果选用精度为± 1% 的电阻,则可以分辨出 32 个按键。

10.1.3 软件设计

  主程序流程如 图 10.3 所示,主程序每隔 8ms 扫描一次键盘,并刷新一次显示。

图 10 . 3 键盘显示主流程图

  其中,按键扫描子程序是本例的核心内容,在该子程序中采集 A/D 转换值,判断是否有键按下。为消除按键闭合和打开瞬间的抖动产生的影响,当检测到按键被按下后,便开始读取键值,每隔 8ms 读一次键值,直到连续 4 次读取的键值完全相同,则认为抖动已经消除。消抖时间为 8ms X 4 = 32ms 。

图 10 . 4 按键扫描子程序流程

  按键扫描子程序的部分代码如下:

 F_ADKeyx16:
 
   lda  P_AD_Ctrl0
    
   and  #11111110B
    
   sta  P_AD_Ctrl0   ; 执行 A/D 转换
 
  L_TestAdcL2:
 
   lda  P_AD_Ctrl0
    
   and  #00000001B   ;A/D 转换完成 ?
    
   beq  L_TestAdcL2
    
   lda  IB_KeyupFlag
    
   bne  ?L_JudgeUp   ; 检测按键放开标志
 
  ?L_KeyCope:
 
   lda  P_AD_DataHi   ; 取 A/D 采样值的高 8 位
    
   and  #$F ;\
    
   cmp  #$4 ;+
    
   bcc  ?L_CmpClr    ;+ = A/D 采样值超出范围?
    
   cmp  #$C       ;+
    
   bcs  ?L_Keyup     ;/
    
   lda  P_AD_DataHi
    
   and  #$F0
    
   cmp  IB_KeyValue   ; 与上次获取的键值比较
    
   beq  ?L_Inc
    
   sta  IB_KeyValue
    
   jmp  ?L_CmpClr
  
  ?L_Inc:
 
   inc  IB_CmpTimers    ;\
    
   lda  IB_CmpTimers    ;+ = 已经进行了 4 次比较?
    
   cmp  #CB_CmpTimers    ;+
    
   bcc  ?L_ADKeyx16Exit   ;/
    
   lda  IB_KeyValue     ;\
    
   lsr  a          ;+
              
   lsr  a          ;+ = 取得键值
              
   lsr  a          ;+
              
   lsr  a          ;+
    
   sta  GB_KeyValue     ;/
    
   lda  #1
    
   sta  GB_KeyDownFlag    ; 将按键动作标志设为 1
 
  ?L_Keyup:
 
   lda  #1
    
   sta  IB_KeyupFlag     ; 将按键放开标志设为 1
    
   jmp  ?L_CmpClr
 
  ?L_JudgeUp:
 
   lda  P_AD_DataHi
        
   cmp  #$4          ; 按键是否放开 ?
        
   bcs  ?L_CmpClr    
        
   inc  IB_CmpTimers     ;\
        
   lda  IB_CmpTimers     ;+ = 已经进行了 4 次比较?
        
   cmp  #CB_CmpTimers     ;+
        
   bcc  ?L_ADKeyx16Exit   ;/
    
   lda  #0
    
   sta  IB_KeyupFlag     ; 按键放开标志设为 0
 
  ?L_CmpClr:
 
   lda  #0
    
   sta  IB_CmpTimers
  
  ?L_ADKeyx16Exit:
 
  rts

10.2 SPI 串行接口读写 EEPROM

  SPI ( Serial Peripheral Interface )总线系统是一种同步串行外设接口,它使用 4 条线:串行时钟线、输出数据线、输入线和片选线。支持同步全双工通信方式。本例使用 SPMC65P2404A 的 SPI 功能访问 AT93C46 , AT93C46 是基于标准 SPI 总线接口的 EEPROM ,采用同步串行方式进行通信。

10.2.1 功能规格

用 SPMC65P2404A 的 SPI 功能访问 AT93C46 ,实现数据存储、读取及擦除等操作。

10.2.1 硬件设计

  AT93C46 为 SPI 总线接口方式的 EEPROM ,采用 4 线串行同步方式工作,容量为 128 Byte ,其芯片引脚名称和功能描述如 图 10.5 所示:

图 10 . 5 AT93C46 管脚定义及封装

  图 10.6 为单片机与 AT93C46 的硬件连接图。在单片机中, I/O 口的设置为: PC0 、 PC3 设置成低电平输出口, PC1 设置成高电平输出口, PC2 设置成带下拉电阻的输入口。

图 10 . 6硬件连接图

10.2.3 软件设计

  AT93C46 在时钟信号 SK 的上升沿输入数据,下降沿输出数据,典型的读、写工作时序如 图 10.7 和 图 10.8 所示:

图 10 . 7 AT93C46 读时序

图 10 . 8 AT93C46 写时序

  AT93C46 主要有字节读、字节写、写整个存储器、字节擦写、擦写整个存储器、操作允许及操作禁止等 7 项操作。对于每项操作,用不同的命令区分,因此在每项操作前必须先写命令字,命令字为 3 位。接着写地址, AT93C46 容量为 128 Byte ,地址长度为 7 位。命令操作如下表所示:

表 10 . 2 AT93C46 操作命令表

  为了便于写操作,将命令字的最后一位并入地址码,与 7 位地址组成一个字节,如 图 10.9 所示。写入地址后,便可以进行读或写数据,数据按字节传送。

图 10 . 9 命令字与地址格式

  AT93C46 每次上电后,处于禁止写和禁止擦写状态,必须首先进行使能操作。使能操作的时序和流程分别如 图 10.10 和 图 10.11 所示。

图 10 . 10 操作使能时序图

图 10 . 11 操作使能流程图

  当完成对 AT93C46 的所有操作后,为了保护存储器内部数据,需禁止写入操作。写入禁止的操作流程如 图 10.12 所示。

图 10 . 12 操作禁止流程图

  从 AT93C46 的指定地址读取一个字节的程序流程如所示:

图 10 . 13 读取流程图

  从 AT93C46 读取字节程序的部分代码如下:

 F_RdByte:
 
   lda  P_IOC_Data
    
   ora  #$01 ; 初始化 I/O
    
   sta  P_IOC_Data
    
   lda  #11000110B     ; 清 SPI TX/RX 中断标志
    
   sta  P_SPI_Status
    
   lda  #00000011B     ; 发送起始位
    
   sta  P_SPI_TxData
 
  ?L_StartBit:
 
   lda  P_SPI_Status    ;
    
   and  #10000000B     ; TX 中断 ?
    
   beq  ?L_StartBit    ; 否
    
   lda  #11000110B     ; 清 TX/RX 中断标志
    
   sta  P_SPI_Status
    
   lda  GB_AddrBuf     ; 发送地址
    
   and  #$7F
    
   sta  P_SPI_TxData
 
  ?L_Address:
 
   lda  P_SPI_Status    ;
    
   and  #10000000B     ; 是 TX 中断 ?
    
   beq  ?L_Address     ; 否
         
   lda  #11000110B     ; 清 TX/RX 中断标志
    
   sta  P_SPI_Status
    
   lda  #$00        ; 发送占位数据
    
   sta  P_SPI_TxData
 
  ?L_Data:
 
   lda  P_SPI_Status    ;
    
   and  #10000000B     ; 是 RX 中断 ?
    
   beq  ?L_Data      ; 否
    
   lda  P_SPI_RxData    ; 读取数据
    
   sta  GB_RdData
    
   lda  #11000110B     ; 清 TX/RX 中断标志
    
   sta  P_SPI_Status
    
   lda  P_IOC_Data
    
   eor  #$01
    
   sta  P_IOC_Data     ; 延时以满足时序要求
    
   nop  
    
   nop  
    
   nop  
    
   nop  
    
   nop  
    
   lda  P_IOC_Data
    
   ora  #$01
    
   sta  P_IOC_Data
    
   nop  
    
   nop  
    
   nop  
    
   lda  P_IOC_Data
    
   and  #$FE
    
   sta  P_IOC_Data
  
   rts

  将一字节数据写入指定的地址中的程序流程如 图 10.14 所示。在将数据写入 AT93C46 后,需要一段时间的延时,查询 AT93C46 的输出 DO ,当 DO 输出高电平时,表明写操作完成。

图 10 . 14 字节写流程图

  在向 AT93C46 的指定地址写入数据前要将该地址中原有的数据擦除,擦写后地址中数据为 FFH 。字节擦除的操作流程如所示。

图 10 . 15 字节擦写流程图

10.3 红外遥控接收应用例

  红外遥控广泛应用于家电、玩具等产品以及工业设备控制场合。红外遥控系统由发射和接收两大部分组成,本节以 SPMC65P2404A 单片机为例,介绍 SPMC65 系列单片机实现红外遥控接收的方法。

10.3.1 功能规格

  本例以某电视遥控器作为红外发射源, SPMC65P2404A 对遥控器发出的红外信号进行解码,转换为遥控器按键值,通过一位 LED 数码管显示出来。

10.3.2 硬件设计

  红外信号是通过遥控器上的红外发射管发送出去的,为提高红外编码的稳定性,采取调制编码的方式,将编码与一定频率的信号调制,形成输出波形,通过红外发射管发射。 图 10.16 是调制过程的示意图。

图 10 . 16 红外编码调制示意图

  接收红外编码时,首先要进行解调,解调的过程是通过红外接收管实现的。其基本工作过程为:当接收到调制信号时,输出高电平,否则输出为低电平,如 图 10.17 所示。

图 10 . 17 红外编码解调示意图

  图 10.18 是基于 SPMC65 单片机的红外接收系统硬件原理图。红外接收管将接收到的信号进行解调,然后由 PB1 输入,单片机对其解码后,转换为遥控器按键值,通过一个 LED 数码管显示出来。

图 10 . 18 红外接收系统硬件原理图

10.3.3 软件设计

  该电视遥控器的数据编码格式如 图 10.19 所示。利用 SPMC65 单片机定时器的捕获功能对数据进行解码。

图 10 . 19 红外编码格式

  在程序初始化时,将打开 Timer3 的捕获中断,在捕获中断里完成数据的解码。数据解码流程如 图 10.20 所示:

图 10 . 20 数据解码流程

  数据解码的部分代码如下:

 F_IR_Receive:
 
   lda P_TMR3_CapHi
  
   sta G_ir_time          ; 获取捕获值
  
   lda G_ir_flag
  
   and #C_start          ; 接收起始位?
  
   bne ?_incetp_number_begin   ;
  
   lda G_ir_time         ;\
  
   cmp #135            ;+
  
   bcc ?_error_1         ;+= 判断是否起始位 (9ms)
  
   cmp #145            ;+
  
   bcs ?_error_1         ;/
  
   lda #C_start
  
   sta G_ir_flag        ; 设置数据接收标志
  
   jmp ?_incept_end
 
  ?_error_1:
 
   jmp ?_error
 
  ?_incetp_number_begin:
      
   lda G_ir_time        ;\
       
   cmp #14           ;+
       
   bcc ?_error         ;+= 接收到 "0"?
       
   cmp #22           ;+
       
   bcs ?_incept_1       ;/
       
   jmp ?_icept_number     ;
 
  ?_incept_1:
 
   lda  G_ir_time       ;\
           
   cmp  #30          ;+
           
   bcc  ?_error        ;+= 接收到 "1"?
           
   cmp  #40 ;/       
           
   bcs  ?_error        ;
           
   sec
 
  ?_icept_number:
 
   rol  G_ir_data+3
    
   rol  G_ir_data+2
    
   rol  G_ir_data+1
    
   rol  G_ir_data
    
   inc  G_ir_number
    
   lda  G_ir_number
    
   cmp  #C_ir_number      ; 接收结束 ?
          
   bne  ?_incept_end      ;
 
  ?_write_end:
 
   jsr  F_Data_Checkup    ; 调用数据校验程序
    
   beq  ?_error
    
   lda  #C_over
    
   sta  G_ir_flag
    
   lda  #0
    
   sta  G_ir_number
    
   jmp  ?_incept_end
 
  ?_error:
 
   lda #0
  
   sta  G_ir_data       ;\
          
   sta  G_ir_data+1      ;+
          
   sta  G_ir_data+2      ;+= 变量清零
          
   sta  G_ir_data+3      ;+
          
   sta  G_ir_number      ;/
    
   sta  G_ir_flag
 
  ?_incept_end:
 
   Rts

  数据解码过程中,要进行数据校验。数据校验子程序流程如所示。

图 10 . 21 数据校验子程序流程

  主程序在 1KHz 时基作用下,每隔 4ms 查询接收到的红外遥控编码数据,并将编码数据转换为遥控器按键值并显示出来。

图 10 . 22 主程序流程

10.4 利用 PWM 实现音乐播放

  音频有两种输出方式: Speech Mode 和 Tone Mode 。它们的区别在于输出的控制机理不同:前者是用与声音数据采样率相同的速率将声音数据通过数 / 模转换通道还原成音频电压或电流输出,可用于还原语音、音乐等各种声音;后者则通过控制声波振动的频率来决定发出的声音音调的高低,通常用于发出乐音。

  本例利用 SPMC65 定时器的 PWM 输出功能实现 Tone Mode 音乐播放,通过输出不同的频率给扬声器,可以发出 Do 、 Re 、 Mi 、 Fa 、 So 、 La 、 Ti 七个音符。

10.4.1 功能规格

  采用 SPMC65P2404A 芯片,外接普通的小喇叭( 8 欧, 0.5W )播放音乐《茉莉花》,用一个按键来控制音乐的播放和停止。

10.4.2 硬件设计

  音乐播放的硬件原理图如下, PA7 连接一个按键,用于控制音乐播放和停止; PWM 波形从 PB3 发出,由三极管驱动扬声器发出乐音。

图 10 . 23 音乐播放硬件原理图

10.4.3 软件设计

  本例采用 Timer1 的 12-bit PWM 方式输出,占空比 50 %,实现音频调频。音符和声音频率对照表如下:

低音

1

2

3

4

5

6

7

  频率( Hz )

220

247

277

294

330

370

416

中音

1

2

3

4

5

6

7

  频率( Hz )

440

494

554

587

659

740

831

高音

1

2

3

4

5

6

7

  频率( Hz )

880

988

1108

1174

1318

1480

1662

  根据各音符对应的频率,可以计算出 PWM1 计数器的重装值,当需要发出某个音符时,只需把相应的计数器重装值赋给 PWM1 计数器即可。以高音 La 为例,重装值的计算方法是:

  高音 La 的频率是 1480Hz , Timer1 的计数频率为 Fcpu/128 ,因此 Timer1 的计数次数应为 Fcpu/128/1480 。当 Fcpu 为 8000000Hz 时,计数次数为 42 ( 2Ah )。所以 PWM1 计数器的重装值为 1000h-2Ah=FD6h 。

  音符的节拍是通过控制 PWM 波形的持续实现的。音符节拍和持续时间对照表如 表 10.3 :

表 10 . 3 音符节拍和持续时间对照表

名 称

时 值

节拍

持续时间(中速)

全 音 符

1

4

4800 毫秒

二 分 音 符

1/2

2

2400 毫秒

四 分 音 符

1/4

1

1200 毫秒

八 分 音 符

1/8

1/2

600 毫秒

十 六 分 音 符

1/16

1/4

300 毫秒

  乐曲是由特定节拍的音符组合而成,为便于播放乐曲,对乐谱格式做出如下定义:

  在程序中,将十六分音符的持续时间 300ms 作为一个时基,计为 1 ,那么 600ms 可以表示为 2 ,依此类推。音调分为高音、中音、低音,将其计为 2 、 1 、 0 。曲谱中每个音符用两个字节来描述,第一个字节是音调,范围从 1 到 7 ;第二个字节的低 4 位表示该音符的持续时间,高 4 位表示该音符属于高音、中音还是低音。曲谱的最后用 0 表示结束符。下面是乐曲“茉莉花”的曲谱表:

 T_Music:
 
   .DB  3,$11,2,$11,3,$11,5,$11,6,$11,5,$11,1,$21,6,$11
    
   .DB  5,$11,3,$11,5,$14,6,$12
    
   .DB  1,$21,2,$21,3,$22,2,$21,1,$21,6,$11,1,$21,5,$14
    
   .DB  5,$11,3,$11,5,$14,6,$12,1,$22,2,$21,3,$21,1,$21,6,$11,5,$12
    
   .DB  5,$12,2,$12,3,$11,5,$11,3,$11,2,$11,1,$11,6,$01,1,$14
    
   .DB  3,$11,2,$11,1,$12,2,$13,3,$11,5,$12,6,$11,1,$21,6,$12,5,$12
    
   .DB  5,$11,3,$11,2,$12,3,$11,5,$11,3,$11,2,$11,1,$11,2,$11,6,$04
    
   .DB  1,$12,2,$13,3,$11,1,$11,2,$11,1,$11,6,$01,1,$11,6,$01,5,$04,0

  音乐播放程序的主循环时间为 4ms 。利用 Timer base 定时,采用查询方式检测 4ms 的到来。主程序流程如 图 10.24 所示。

图 10 . 24 主程序流程图

  音乐播放子程序流程如 图 10.25 。

图 10 . 25音乐播放子流程

  音乐播放子流程的部分代码如下:

 F_Song:
 
   lda  GB_Sound_flag
    
   and  #C_Allow       ; 允许播放 ?
    
   beq  ?L_CloseSong     ; 否
 
  ?L_Song:
 
   lda  GB_Sound_flag
    
   and  #C_Singing      ; 正在播放音符 ?
    
   bne  ?L_SingDelay     ; 是
    
   lda  GB_Sound_flag
    
   ora  #C_Singing
    
   sta  GB_Sound_flag
    
   ldx  GB_Number      ; 获取下一个音符
          
   lda  T_Music,x      ; 音乐播放结束 ?
        
   beq  ?L_CloseSong    ; 是
    
   tay  
    
   dey  
    
   inx  
    
   lda  T_Music,x      ; 获取音符持续时间
    
   sta  GB_300ms
    
   inx  
    
   stx  GB_Number
    
   and  #$F0         ; 低音音符 ?
         
   beq  ?L_LowMelody     ; 是
    
   cmp  #$10         ; 中音音符 ?
    
   beq  ?L_MidMelody     ;
 
  ?L_HighMelody:        ; 高音音符 ?
 
   tya
  
   tax
  
   lda T_MelodyH,x      ; 设置高音音符频率
  
   jmp ?L_TimeLength
 
  ?L_MidMelody:
  
   tya
  
   tax
  
   lda T_MelodyM,x      ; 设置中音音符频率
  
   jmp ?L_TimeLength
 
  ?L_LowMelody:
 
   tya
  
   tax
  
   lda T_MelodyL,x     ; 设置低音音符频率
 
  ?L_TimeLength:
 
   ldx #$FF
  
   stx P_TMR1_PWM1     ; 设置 PWM 控制寄存器
  
   sta P_TMR1_PWM0
  
   sta IB_Duty
  
   eor #$FF
  
   lsr A
  
   adc IB_Duty
  
   sta P_TMR1_PWM2     ;
  
   lda GB_300ms
  
   and #$F
  
   sta GB_300ms      ; 设置声音持续时间
 
  ?L_Start:
 
   lda #C_T112B_PWM    ; 将 Timer1 设为 12bitPWM
  
   sta P_TMR0_1_Ctrl0
  
   jmp ?L_Song_Exit
 
  ?L_SingDelay:
 
   inc GB_4ms
  
   lda GB_4ms
  
   cmp #75        ; 到达 300ms?
  
   bne ?L_Song_Exit    ; 否
  
   lda #0
  
   sta GB_4ms
  
   dec GB_300ms       ; 一个音符播放完毕 ?
  
   bne ?L_Song_Exit     ; 否
  
   lda GB_Sound_flag
  
   and #~C_Singing      ; 准备播放下一个音符
  
   sta GB_Sound_flag
  
   jmp ?L_Song_Exit
 
  ?L_CloseSong:
 
   lda #0           ; 结束播放
  
   sta P_TMR0_1_Ctrl0
  
   sta GB_Sound_flag
  
   sta GB_300ms
  
   sta GB_Number
 
  ?L_Song_Exit:
 
   rts

10.5 SPMC65P2404A 在智能电饭煲中的应用

  电饭煲是家居生活中不可缺少的电器,据调查,我国城市电饭煲拥有率已超过 90% 。随着工作、生活节奏的日益加快和人们生活水平的提高,微电脑控制的智能化产品呈现出一片蓬勃发展的景象,功能齐全、安全可靠的智能电饭煲即将取代机械式电饭煲而成为市场的主流。下面将介绍利用 SPMC65P2404A 单片机设计的智能电饭煲产品。

10.5.1 功能规格

  本节介绍的智能电饭煲将实现下列功能:

  多种煲煮模式。可选择精煮、超快煮、冷饭加热、小米量煮、稀饭、粥、汤等煲煮模式,电饭煲可根据所选的模式自动调节各加热阶段的时间和温度,使煮出的米饭味香纯正,达到最佳的煮饭效果。

  定时预约功能。可通过按键预定时间,电饭煲到时自动开始煮饭。

  LED 显示。采用 LED 动态显示电饭煲运行情况,以及定时预约的时间显示。

  温度超标报警。当温度超过 160 ℃时立即停止加热,并通过数码管显示错误信息,。

10.5.2 硬件设计

  电饭煲的工作原理可以简单的描述为:单片机通过按键获取用户选择的煮饭模式,根据温度传感器反馈的顶盖和底盘的温度信息来控制继电器的通断,从而实现对加热盘的加热控制,并把电饭锅的状态通过 LED 显示给用户。电源部分除了完成对加热盘进行加热外,还负责为单片机系统和外围电路提供 5V 电源。其原理框图如 图 10.26 所示:

图 10 . 26 智能电饭煲原理框图

1. 电源电路

  电源部分通过降压、整流、滤波之后,为单片机提供 +5V 的直流稳压源,同事获得的 +14V 电压对继电器进行供电,通过控制三极管射极的导通与否来控制继电器的工作状态。

图 10 . 27 电源电路原理图

2. 温度采集电路

  J2 和 J3 分别是顶盖和底盘温度传感器的接口,单片机检测的信号实际上是与温度传感器分压的电阻的电压值,它间接反映了某一时刻的温度,电路原理图如 图 10.28 所示。

图 10 . 28 温度采集电路原理图

3. 显示电路

  显示电路由共阳极数码管和 10 个 LED 发光管组成,通过单片机位选和所送的数据来点亮相应的 LED 或数码管,以显示电饭煲的工作状态。其电路原理图如 图 10.29 所示。

图 10 . 29 显示电路原理图

4. 按键电路

  方案设置了 5 个功能键,按键 K1~K5 分别采用 PA0~PA4 的下拉电阻输入。

图 10 . 30 按键电路原理图

10.5.3 软件设计

  煮饭过程实质上是使大米由难以被人体消化吸收的β淀粉转化成人体较易吸收的α淀粉的过程,该过程大体可分为“吸水”、“升温”、“沸腾”、“补炊”、“焖饭”、“保温”六个阶段,如下表所示:

表 10 . 4 煮饭过程的阶段划分

阶段名称

平均温度

作用

吸水

35 ℃左右

让大米尽可能的吸收水分,这样可使大米在升温的过程中均匀受热,不至于形成夹生饭。

升温

加热至沸腾

加热,使水达到沸腾温度

沸腾

98 ℃左右

使大米中的β淀粉充分转化为α淀粉。

补炊

98 ℃左右

蒸发掉多余水分

焖饭

利用余热

促进大米α淀粉的生成

保温

65 ℃左右

使米饭维持适当的温度,可以随时食用

  智能电饭煲的“精煮”、“超快煮”等不同煮饭模式就是通过控制上述六个阶段的持续时间实现的。以精煮为例,各阶段的持续时间为:吸水 10 分钟,升温 10 分钟,沸腾 20 分钟,焖饭 10 分钟,然后进入保温状态。

  主程序流程如 图 10.31 所示:

图 10 . 31 主程序流程图

2. 诊断子程序

  诊断程序主要进行温度采集并判断传感器是否良好,主要对 2 个温度传感器连续检测 20 次,若测到的数据不在范围内(温度范围: -10 ℃ ~160 ℃),则表明传感器短路或断路错误,数码显示“ E ”,并禁止按键操作。

图 10 . 32 诊断子程序流程图

3. 按键扫描子程序

  程序每循环一次扫描一次键盘,如果扫描到有键按下,则暂存键值,如果连续 5 次扫描到的键值都一样,则认为是稳定的键值。系统共有 5 个按键,在不同的状态下,每个键只要轻按一次就有效。系统的五个键接于 PA1 、 PA3 、 PA2 、 PA0 、 PA4 ,如果按键值有效则返回值的相应位为 0 ,否则相应位为 1 。

图 10 . 33 按键扫描子程序流程图

4. 温度采集子程序

  热敏电阻灵敏度高,为了防止干扰及其它原因导致测出的温度值变化太快,引起控制部件频繁动作,采取在同一个通道上连续采集三个数据,取其中的中间值的方法,如 图 10.34 所示。

图 10 . 34 温度采集子程序

5. 显示子程序

  系统共有 2 位七段数码管显示及 10 个发光二极管显示。数码管主要有 6 种状态需要显示:待机状态、出错显示、焖饭、保温、煮饭中及定时时间显示。发光二极管显示所选择的功能、开始及保温状态。功能显示需采用轮循方式,在按下开始键之前,开始灯闪烁。进入保温状态后,保温指示灯亮。 LED 显示程序由位码扫描子程序及数码显示状态选定子程序组成。数码管和 LED 分别有两个不同的寄存器控制着,有寄存器的数值决定着显示状态。

图 10 . 35 显示子程序流程图

10.6 SPMC65P2408A 在定频空调中应用

  近年来,我国空调器产业的发展十分迅猛,正在逐渐成为全球空调器生产基地。下面将介绍利用 SPMC65P2408A 单片机实现的定频空调机主控板方案。

10.6.1 空调工作原理

  空调分为室内和室外两个部分,其制冷原理如 图 10.36 所示,蒸发器中的低温液态制冷剂吸收周围热量,使室内空气降温,而制冷剂气化为低压气体;室外压缩机将低压气态制冷剂压缩为高压高温的过热蒸汽后排至冷凝器,其热量被室外空气带走,制冷剂凝结为高压液体,经过节流毛细管降压降温后流回蒸发器。室内外空气如此反复循环流动,达到室内降温的目的。

图 10 . 36 空调制冷原理

  空调制热的机理是令制冷剂的流向发生改变,使其在室内冷凝放热,在室外蒸发吸热。而空调中制冷剂的流动方向是通过四通阀来控制的。空调制热原理如图所示。

图 10 . 37 空调制热原理

10.6.2 功能规格

•  本节介绍的定频空调方案将实现下列功能规格:

•  制冷和制热功能,可设定制冷或制热温度;

•  自动运行模式。空调器根据室内温度与设定温度的差值,自动判定运转模式;

•  除湿模式。控制器根据室内温度和设定温度的差值决定运转模式;

•  送风模式设定:风速可在高、中、低档之间转换,不受设定温度所控制;

•  具有防冷风、化霜、高温保护功能;

•  定时开/关机功能:定时开关机时间以 10 分钟为最小单位进行设置,定时时间到达,空调启动或停止工作;

•  可设置风门片工作于连续方式或固定方式;

•  健康运行功能。可产生健康负离子,进行空气杀菌。

10.6.3 硬件设计

  硬件组成框图如 图 10.38 所示。主要由 CPU 、信号检测和控制部分组成。 CPU 首先接收遥控器发出的红外信号,获得命令参数,同时检测环境变量(温度、过流、电网断电等),然后综合分析,下达命令,控制空调各部件的正常工作。显示面板可以显示空调当前的工作状态。

图 10 . 38 硬件组成框图

1. 供电模块

  根据工作电压的不同,整个系统可以分为三部分:微控系统、继电器控制和强电控制,分别工作于 DC5V 、 DC12V 和 AC220V 。 AC220V 由继电器控制,直接给压缩机、室外风机、室内风机和负离子产生器供电; AC220V 经过降压,变为 DC12V 和 DC5V ,用于继电器的控制和主控板上的微控系统。供电系统如 图 10.39 所示。图中的采样点 ZDS 用于过零点检测,二极管 D1 防止滤波电容 C2 对采样点 ZDS 的影响。

图 10 . 39 供电模块

2. 室内风机的控制

  图 10.40 为内风机控制电路,其中 TLP3526 为光耦可控硅,用于控制 AC220V 的导通时间,从而实现内风机风速的调节。 TLP3526 管脚 3 为触发脚,由三极管驱动。 AC220V 从管脚 11 输入,管脚 13 输出,具体导通时间受控于触发脚的触发。

图 10 . 40 室内风机控制电路

3. 压缩机、四通阀、外风机和负离子产生器(健康运行)的控制

  压缩机、室外风机、四通阀和负离子产生器均由 AC220V 供电,所以通过继电器控制 AC220V 的通断便可以控制各个部分的运行。 R1 为压敏电阻,用于过压保护。 SI1 为保险管。插座 J2 为 AC220V 输出端,外接变压器,将 AC220V 降压,降压后接到电源模块,分别得到 DC12V 和 DC5V 。

图 10 . 41 压缩机、四通阀和健康运行的控制电路

4. 室内温度和盘管温度检测

  插座 J10 外接两个负温度系数的热敏电阻,分别检测室内温度和盘管温度。采用电阻分压原理,热敏电阻和标准电阻对 5V 进行分压,然后 CPU 对分压值进行 AD 转换,根据转换值可以计算出热敏电阻的阻值,从而得到外界温度值。

图 10 . 42 室内温度和盘管温度检测电路

5. 继电器、峰鸣器、步进电机驱动电路

  继电器、峰鸣器和步进电机均由 12V 直流电压控制, UNL2803 为驱动芯片。如 图 10.43 所示, Neg - lonC 控制负离子发生器的继电器; ValveC 控制四通阀的继电器; ComprC 控制压缩机的继电器; Buzzer 控制峰鸣器; A 、 B 、 C 、 D 为步进电机的四相。

图 10 . 43 驱动电路

6. 断电记忆 电路

  采用 AT24C01A 作为串行存储芯片,保存电网断电前空调的运行参数。该芯片只需两根线控制:时钟线 SCL 和数据线 SDA ,存储器大小为 128 × 8 bit 。

图 10 . 44 断电记忆电路

10.6.4 软件设计

1. 主程序流程

  主程序流程如 图 10.45 所示,一个主循环时间为 10ms ,采用时基定时。首先等待 10ms 的到来, 10ms 来临,进行遥控器信号接收数据的处理,根据解码得到的信息选择空调的工作模式,然后进入该模式执行。遥控器信号的接收在中断中进行。

图 10 . 45 主程序流程图

2. 制冷模式下的温度控制

  在制冷模式下,控制器根据采集到的室内温度判定压缩机和室外风机的工作状态,其程序流程如 图 10.46 所示。

图 10 . 46 制冷模式下温度控制流程图

  对于制热模式,其工作方式与制冷模式相似,只是在室内温度低于设定温度 2 ℃以上时开启压缩机和室外风机,室内温度高于设定温度 2 ℃以上时停止压缩机和风机。

3. 自动模式下的制冷或制热控制

  自动模式将使室内温度维持在一个相对恒定的状态(默认为 24 ℃)。当检测到室内温度高于或低于设定值 3 ℃以上时,将启动制冷或制热。其流程如 图 10.47 所示。

图 10 . 47 自动模式下制冷或制热控制流程图

4. 室内风机风速控制

  室内风机风速具体控制方法:首先过零检测电路检测到 AC220V 的过零点,产生过零中断;然后在中断处理子程序中,打开 Timer 的定时功能,每隔一定时间由 CPU 产生一个触发脉冲,使 TLP3526 导通,从而给室内风机供电。这样,通过改变 Timer 的定时长度可以控制 AC220V 在每半个周期内的导通时间,从而控制室内风机的功率和转速。

图 10 . 48 室内风机风速控制流程图
版权所有:北京凌阳爱普科技有限公司 京ICP备05061966号 未经许可网站内容严禁复制、转载,任何人不得擅自使用
友情链接:凌阳爱普 嵌入式培训 安卓培训 凌阳大学计划 北京嵌入式培训 深圳嵌入式培训 成都嵌入式培训