0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用MAXQ2000进行安全系统控制

星星科技指导员 来源:ADI 作者:ADI 2023-02-07 13:53 次阅读

报警控制面板几乎是每个人日常生活的一部分,无论是在家里还是在工作中。本文介绍使用MAXQ2000低功耗LCD微控制器的报警控制应用示例,该微控制器是在MAX-IDE开发环境中创建的。MAXQ2000可以方便地与安全应用中常用的外设接口,包括LCD显示器、PIN输入键盘、压电喇叭和蜂鸣器以及磁簧开关。

常见的报警控制面板包含多个输入设备,需要用户显示器。这些系统的常用组件包括:

接受用户输入的设备:4 x 4 开关键盘。

向用户显示输出的设备:LCD显示器。

输入设备:磁簧开关。

输出装置:压电喇叭。

这几个元件可以通过简单的应用和功能强大、灵活的MAXQ2000微控制器进行管理和控制。该应用可供下载,是使用MAX-IDE开发环境用MAXQ汇编语言编写的。该代码针对MAXQ2000评估板,使用以下附加硬件

键盘:灰山 16 按钮(4 行 x 4 列)键盘 96BB2-006-F

压电喇叭:CEP-1172

磁簧开关:标准单回路型

设计目标

我们的示例应用程序执行以下任务:

监视磁簧开关以确定门/窗是打开还是关闭。

允许用户通过在键盘上输入 PIN 来布防或撤防系统。

在液晶屏上向用户显示状态信息

通过发出压电喇叭的声音,提供按键和传感器打开/关闭事件的音频指示。

如果在系统布防时传感器打开,则连续发出喇叭声。

报警控制应用程序的行为由四种离散状态组成:关闭、打开、设置和警报(图 1)。

poYBAGPh50eAYtMyAABgjfCqWjU264.gif?imgver=1

图1.警报控制应用程序在四种主要状态下运行:关闭、打开、设置和警报。

磁簧开关接口

在报警系统中,磁簧开关安装在两部分:磁铁和实际的磁簧开关。磁铁部分放置在门或窗的移动部分,而开关部分放置在框架上。当门或窗关闭时,磁铁关闭簧片开关,指示非报警状态。如果系统布防,门窗打开,簧片开关改变状态,允许MAXQ2000发出入侵警报。

干簧开关只需连接端口引脚P2000.5和P2.5即可连接至MAXQ3。当 P5.2 设置为/下拉 (PD = 1, PO = 0) 且 P5.3 设置为弱上拉输入 (PD = 0, PO = 1) 时,当磁簧开关闭合时,P5.3 将读取零,当磁簧开关打开时,P<>.<> 将读取 <>。

move PD5.2, #1 ; Drive one side of reed switch LOW move PO5.2, #0 move PD5.3, #0 ; Set weak pullup high on other side move PO5.3, #1 ... ML_Closed_Check: move C, PI5.3 jump NC, ML_Closed_L ; Switch is closed, continue in this state call ShortBeep call ShortPause call ShortBeep call ShortPause call ShortBeep call ShortPause call ShortBeep call ShortPause jump ML_Open ; Switch is open, transition to OPEN state

与 4 x 4 键盘接口

键盘用于报警控制系统,用于安全输入PIN码、布防/撤防系统以及更改配置。此示例应用程序中使用的键盘由 16 个开关组成,以 4 x 4 网格形式组织。开关以行和列矩阵连接在一起(图2),因此按下键盘开关将一行连接到一列线。例如,按下“3”键将第 1 行和第 3 列连接在一起。

pYYBAGPh50yAYuiGAAAhefpgGJU387.gif?imgver=1

图2.键盘开关形成一个由四行四列组成的网格。

键盘提供八个接口引脚,键盘矩阵的每一行和每列一个引脚。键盘和MAXQ2000评估板如图所示连接。

连接 端口销 JU2 引脚
1 第 1 行 P6.0 54
2 第 2 行 P6.1 52
3 第 3 行 P6.2 50
4 第 4 行 P6.3 48
5 科尔 1 P6.4 46
6 科尔 2 P6.5 44
7 科尔 3 P7.0 42
8 科尔 4 P7.1 40

对于此应用,评估板应配置如下。

拨码开关。

以下开关必须关闭:所有 SW1 交换机、SW3.1、SW3.7、SW3.8、SW6.1、SW6.4、SW6.5、SW6.6、SW6.7 和 SW6.8。

所有其他 DIP 开关可以处于任何状态。

运动员

以下跳线必须处于打开状态:JU5、JU6、JU8 和 JU9。

