惠 进,施文杰,王 谭,王俊林,王马强,吴 斌
(1.西安应用光学研究所,陕西西安 710065;2.湖南兴川信息科技有限公司,湖南长沙 410000)
某瞄镜系统依靠多传感器获取目标和环境参数信息,并规律地叠加在OLED 屏上进行显示。由于需要将丰富的目标和环境信息完整地显示在尺寸有限的屏上,所以需要将信息进行分级显示,按照使用需求获得并查看各种参数信息。考虑到瞄镜系统小体积、低功耗的要求,采用HI3519 作为信息综合处理平台。利用回转型编码器进行人机交互设备的输入控制、各级菜单间的切换和展开显示,但在系统调试中发现,旋转编码器时常出现响应异常的现象,包括未及时响应以及因信号抖动引起的异常响应。该文从研究编码器特性入手,对与编码器相关的硬软件设计进行了改进优化。
RE08 型回转编码器分为进行编码的部分和按键部分,进行编码的部分有A、B、C 三个引脚,按键部分有SW、E 引脚。通过比较A、B 引脚输出方波的相位差判断旋转方向。当编码器正向旋转时,A 脚输出比B 脚输出超前四分之一个周期;当编码器反向旋转时,B 脚输出比A 脚输出超前四分之一个周期,A、B 引脚输出方波的相位差为90°±45°,如图1 所示。编码器的A 相或B 相每输出一个脉冲,表示编码器旋转了一个固定角度,意味着此时综合处理系统将收到一个信号切换指令。
图1 编码器正反向特性
鉴于该瞄镜系统需要进行多个传感器信息处理、实现多级任务调度以及低功耗的要求,原设计选择了华为海思HI3519 作为核心处理平台。该芯片采用12 nm 先进低功耗工艺和低功耗架构进行设计,除了具备高清音视频编解码功能,是一款智能图像处理器外,其丰富的外设接口也为系统处理离散量提供了充足的支持[1-5]。
RE08 型回转编码器用于该瞄镜系统中OLED 屏上叠加的主菜单的展开和各级子菜单间的切换、确认及返回等命令的执行。该编码器方案主要基于海思HI3519AV100 处理器平台进行设计,用于人机交互设备的输入控制,通过采用海思处理器检测其旋转时产生的脉冲信号来判断编码开关的状态[6-10]。硬件设计上,把编码器的A、B、SW 引脚连接至海思处理器的外部中断管脚,通过中断触发旋转事件与确认事件,实现编码器与瞄镜系统的指令交互。
为采集到编码器信号,将编码器信号输出端和海思处理器的GPIO 模块相连,编码器的出线通过J17 连接器接入综合处理板内,其中A、B、SW 端分别通 过10 kΩ 电阻上拉至VCC(VCC 上拉电源支持1.8 V,3.3 V 和5.0 V),E、C 端子接地。编码器前端预处理电路如图2 所示。
图2 编码器前端预处理电路
由于编码器在其旋转过程中触点接触时存在机械抖动,导致在产生脉冲信号时偶尔会产生信号抖动,对信号检测产生干扰,所以必须采取有效的方法抑制编码开关旋转时的抖动。为了消除编码器抖动,添加RC 滤波电路以去除编码器抖动和毛刺[11-13]。
RC 低通滤波器利用电容通高频阻低频的原理。对于需要截止的高频,利用电容吸收的方法防止它通过;对于需要放行的低频,利用电容高阻的特点让它通过。RC 低通滤器截止频率计算方法如式(1)所示:
RE08型回转编码器的信号频率范围是0~500 Hz,为确保有用信号在通带不产生过于不平衡的衰减,设计了一个截止频率约为720 Hz 的低通滤波器,选择R=100 Ω,C=2.2 μF即可满足使用要求,以滤除编码器的高频抖动。
滤波后的编码器信号直接引入CPU 的GPIO 引脚,编码器信号与HI3519 端的连接如图3 所示。CPU 进行数字滤波后再对信号进行数据处理,从而判断编码器的左旋、右旋和确认。
图3 编码器信号与HI3519端连接
该瞄镜系统中对编码器指令的判读是通过海思处理器检测编码器旋转时产生脉冲信号时沿的前后来判断编码开关是左旋、右旋还是确认。根据编码器的特性可见,要保证编码开关信号检测的可靠性,就必须避免编码开关信号抖动引起的影响,即需要通过优化软件设计消除信号抖动的影响。
此外,由于先前的软件设计是将编码器A、B 引脚分别连接至海思处理器的GPIO 端,这样的轮询方式由于驱动不完善,除了占用较多CPU 资源外,还易出现丢数现象。因此改进后的软件设计基于中断服务事件,由于中断方式实时性高[14-16],所以采取这种方式获取编码器的旋转方向和按键信息,能够防止丢数现象的发生。
结合以上两点,编码器软件部分的整个工作流程设计为采用中断口检测编码开关信号,将A、B 脚其中一个引脚接到海思处理器的中断口,另一个引脚接到海思处理器的GPIO 口,编码开关旋转时中断口出现上升沿或下降沿信号时,CPU 会产生中断,程序进入中断处理函数,随即在中断处理函数中判断另一个引脚的电平,即可确定编码开关的旋转方向。转向判别软件规划流程如图4 所示。
图4 编码器转向判别软件流程
流程中定时15 ms 是为了在软件层面消除编码器信号抖动,为进行编码器转向判别提供稳定的状态前提。
依据编码器的特性,将处理器连接编码器A 引脚与编码器SW 引脚的GPIO 设置为外部中断,用于左旋、右旋与确认按键的触发,将处理器连接编码器B 的GPIO 引脚设置为普通引脚输入,用于获取左旋、右旋的状态。表1 所示为编码器旋转状态的判断。
表1 旋转编码器状态判断
根据表1 进行左旋与右旋的判断,满足右旋的条件即上报右旋事件,满足左旋的条件即上报左旋事件。
部分程序设计如下:
其中,key1、key2 对应A、B 两个引脚的电平状态,KEY_A 代表右旋,KEY_B 代表左旋。同样,对于编码器确认按键的处理依照普通按键,下降沿中断触发后,通过判断按键的IO 状态上报按键事件。
当编码器有操作事件时,海思处理器响应了编码器事件,瞄镜系统的综合管理软件将由软件决策层进入软件应用层,即调用编码器的状态值,反映在面向用户的对应交互界面的动作上,实现该瞄镜系统上层的人机交互控制。首先创建旋转编码器检测线程,打开编码器事件;然后以10 ms 周期轮询编码器左旋、右旋和确认三种状态。当检测到状态(左旋)改变一次时,生成(左旋)键值,并进行相应(左旋)键值功能操作,该过程表示一次动作完成。继续轮询编码器状态,检测下次状态的改变,周期重复该操作。
针对编码器不同操作会生成相应键值,分为编码器右旋、编码器左旋和编码器确认。以电视/红外电子变倍为例,调用编码器状态的不同判决结果,瞄镜系统显示界面上会进行对应的切换动作。
若界面显示“菜单退出”,当编码器右旋时,进入“电视/红外电子变倍”状态;当主菜单是显示状态时,如果右旋,电视亮度增加,当电视亮度增大为100时,则置为0;同样,右旋也会增加电视对比度和电视锐度,当对比度增大为100 时,则置为0;当锐度增大为15 时,锐度置为0。编码器右旋对应的“电视/红外电子变倍”状态如图5 所示。
图5 编码器右旋对应的“电视/红外电子变倍”状态
当瞄镜系统显示界面上显示“电视/红外电子变倍”状态时,若编码器左旋,且电视亮度、对比度、锐度值大于0,则每左旋一次,电视亮度、对比度、锐度值会逐步减小。
采用HI3519 作为某瞄镜系统的综合处理平台,利用回转型编码器进行人机交互设备的输入控制,但在调试中发现,旋转编码器时常出现响应异常的现象,如图6 所示。即用示波器两个表笔分别夹住编码器的A、B 引脚,虽然旋转编码器执行了旋转动作,但波形图上A、B 两引脚无相位差,即没有产生有效的旋转事件。
图6 编码器输出异常
该文在基于硬件优化的基础上,进行了软件消抖和防止丢包流程的改进,经多次系统试验验证,编码器旋转过程中系统响应正常,测试波形如图7所示。
图7 编码器响应正常波形
某瞄镜系统采用HI3519 作为信息综合处理平台,选用回转型编码器来实现界面信息的分级显示和参数调度。因在调试中发现系统常发生编码器响应异常的现象,经过分析编码器特性,优化了编码器事件的硬件通路和软件流程,在多次使用系统中编码器事件指令响应正常,极大提高了瞄镜系统中界面参数人机交互的响应可靠性。