关于一种基于ARM嵌入式技术的牙椅控制系统设计深度剖析

发布者:信息巫师最新更新时间:2020-08-13 来源: elecfans关键字:ARM  嵌入式技术  牙椅控制系统 手机看文章 扫描二维码
随时随地手机看文章

1 引言

目前,市场高端牙椅设备基本被国外公司独断,一般其价格昂贵而且技术不转让。随着人们对口腔健康的日益重视,开发适合国情的高端一体化口腔诊疗系统显得尤为必要。牙椅控制器是一体化口腔诊疗系统的核心,其设计水平反映了整个系统的自动化程度,也是判定牙椅档次的一个重要依据。


本文研究开发了基于ARM嵌入式技术的牙椅控制系统。在控制系统中应用嵌入式操作系统,利用多任务管理、任务间同步与通信等功能,可更进一步提高系统可靠性和实时性,增强智能控制和管理水平。


2 整体功能概述

系统整体框图如图1 所示。牙椅控制系统设计必须满足医疗需求并方便使用操作。高档牙椅在实际工作中除了要满足上下仰卧四个基本方向的运动,同时还必须能够完成茶杯给水、冲洗痰盂、无影灯调控、位置数据采集、X 光透射、及与上位机通信功能,还要保证运动的平稳可靠和数据传输的实时性。牙椅控制系统CPU 响应外接键盘输入,执行相应的命令,驱动外部的液压传动机构实现牙椅的运动和其他外部设备的工作。

关于一种基于ARM嵌入式技术的牙椅控制系统设计深度剖析

由于牙椅控制系统的控制点较多,且集中于器械盘面板和牙椅底座两个地方,因此本文将牙椅控制系统主要分为三大模块:面板控制模块、底座控制模块、供电模块。


2.1 系统的硬件设计

基于芯片性能、功耗、系统需求等多方面的要求,本系统采用S3C44B0X芯片与ATmega16 芯片构成双CPU 模块进行协同控制。S3C44B0X 是Samsung 公司生产的16/32 位RISC 处理器,其总线结构采用三星ARM CPU 嵌入式微处理器总线结构。S3C44B0X提供了全面的、通用的片上外设,包括1 个LCD 控制器、5 个PWM 通道的定时器和1 通道内部定时器、71 个通用I/O 口和8 通道外部中断源、8 通道10 位的ADC、SPI 同步数据通信串行ARM 嵌入式牙椅控制系统接口等,具有良好的可扩展性,作为牙椅系统的主处理器。


ATmega16 是增强的AVR RISC 结构的低功耗8位CMOS 微控制器,内部资源丰富,具有32 路可编程I/O 口、512 字节的EEPROM、四通道的PWM 输出、8 路10 位ADC 转换通道和3 个内部定时器/计数器和SPI 同步数据通信串行口,作为牙椅系统的底座模块的核心和控制芯片,控制牙椅的移动和进行牙椅的位置数据采集。


牙椅控制系统的原理结构图如图2 所示。底座控制板CPU 外接一个3×2 脚踏键盘,CPU 接收键盘输入执行相应的命令,并控制底座模块上的各液压传动控制继电器的通断,控制牙椅向上下仰卧四个方向、漱口位置和就诊位置运动。考虑到使用者的安全和牙椅设备的稳定可靠问题,在运动过程中CPU 必须对四个方向的限位开关和底座障碍物保护开关的反馈信息进行实时监控并做出相应的保护动作。

关于一种基于ARM嵌入式技术的牙椅控制系统设计深度剖析

为达到方便使用的目的,面板控制模块同样也要能够控制牙椅的上述运动并实时记忆牙椅的位置,因此系统要实现底座板和面板的实时通信。结合CPU芯片的特点和实际需求两者采用串行外设接口(SPI)进行高速数据同步传输。面板CPU 可接收外部扩展键盘的输入来执行响应的命令,并预留了扩展接口。


