摘要:本文介绍了由AVR单片机实现的核磁共振仪床体检测系统的硬件与软件设计,深入分析和研究了床体横向运动和纵向运动的精确控制问题。
关键词:AVR单片机;检测系统;电机控制;
1 引言
近年来随着医学技术的快速发展,核磁共振仪已经在大中型医院中被广泛的应用。目前,在核磁共振仪的生产过程中,床体部分要与磁体一起搬入电磁屏蔽室组装后才能进行检测,这对人员和物资都是很大的浪费。针对这种状况,本文设计出了一套核磁共振仪床体部分的运动控制与检测系统,它能够对床体部分独立进行检测,而不必将全部系统在屏蔽室安装后检测,从而降低了核磁共振仪床体部分的生产和检测成本,缩短了生产周期。
本设计以通用医疗集团的Ovation5型核磁共振仪的床体为对象,对驱动床体做横向运动的直流步进电机和驱动床体做纵向运动的直流伺服电机的精确控制问题进行较为深入的分析和研究。系统主要采用了ATMEL公司的Atmega128单片机和ALTRA公司的EPM240T100型CPLD芯片作为主控制部分,实现了对床体纵向和横向运动的精确控制和检测。主控电路采用了全数字控制方式和抗干扰设计,具有很高的抗干扰性能。
2 检测系统的硬件设计
2.1 系统硬件结构
本检测系统主要由主控制板、显示部分、按键开关、传感器、串行通信和电机控制部分构成。床体的运动分为横向运动和纵向运动两种状态,分别由直流步进电机和直流伺服电机实现。本系统的硬件结构如图1所示。
图1 系统硬件结构示意图
从图1可以看出,电机的逻辑控制由主控制板实现。系统经过初始化之后,当开关或按键发出通断信号给主控制板时,由单片机判断床体当前的状态,如果床体没有处于极限位置,则单片机向相应的电机发出驱动信号,驱动床体向相应的方向运动,否则床体停止运动。横向运动采用开环控制,运动位置由单片机发出的脉冲个数决定。纵向运动采用闭环控制,由连接在直流伺服电机上的编码器反馈位置信号给主控制板。
2.2 主控制板硬件设计
主控制板主要由AVR单片机、CPLD、滤波电路、电平转换电路和串口通信电路等构成。AVR单片机主要实现控制功能,CPLD主要实现I/O口扩展、逻辑判断和对输入、输出信号的编码解码功能。
本系统采用的AVR Atmega128单片机是一种高性能、低功耗的8位微处理器,采用先进的 RISC 结构,133 条指令大多数可以在一个时钟周期内完成,满足了本系统对执行速度的要求。它具有非易失性的程序和数据存储器,128K 字节的系统内可编程Flash。由于本系统在对纵向距离的增减,横向距离的增减,键盘扫描等程序设计均需要使用定时器。而此单片机分别提供了两个具有独立的预分频器和比较器功能的8 位定时器/ 计数器,以及两个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器。它具有两路8 位PWM和6路分辨率可编程(2 到16 位)的PWM输出比较调制器。它具有独立片内振荡器的可编程看门狗定时器,能够有效防止程序跑飞。
图2 主控制板硬件框图
主控制板硬件框图如图2所示,系统初始化后,当有运动按键信号输入单片机时,单片机将输出相应的纵向或横向控制信号。单片机接收经过滤波后的纵向电机编码器的信号,由内部程序计算当前的横向和纵向位置,并将当前的位置信息输出到CPLD,由CPLD驱动显示部分,显示当前的横向和纵向位置。在寿命测试模式下,纵向显示部分也同时可以显示寿命测试计数。本系统具有串行通信功能,能够通过串行接口与PC机或其他设备通信。
3 控制系统的软件设计
主控制板首先接收来自用户的操作信号,然后根据这些信号的状态,通过AVR单片机和CPLD内部程序实现对电机的控制和显示功能。在本检测系统中,由于需要控制和显示的信息很多,并且关联性很强,因此需要对单片机进行复杂的编程才能实现各个功能。对本系统而言,AVR单片机固化程序的质量,直接影响到了整个系统的运行稳定性和控制精度,因此AVR单片机固化程序的编程技术就成为系统控制的关键,这同时也是本系统的设计重点之一。通过分析床体的设计要求和实际运行情况,设计开发出一套床体运动测试程序,使得测试系统能够对床体实际运行中所有的运动状态、运动精度和运动寿命进行测试。
3.1 电机控制策略
本系统对步进电机采用了开环控制,对直流伺服电机采用了闭环控制。
3.1.1 步进电机的控制
直流步进电机由主控制板发出脉冲驱动信号给直流步进电机驱动器,从而驱动步进电机动作。电机的转动角度和位置由主控制板发出的脉冲个数决定。单片机是通过控制向驱动器输出脉冲的数量,经过计算后判断当前床体横向位置。横向位置通过数码管显示在用户界面上。由于步进电机具有误差不累积的特性,所以通过这种开环的控制方式能够实现步进电机的精确控制。
3.1.2 伺服电机的控制
直流伺服电机是由单片机发出的PWM驱动信号经过放大后驱动电机动作。通过接在电机上的编码器的反馈信号和前后极限位置传感器判断床体当前的纵向位置,实现了直流伺服电机的闭环控制。控制电机驱动信号,就可以实现电机的起/停、正/反转和加/减速功能,从而实现床体的简单运动、复杂运动和指定运动状态。伺服电机的驱动是由主控制板发出控制信号,由驱动电路驱动直流伺服电机动作,配以脉冲发生器(编码器)测量电机的转角,经滤波后反馈给单片机,从而构成了电机的闭环控制系统,实现了对直流伺服电机的精确控制。
3.2 AVR单片机固化程序
AVR单片机固化程序采用ICC语言编写,并使用模块化的设计方法,分为主程序、键盘扫描模块、显示模块、运动控制模块、横向运动测试模块、纵向运动测试模块和寿命测试模块。模块化设计使软件更加灵活,便于调用和移植,并且在错误发生的时候,可以很快的找到错误,极大的提高了系统的可靠性和稳定性。
3.2.1 主程序
主程序要完成系统的初始化,中断设置,全局变量设置和看门狗设置等。在初始化结束后,系统进入主查询循环过程,判断当前进行的操作,并进入相应的功能模块。系统程序中采用了状态位的方式,实现主程序和各个功能模块,以及各个功能模块之间的运动状态的通信,保证了在各个功能模块之间切换时,系统的安全和稳定性。系统主程序的流程图如图3所示。
图3 主程序流程图
图4 键盘扫描模块程序流程图
3.2.2 键盘扫描模块
由于对系统响应速度要求不高,所以键盘扫描采用了查询的方式。键盘扫描模块程序流程图如图4所示,纵向运动的优先级大于横向运动的优先级,当纵向按键和横向按键同时按下时,床体将会纵向运动,横向运动按键被屏蔽。
3.2.3 寿命测试模块
寿命测试部分是本系统中结构最复杂,涉及变量最多的一个功能模块,并且同时存在系统状态位和寿命测试状态位变量,所以各个功能模块之间的状态通信也比其他功能模块复杂。在这个模块中,主要实现了床体自动进行复杂运动的功能,并且能够对各种预先设定的循环运动计数,从而实现对床体的寿命测试。
图5 寿命测试模块
3.3 CPLD固化程序
CPLD固化程序采用VHDL语言编写。主要功能为:
① 驱动“纵向位置”数码管显示当前纵向位置或寿命测试计数;
② 对极限位置传感器的差分信号解码后,输出给MCU;
③ 接收横向位置信号,并驱动“横向位置”数码管,显示横向位置;
④ 驱动极限位置指示LED;
4 结论
通过在核磁共振仪的床体上进行的实际应用,证明本系统能够完全实现对床体的控制功能,并且满足对床体各种测试的要求,具有较高的稳定可靠性。本系统能够独立对核磁共振仪的床体进行检测,大大降低了生产成本,缩短了生没产周期,具有较高的应用价值。