必须关闭以下跳线:JU1、JU2、JU3 和 JU11。

所有其他跳线可以处于任何状态。

按列扫描

键盘的行和列排列使得在任何时候都可以轻松读取四个开关的状态,无论是行还是列。要在一列中读取四个开关,首先必须将该列的行拉低,所有其他列三态(图 3)。接下来,必须在每行线上设置一个弱上拉。最后,四行线连接到端口引脚输入。当按下某一行上的开关时,该行的输入将为低电平,否则为高电平。

类似地,通过将该行线拉低并在所有四列上设置输入和弱上拉,可以读取连续四个开关的状态。行和列是可以互换的。

在我们的设置中,四行线(键盘引脚 1 到 4)都连接到同一个输入端口 (P6[3:0]),这使得同时读取它们更容易。因此,示例应用程序一次扫描一列交换机。连接到键盘的八个端口引脚线有四种设置状态,每种状态都允许读取四个开关。当正在读取的开关闭合时,所有输入线都读低,当开关打开时,所有输入线都读高。

P6.0 P6.1 P6.2 P6.3 P6.4 P6.5 P7.0 P7.1
1 输入 - 1 输入 - 4 输入 - 7 输入-* 三态 三态 三态
2 输入 - 2 输入 - 5 输入 - 8 输入 - 0 三态 三态 三态
3 输入 - 3 输入 - 6 输入 - 9 输入-# 三态 三态 三态
4 输入 - A 输入 - B 输入 - C 输入 - D 三态 三态 三态

3546fig03.gif?imgver=1

图3.MAXQ2000将列1拉低,读取前四个键盘开关的状态。

中断驱动的状态机

这四列必须快速发送,以便任何按键在释放之前都有时间阅读。此外,为防止开关的弹跳触点注册多次按下,在注册之前必须按住键一定时间。通过将定时器驱动的中断例程作为应用程序的核心,可以同时完成这两个因素。这允许应用程序定期扫描四列中的每一列,并计算按下键的时间长度。

RELOAD equ 0FF00h StartTimer: move IIR.3, #1 ; Enable interrupts for module 3 move IMR.3, #1 move T2V0, #RELOAD move T2R0, #0h move T2C0, #0h move Acc, T2CFG0 ; Set timer 0 to run from HFClk/128 and #08Fh or #070h move T2CFG0, Acc move T2CNA0.3, #1 ; Start timer 0 move T2CNA0.7, #1 ; Enable timer 0 interrupts ret

计时器的重新加载值控制中断触发的频率。此值必须足够短,以便识别所有按键。此外,为了确保密钥响应不会缓慢,重新加载值也必须足够长,以便它不会占用过多的处理时间。上面显示的值0FF00h(大约每2.4ms一次)是通过实验达到的。

一旦一组四个开关的列线被驱动为低电平,则可能需要一些时间才能通过按下的开关操作的连接将其输入线拉低。该时间受开关的导通电阻和同时按下多少列开关的影响。为了避免在将柱线拉低和读取四个开关之间延迟中断服务例程,给定状态的柱线在前一个状态下被驱动为低电平(图 4)。

pYYBAGPh6oiAZMM6AACGQu1PTLg872.png

图4.在四种按键扫描状态中,应用程序读取四个开关的状态,并准备读取接下来的四个开关。

由于MAXQ2000的中断向量(IV)可以即时设置,应用在中断向量寄存器中保存下一个状态值。每当计时器中断触发时,当前密钥扫描状态的处理程序例程都会将中断向量地址设置为下一个状态的处理程序例程。

org  0000h

Main:
   call    InitializeLCD

   move    PD6, #010h         ; For state 1
   move    PO6, #00Fh         ; For all states
   move    PD7, #000h         ; For state 1
   move    PO7, #000h         ; For all states

   move    IV, #State1
   call    StartTimer
   move    IC, #1            ; Enable global interrupts

   jump    $


State1:
   push    PSF
   push    Acc

   move    Acc, PI6
   and     #000Fh            ; Grab lowest four bits only
   sla4
   move    A[13], Acc

   move    PD6, #020h        ; For state 2
   move    PD7, #000h

   move    T2V0, #RELOAD     ; Set reload value
   move    T2CNB0.1, #0      ; Clear interrupt flags
   move    T2CNB0.3, #0
   move    IV, #State2

   pop     Acc
   pop     PSF

   reti

其他四种状态的处理程序例程类似,只是在 A[13] 保持寄存器中先前收集的开关位中略微调整为 OR。状态例程使用三个工作累加器。

A[13] 保存通过键盘的电流传递上读取的所有开关状态的位数组。状态 4 读取完成后,此寄存器包含以下位,其中一位表示打开(释放)键开关,零位表示关闭(按下)键开关。


15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0
* 7 4 1 2 5 8 0 3 6 9 # D C B 一个

去抖动开关

达到状态 4 并扫描所有键后,必须决定是否接受按下的任何键。处理去抖动的一种简单方法是为 16 个开关中的每一个保持一个计数器值。每次达到状态 4 并按下该键时,计数器都会递增。如果未按下该键,计数器将递减。当计数器达到某个值时,将注册按键。为了防止按住键重复(通常在计算机键盘上允许,但在小键盘上不允许),必须允许计数器递减到零(通过释放键),然后才能再次注册该键。

由于我们在单个寄存器中拥有所有 16 个键的状态,因此有一种更简单、内存密集度更低的去抖动解决方案。应用程序维护单个计数器值,每次位模式与上一次传递中读取的模式匹配时,该计数器值都会递增。

State4:
   push    PSF
   push    Acc

   move    Acc, PI6
   and     #000Fh            ; Grab low four bits only
   or      A[13]
   cmp     A[15]
   jump    E, State4_End    ; Ignore the last debounced pattern

   cmp     A[14]
   jump    E, State4_Match

   move    LC[0], #DEBOUNCE
   move    A[14], Acc       ; Reset current bit array

为了防止键重复,一旦位模式静态足够长,就可以接受,必须先接受不同的位模式(包括未按下任何键的空闲状态),然后才能再次接受第一个位模式。

处理同时按键

使用键盘输入设备时,可以同时按键。去抖动代码可确保如果在第一个键之后立即按下第二个键,则去抖间隔将重新开始,但在实践中要足够短,以免成为问题。

一旦位模式被接受,就可以通过使用累加器将所有 16 位单独旋转到进位中并依次检查每个位来执行每个按下键位的操作。以下代码仅响应第一个按下的键,但这可以很容易地更改。

State4_Match:
   djnz    LC[0], State4_End
   move    A[15], Acc       ; Reset last debounced pattern

   rrc
   jump    NC, State4_KeyA
   rrc
   jump    NC, State4_KeyB
   rrc
   jump    NC, State4_KeyC
   rrc
   jump    NC, State4_KeyD

   rrc
   jump    NC, State4_Key3
   rrc
   jump    NC, State4_Key6
   rrc
   jump    NC, State4_Key9
   rrc
   jump    NC, State4_KeyPound

   rrc
   jump    NC, State4_Key2
   rrc
   jump    NC, State4_Key5
   rrc
   jump    NC, State4_Key8
   rrc
   jump    NC, State4_Key0

   rrc
   jump    NC, State4_Key1
   rrc
   jump    NC, State4_Key4
   rrc
   jump    NC, State4_Key7
   rrc
   jump    NC, State4_KeyStar

   jump    State4_End

与液晶显示器接口

MAXQ2000评估板附带的LCD显示屏具有如图5所示的段定义。

3546fig05.gif?imgver=1

图5.LCD 显示屏包含 7 个半 <> 段字符。

首先,LCD显示屏必须初始化为静态驱动模式并启用。完成此操作后,可以通过适当设置段将字符写入显示器。

InitializeLCD:
   move    LCRA, #03E0h      ; xxx0001111100000
                             ;    00            - DUTY : Static
                             ;      0111        - FRM  : Frame freq
                             ;          1       - LCCS : HFClk / 128
                             ;           1      - LRIG : Ground VADJ
                             ;            00000 - LRA  : RADJ = max

   move    LCFG, #0F3h       ; 1111xx11
                             ; 1111     - PCF  : All segments enabled
                             ;       1  - OPM  : Normal operation
                             ;        1 - DPE  : Display enabled

   move    LCD0, #00h        ; Clear all segments
   move    LCD1, #00h
   move    LCD2, #00h
   move    LCD3, #00h
   move    LCD4, #00h
   ret

输入密码

在“已关闭”、“设置”和“警报”状态下,可以输入 PIN 以将警报控制器更改为另一种状态。输入每个字符时,A[10] 中保存的工作值将左移并使用新字符进行 OR,LCD 显示屏上的小数点向左移动以指示输入的字符数。出于安全原因,正在输入的 PIN 不会显示在显示屏上。

State4_Key0:
   move    Acc, #0000h
   jump    State4_Shift

State4_Key1:
   move    Acc, #0001h
   jump    State4_Shift

State4_Key2:
   move    Acc, #0002h
   jump    State4_Shift

....

State4_Shift:
   move    A[12], Acc

   move    Acc, A[10]
   cmp     #0FFFFh         ; flag indicating no PIN entry allowed
                           ;    in current state
   jump    E, State4_NoKey

   move    Acc, A[11]      ; key count
   cmp     #04             ; if already at 4 (should have been cleared)
   jump    E, State4_NoKey

   add     #1
   move    A[11], Acc

   move    Acc, A[10]
   sla4
   or      A[12]
   move    A[10], Acc

输入所有四个字符后,将根据硬编码值检查 PIN。如果输入的值与 PIN 匹配,则会发生相应的状态转换。

PIN_VALUE        equ 03870h       ; Just a random number

;; "Closed" state code

ML_Closed:
   move    A[10], #00000h         ; Reset PIN value
   move    A[11], #0              ; Reset number of PIN chars entered

   move    LCD3, #LCD_CHAR_C
   move    LCD2, #LCD_CHAR_L
   move    LCD1, #LCD_CHAR_5
   move    LCD0, #LCD_CHAR_D

ML_Closed_L:
   move    Acc, A[11]
   cmp     #4                     ; 4 characters entered?
   jump    NE, ML_Closed_Check

   move    Acc, A[10]
   cmp     #PIN_VALUE             ; PIN matches?
   jump    E, ML_Set

   call    LongBeep               ; Beep on incorrect PIN and reset
   move    A[10], #0000h
   move    A[11], #0
   move    LCD3.7, #0

ML_Closed_Check:
   move    C, PI5.3               ; Check reed switch
   jump    NC, ML_Closed_L        ; Closed, stay in current state

   call    ShortBeep              ; 4 short beeps signal transition
   call    ShortPause
   call    ShortBeep
   call    ShortPause
   call    ShortBeep
   call    ShortPause
   call    ShortBeep
   call    ShortPause
   jump    ML_Open                ; Switch opened, go to OPEN state

使用压电喇叭

在我们的应用中,一个小压电喇叭用于执行两个功能:(1) 在按下按键或输入错误 PIN 时提供音频反馈,以及 (2) 在系统布防时簧片开关打开时发出警报。

为了便于演示,MAXQ2000连接两个端口引脚,连接一个小的压电喇叭。端口引脚被差分驱动以增加对压电喇叭的电流驱动,驱动器代码中使用的环路计数决定了发出的音调的频率。

ShortBeep:
   move    LC[1], #100       ; Number of cycles
SB_L1:
   move    PO5.6, #0
   move    PO5.7, #1

   move    Acc, #2000        ; Count for forward polarity period
SB_L2:
   sub     #1
   jump    NZ, SB_L2

   move    PO5.6, #1
   move    PO5.7, #0

   move    Acc, #2000        ; Count for reverse polarity period
SB_L3:
   sub     #1
   jump    NZ, SB_L3

   djnz    LC[1], SB_L1
   ret

在实际的报警系统中,将使用更强的驱动电路来运行压电喇叭,并且喇叭将以其谐振频率驱动以增加音量。

结论

MAXQ2000通过专用的LCD控制器外设轻松直接地与LCD显示器接口。使用MAXQ2000提供的灵活的端口引脚配置,可以直接读取多路复用键盘。定时器中断驱动的状态机允许扫描矩阵中的所有密钥并进行去抖动,而对处理器开销的影响最小。最后,使用MAXQ2000上的通用端口引脚,也可以轻松控制压电喇叭和磁簧开关。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    16240

    浏览量

    177599
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4416

    浏览量

    167219
  • 计数器
    +关注

    关注

    32

    文章

    2255

    浏览量

    94396
收藏 人收藏

    评论

    相关推荐

    使用C2000 MCU对用于数字控制的双向降压/升压转换器进行建模

    电子发烧友网站提供《使用C2000 MCU对用于数字控制的双向降压/升压转换器进行建模.pdf》资料免费下载
    发表于 10-12 11:48 0次下载
    使用C<b class='flag-5'>2000</b> MCU对用于数字<b class='flag-5'>控制</b>的双向降压/升压转换器<b class='flag-5'>进行</b>建模

    使用功率控制器件的汽车防抱死制动系统控制

    电子发烧友网站提供《使用功率控制器件的汽车防抱死制动系统控制.pdf》资料免费下载
    发表于 09-29 09:50 0次下载
    使用功率<b class='flag-5'>控制</b>器件的汽车防抱死制动<b class='flag-5'>系统控制</b>

    了解 C2000 实时控制 MCU 的安全特性

    电子发烧友网站提供《了解 C2000 实时控制 MCU 的安全特性.pdf》资料免费下载
    发表于 09-10 10:33 0次下载
    了解 C<b class='flag-5'>2000</b> 实时<b class='flag-5'>控制</b> MCU 的<b class='flag-5'>安全</b>特性

    初创公司SEA.AI利用NVIDIA边缘AI和计算机视觉技术变革航海安全系统

    总部位于奥地利林茨的初创公司正在利用 NVIDIA 边缘 AI 和计算机视觉技术变革航海安全系统,让每一次出海变得更安全
    的头像 发表于 09-09 09:32 471次阅读

    NS486SXF高度集成的嵌入式系统控制器数据表

    电子发烧友网站提供《NS486SXF高度集成的嵌入式系统控制器数据表.pdf》资料免费下载
    发表于 08-08 09:29 0次下载
    NS486SXF高度集成的嵌入式<b class='flag-5'>系统控制</b>器数据表

    LM10000 AVS系统控制器数据表

    电子发烧友网站提供《LM10000 AVS系统控制器数据表.pdf》资料免费下载
    发表于 07-26 10:44 0次下载
    LM10000 AVS<b class='flag-5'>系统控制</b>器数据表

    高校实验室无线物联网用电安全系统设计与应用

    摘要: 高校实验室内放置大量实验仪器设备,是实验人员高度密集的场所之一。实验室安全管理是校园安全建设不可或缺的一环,其中用电安全至关重要。为此,文中设计一种实验室物联网用电安全系统,通
    的头像 发表于 06-18 10:20 344次阅读
    高校实验室无线物联网用电<b class='flag-5'>安全系统</b>设计与应用

    液压伺服控制系统控制要求

    液压伺服控制系统,作为一种重要的工业控制手段,其设计和运行必须满足一系列严格的控制要求,以确保系统的高效、稳定和安全运行。以下是对液压伺服
    的头像 发表于 06-11 11:32 582次阅读

    解析HSE化工安全系统的功能与优势

    在现代工业化生产中,化工企业扮演着至关重要的角色,但与此同时,化工安全问题也备受关注。为了保障生产环境的安全,HSE化工安全系统应运而生。
    的头像 发表于 04-24 10:17 448次阅读
    解析HSE化工<b class='flag-5'>安全系统</b>的功能与优势

    英创汇智推出全自主国产器件汽车制动安全系统系列产品

    英创汇智(北京)今日宣布了一项重大突破,成功推出了100%国产器件的汽车制动安全系统系列产品ABS/ESC/EPBi。这标志着该公司在电控制系统产品领域实现了全技术链条与全供应链的自主可控,为国产汽车产业的核心供应链
    的头像 发表于 03-18 10:59 851次阅读

    英创汇智推出100%国产器件的汽车制动安全系统系列产品ABS/ESC/EPBi

    英创汇智(北京)今日宣布,成功推出了凝聚创新电器架构与国产尖端车规电子技术的重磅产品——100%国产器件的汽车制动安全系统系列产品ABS/ESC/EPBi。
    的头像 发表于 03-17 09:30 745次阅读

    如何设计和认证基于 RTD 的功能安全系统

    和高可靠性应用,通常需要通过 Route 1S 或 Route 2S 元器件认证流程来设计和确保实现功能安全系统。 由于必须审查系统中所有元器件的潜在故障模式和机理,因此对系统进行功能
    的头像 发表于 02-13 14:46 604次阅读
    如何设计和认证基于 RTD 的功能<b class='flag-5'>安全系统</b>

    让机器控制既“安全”又“高生产力”的智能传感系统

    智能传感系统的发展,为使用强大的安全系统来优化高速生产环境中的货物流动提供了更多机会。
    的头像 发表于 01-11 11:09 375次阅读

    语音数据集在智能家居安全系统中的应用与挑战

    随着智能家居的普及,家庭安全问题日益受到人们的关注。智能家居安全系统通过整合各种传感器和设备,实现对家庭环境的实时监控和报警,保障家庭成员的安全。语音数据集在智能家居安全系统中发挥着重
    的头像 发表于 12-25 09:50 612次阅读

    MC33907_08安全系统基础芯片硬件设计和产品指南

    电子发烧友网站提供《MC33907_08安全系统基础芯片硬件设计和产品指南.pdf》资料免费下载
    发表于 12-18 09:14 3次下载
    MC33907_08<b class='flag-5'>安全系统</b>基础芯片硬件设计和产品指南