由于外部设备对于CPU 来说都属于强电控制部分,为了使两者之间既保持控制信号联系,又要避免电气干扰,即实行弱电和强电隔离,面板控制模块增加了光电隔离电路。无影灯的亮度数字调节设计采用了PWM 方式。S3C44B0X 有5 个定时器可以提供PWM输出。由于系统使用的无影灯额定功率为50W,额定电压为12V,属于大电流工作,为了保证无影灯的调节精度,在控制电路上采用场效应管IRF540 与光电隔离电路配合控制。


2.2 系统的软件设计

考虑到系统将来可扩展图像采集功能和复杂的人机界面等因素,在S3C44B0X 上移植了μC/OS-II操作系统。μC/OS-II 是目前流行的免费公开源代码的实时操作系统。它不仅具有结构小巧、可固化、可裁剪、多任务和可剥夺型的实时内核等特点,其实时性、稳定性和可靠性也得到了广泛认可。μC/OS-II 的最小内核可编译至1.5KB,可广泛应用于从8 位到64 位单片机的各种不同类型、不同规模的嵌入式系统。在内存使用方面,μC/OS-II 是可裁剪的实时内核,在应用中需要调度的任务越多,需要的RAM 空间越大。


以运行20 个任务进行估算,μC/OS-II 内核占用不到2KB 的RAM 空间,可以使用20 个信号量、邮箱等来完成任务间的同步与通信。


系统以S3C44B0X 的T0 定时器作为操作系统的时钟源,中断频率为10ms。系统每隔10ms 就调用一下键盘查询程序以实时响应键盘事件,串口和CPU之间的SPI 通信采用中断方式接收和发送。任何时候只要没有关中断,中断的执行就高于任何任务以保证通信的实时性。根据控制系统的工作要求,任务可划分为键盘任务,茶杯给水任务,茶杯给水定时设置任务,无影灯任务,LED 指示灯任务,报警信息任务和冲洗痰盂任务。


因为任务间、任务和中断间的通信都是基于信号量机制集中管理,所以要建立起信号量的保护机制。


在起始任务StartTask 中,首先建立一系列的信号量和邮箱:

关于一种基于ARM嵌入式技术的牙椅控制系统设计深度剖析

然后,用OSTaskCreate( )函数建立7 个任务。最后,在起始任务中将它本身删除掉。

(1) 键盘任务:调用OSSemPend(Sem_Keyboard,0,&err)来获得信号量。获得信号量后,任务将调用邮箱发送消息任务OSMboxPost (OS_EVENT*pevent,void*msg)唤醒相应的其它任务。

(2) 茶杯给水任务:向茶杯中加水。该任务通过OSMboxPost(Mbox_Cup,Msg_Cup)被唤醒。

(3) 茶杯给水定时设置任务:设置茶杯给水定时时间。该任务通过OSMboxPost(Mbox_CupSetting,Msg_CupSetTIng)被唤醒。

(4) 报警信息任务:牙椅运动到达障碍位置报警等的报警信息,并进行相应的处理。该任务调用OSSemPend(Sem_AlarmTask,0,&err)获得信号量。

