基于STM 32 的一款超声系统控制面板的设计

2022-10-21 13:45
科学技术创新 2022年28期
关键词:控制面板中断按键

金 璐

(东软医疗系统股份有限公司,辽宁 沈阳 110011)

概述

目前在超声系统设备上键盘设计中,往往采用键盘专用芯片作为主控芯片,这种方式的优点是设计简单,不用进行软件编程[1]。但在临床医生日常使用过程中,往往会出现按键失灵、硬件设备不识别等故障[2],在山区或者乡镇也会出现无法正常使用的现象。当出现这种情况,售后服务人员也无法判断问题点,进而导致后期维修成本的增加。所以,设计一款可编程、可维护的超声台车控制面板是必要的。

1 系统组成及其功能

超声台车的控制面板由小键盘、轨迹球、键位控制面板等模块构成。键位控制面板模块由2 块STM32嵌入式芯片完成按键扫描、滑块扫描、旋钮扫描及键值发送等功能。同时,控制面板在软件编程中嵌入FreeRTOS 开源操作系统来确保按键的实时性和可靠性[3]。在控制面板驱动中,采用了按键过滤功能,进一步保证了主机Host 所接收的信号是按键所在的实时位置,避免由于数据阻塞造成Host 端响应延迟的问题。

2 相关技术设计

2.1 工作流程

控制面板的工作流程:例如当医生期望调节TGC时会滑动滑块,这时滑块的键值信息会发送至Host 主机端,驱动端截获当前的键值数据解析后,会发送Windows 可识别的ISY message 信号,在Host 端的上位机轮询到这个message 信号就可以做出相对应的滑块动作,并将信息传递给图像Image 单元,以图像的方式反馈给医生。

2.2 主控芯片选择及应用

控制面板的组件主要包括键位控制面板、小键盘、轨迹球等外设。键位控制面板选用的单片机型号为STM32F103,工作温度为-40 ℃~85 ℃基本满足日常使用情况[4]。具体配置情况:时钟配置见图1,系统时钟是72M,USB 的时钟是48M。

图1 键位控制面板时钟配置

基础配置见图2,嵌入FreeRTOS 操作系统,具体优点如下:(1) FreeRTOS 是免费的,要做产品的话,免费的FreeRTOS 操作系统就是个不错的选择。(2) 简单、小巧、易用,通常情况下内核占用4 k~9 k 字节的空间。(3) 相比于while 轮询的好处在于不会因为功能的添加造成功能间的时延且后期功能添加,代码移植方便简单。

图2 键位控制面板基础配置

2.3 功能设计

由于本设计中采用了FreeRTOS 操作系统,所以采用了任务轮询的方式进行键位检测,即不同类型的键值在不同的任务中进行逻辑处理。

2.3.1 Button 任务

Button 按键部分主要采用的是7*7 矩阵扫描检测,见图3。

图3 Button 按键7*7 矩阵扫描原理图

2.3.2 Encode 任务

Encode 按键采用的编码器型号为EC21A154040 1,输出波形的相序,见图4。

图4 输出波形相序图

2.3.3 TGC 任务

ADC 采集方式为单通道采集,采集不同Channel数据,进行了多次采集,并软件滤波。

由于采集的数据是32 位,而TGC 满量程是0~255,所以需要移位处理。

2.3.4 小键盘功能

键盘设备类是HID 类,同样是一款STM32F103嵌入式单片机,在时钟配置上与键位控制面板的配置基本一致。基础配置上与键位控制面板略有区别,只有一个USB Device 的设备类,这样对于Host 主机识别来讲,会将小键盘当做HID 类设备,无需驱动即可使用。

2.3.5 辅助功能

键位控制面板辅助功能包括轨迹球、光传感等。

轨迹球是一个Hub 类的USB 外设,可以直接连接到Host 端的Hub 上就可以在Host 主机端的设备管理器中看到。

光传感器采用的芯片为APDS-9960 RGB 红外手势传感,主要用于LED 灯息亮设计,该传感器的靠近感应功能支持大概10 cm 范围,超出10 cm 范围后感应数值都为0。

2.4 驱动设计

根据WDK 可以创建一个Sample 代码,其中各个模块的工程如下:

2.4.1 驱动入口

USB 驱动的函数入口为DriverEntry,也是微软唯一指定的驱动函数入口点。

2.4.2 设备添加函数

当设备连接Host 主机后,驱动端会进行PNP 的电源枚举,如果电源状态为E0 时,会调用设备添加函数OsrFxEvtDeviceAdd 进行设备添加操作,在pnpPowerCallbacks 函数里注册一系列的回调函数,其中就包括设备添加函数。

2.4.3 队列函数

队列函数包括手动队列和串行队列,这里添加了一个手动队列WdfIoQueueDispatchManual,目的是为了响应STM32 发送过来的中断信号,进而解析键值信息。

2.4.4 创建wdf 设备

当调用函数WdfDeviceCreate 时就创建了wdf 设备,在此之前所有的配置参数都会绑定到这个wdf 设备上。

2.4.5 USB 中断传输

USB 中断传输不是真正意义上的中断,而是采用Host 轮询的方式来模拟中断,其实是一个伪中断[5]。既然是轮询操作,就会涉及到一个轮询频率的问题,即多少时间需要轮询一次。这个时间值被定义在中断端口的端口描述符中,由硬件定义,并由总线驱动参照执行。

2.4.6 连续读操作

Continuous Reader 这个概念是wdf 框架较wdm框架的区别之一,这种设计方式简化了开发人员的开发难度。

对应的函数为WDF_USB_CONTINUOUS_READER_CONFIG,具体实现方式如下,这个函数有两个参数需要注意:

TransferLength:表示每次从中断端口读取数据的最大长度,设置为最大包的长度是比较安全的。

NumPendingReads:多个 IRP 形成队列,排队等侯总线驱动从USB 设备中断端口读取有效数据。

2.4.7 键值数据处理

当连续读回调函数被执行的时候,从Buffer 内存句柄中获取内存缓冲指针,部分数据处理方式如下:

2.4.8 键值解析部分

键值解析主要包括按键选定、按键释放和长时按键,部分实现代码如下:

3 设计结果验证

为了验证设计的正确性,Host 端编写简单的测试Demo 程序。具体功能如下:

(1) 根据GUID 创建一个驱动句柄。

(2) 创建一个线程,其功能是检测键值输入信息,并提取有效数据段,发送ISY message 至Host 主机。

(3) 以DeviceIoControl 函数向驱动发送一些控制指令,比如点灯,获取设备信息等功能。

经Demo 测试后,确认可以正常获取键值信息且Host 主机正确做出响应。现已在超声产品NeuEcho10和NeuEcho15 投产使用,见图5,目前并没有出现按键失灵、硬件设备不识别等故障,整体来看效果不错。

图5 NeuEcho15 展示图

猜你喜欢
控制面板中断按键
TMS320F28335外部中断分析与研究
一种航天器星上时间获取方法
基于有限状态机的按键检测程序设计
非触勿动 秒治键盘误触
雪后林鸟
恢复开始按钮右键菜单“控制面板”选项
跟踪导练(二)(5)
FES丙烷制冷机控制系统升级改造
多种方法找回传统控制面板
基于PLC的柑橘根部灌溉施肥控制系统的设计与研究