(5) 冲洗痰盂任务:冲洗痰盂。该任务通过OSMboxPost (Mbox_Ty,Msg_Ty 被唤醒。

(6) LED 灯指示任务:通过动态扫描方式点亮相应的键盘指示灯来指示当前的系统工作状态。该任务通过OSMboxPost (Mbox_LED,Msg_LED)被唤醒。

(7) 无影灯任务:开关及连续调节无影灯亮度。

该任务通过OSMboxPost(Mbox_Move,Msg_Move)被唤醒。

在系统中,设置任务1 的优先级最高,依次为任务2、任务3 至任务6,程序流程如图3所示。

关于一种基于ARM嵌入式技术的牙椅控制系统设计深度剖析

在上述任务中,CPU 主要是接受键盘的输入以唤醒其它相应任务,另外还有相应的记录位置的任务和与上位机通信的任务,这里不再做详细介绍。


3 控制系统调试结果

长时间口腔诊疗应用调试运行,本牙椅控制系统能够及时响应输入并按要求运动,返回的记忆位置误差控制在1mm 内,茶杯水位误差不超过2mm,运行结果表明,控制系统与上位机的通信及两CPU 之间通信实时性、可靠性均满足设计要求,且整个系统运行平稳可靠,便于调试和维护,提高了牙椅自动化水平和档次。


4 结语

本文采用嵌入式处理器和实时多任务操作系统增强了系统的功能,提高了系统的可靠性、实时性并使系统具有良好的可扩展性,便于后续扩展图像采集和人机界面功能,为进一步开发高端产品奠定基础。


该牙椅控制系统可提高国内牙椅生产设计水平,已在广州某医疗器械厂投入生产,创造了良好的经济和社会效益。

关键字:ARM  嵌入式技术  牙椅控制系统 引用地址:关于一种基于ARM嵌入式技术的牙椅控制系统设计深度剖析

上一篇:初学者需要掌握的选择ARM开发硬件方法
下一篇:Linux向目标系统AT91RM9200的移植方法与应用优势分析

推荐阅读最新更新时间:2024-11-17 12:14

可能是最通俗易懂的方式讲解ARM中断原理以及中断嵌套
几天前一个学生问我ARM中断嵌套的问题,我才发现原来在我心中理所当然的事对学生来说理解实属不易。 ARM有七种模式,我们这里只讨论SVC、IRQ和FIQ模式。 我们可以假设ARM核心有两根中断引脚(实际上是看不见的),一根叫 irq pin, 一根叫fiq pin。在ARM的cpsr中,有一个I位和一个F位,分别用来禁止IRQ和FIQ。 先不说中断控制器,只说ARM核心。正常情况下,ARM核都只是机械地随着pc的指示去做事情,当CPSR中的I和F位为1时,IRQ和FIQ全部处于禁止状态。无论你在irq pin和fiq pin上面发什么样的中断信号,ARM不会理你,你根本不能打断它,因为它“耳聋”, 眼瞎 了。 当I位和F
[单片机]
ARM Cortex系列(A8/A9/A15/A7) NEON多媒体处理SIMD引擎优化
Cortex-A9的NEON多媒体处理器是基于ARMv7的SIMD(Single Instruction Multiple Data)和向量浮点VFPv3(Vector Floating-Point)指令集的,在具体的芯片设计中NEON组件是可选的,NEON处理器是面向音频、视频编解码器、图像处理和语音信号处理以及其他的基带等信息处理领域的。 本文介绍了NEON处理器的基本架构、NEON处理器的并发情况下Cortex-A8和Cortex-A9的区别、NEON的寄存器组和数据类型、NEON编程的针对编译器、汇编器的优化方法以及其他的提高性能的并行方法。 图1. ARM体系结构的演进 Cortex-A9 处理器简介 图2.
[单片机]
<font color='red'>ARM</font> Cortex系列(A8/A9/A15/A7) NEON多媒体处理SIMD引擎优化
基于S3C6410的ARM11学习(十八) 移植printf和scanf
在学c语言的时候,经典的hello world程序,是通过printf函数实现了。有了这个函数,就可以随意的向屏幕打印数据了。在嵌入式中,其实也是可以用printf函数的,不过需要稍微麻烦点的移植。毕竟,在嵌入式中,所有实现的都要自己来弄,不在向PC程序开发一样,很多库函数,操作系统已经搞好,就用就行了。 首先,是要去下载能实现printf的源代码。这里用的是国嵌提供的。有两个文件夹,一个include,里面一些头文件,另外一个lib,实现printf的需要的额外的程序。 中间的是inlcude中的头文件,下边是lib中的文件。 在lib中有一个Makefile。这个Makefile
[单片机]
基于S3C6410的<font color='red'>ARM</font>11学习(十八) 移植printf和scanf
ARM嵌入式编译器(五) 优化循环的4种方法
1. 循环展开 循环执行的时间取决于循环的次数,循环中每次检查是否进行循环的条件会降低循环的性能。使用循环展开可以减少检查条件的判断次数,但是展开循环就意味着增加代码量。例如:在精确的时钟周期循环中,可以使用#pragma unroll (n)来展开循环。 “pragma”(编译指示)仅在选择优化等级为-O2/-O3/-Ofast和-Omax时有效。 编译指示的相关用法: 注:虽然给出了循环展开的编译指示,但Arm官方不建议使用,这样会影响编译器的展开优化和其他循环优化。 将代码分别复制到file.c文件中,然后使用以下命令进行编译和反汇编。 armclang --target=arm-arm-none-eab
[单片机]
ARM下启动linux条件-bootloader
为了启动在ARM板上启动linux系统,需要在启动kernel之前运行一小段叫bootloader的程序,bootloader初始化各种设备后调用kernel,并向其传递一些参数; 言之,bootloader必须完成以下作用: (1) 设置并初始化内存; (2) 初始化一个串口; (3) 判断平台设备类型; (4) 设置启动参数列表;//标记列表(tagged list) (5) 启动内核; 1 . 设置并初始话内存 bootloader用于寻找并初始化kernel启动后在RAM内存中存储的易丢失性数据,按某个机器特定方式执行(或者用基本的算法自动加载数据和计算RA
[单片机]
ARM7 LPC2378 远程升级----扇区
这里有个时间概念,大家先了解一下:LPC2378单个 Flash 扇区或整个芯片擦除的时间为 400ms,256 字节编程的时间为 1ms,对IAP的操作时间有个大概的了解。 再回到扇区,扇区数:有些 IAP 和 ISP 命令根据“扇区”进行操作并指定扇区数。下图列出了 LPC2300 系列器件的扇区数和存储器地址之间的对应关系,这些器件包括含 64KB、 128KB、 256KB 和512KB Flash 的器件在内。 IAP、 ISP 和 RealMonitor 程序都位于 boot 区。 boot 区位于所有器件中地址 0x0007 E000 到 0x0007 FFFF 处。 ISP 和 IAP 命令不允许对 boo
[单片机]
<font color='red'>ARM</font>7 LPC2378 远程升级----扇区
ARM处理器s3c2410的中断异常处理
    在进入正题之前,我想先把ARM920T的异常向量表(Exception Vectors)做一个简短的介绍。     ARM920T的异常向量表有两种存放方式,一种是低端存放(从0x00000000处开始存放),另一种是高端存放(从0xfff000000处开始存放)。关于为什么要分两种方式进行存放这点我将在介绍MMU的文章中进行说明,本文采用低端模式。ARM920T能处理有8个异常,他们分别是: Reset,Undefined instruction,Software Interrupt,Abort (prefetch),Abort (data),Reserved,IRQ,FIQ     下面是某个采用低
[嵌入式]
Ubuntu下安装arm-linux-gnueabi-xxx编译器
安装ARM-Linux-GCC工具链 在你的Ubuntu系统是最新的前提条件下,只需要执行如下命令就可以成功安装: sudo apt-get install gcc-arm-linux-gnueabi 安装完成之后,直接在终端中键入 arm-linux-guneabi-gcc -v 可以看到具体的版本信息。 另外我们也可以通过官网的下载包进行安装: 官网:https://launchpad.net/gcc-arm-embedded 目前最新的包:gcc-arm-none-eabi-5_2-2015q4-20151219-linux.tar.bz2 (下载Linux版本) 在/home/justin目录下新建目录tools
[单片机]
Ubuntu下安装<font color='red'>arm</font>-linux-gnueabi-xxx编译器
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved