基于ARM9和QT的步进电机驱动控制系统设计与实现
2014-01-21朱耀麟沈昕宇
朱耀麟,沈昕宇
(西安工程大学 电子信息学院,陕西 西安 710048)
嵌入式控制系统以其低功耗、低成本、高性能等优势被广泛用于工业控制领域,而在嵌入式控制系统中步进电机驱动控制技术是关键技术之一[1]。在步进电机控制系统设计中,传统的方法是用逻辑电路或单片机实现步进电机控制,虽然此方法可行,但由于线路复杂而且制成后不易调整,存在一定的局限性[2]。随着嵌入式技术的发展,越来越多的智能化带有界面控制功能的小型设备深入到人们生活当中。开发者基于嵌入式领域中的Qt技术,设计出一套应用于工控领域的具有人机交互界面的智能控制统,Qt是挪威Trolltech著名的标志性产品,采用C++作为程序设计语言,已经成为用C++GUI工具包在Linux上进行自由软件开发的主流,是Linux上流行的KDE桌面环境的基础[3]。Qt/Embedded是著名的Q t库开发商Trolltech公司开发的面向嵌入式系统的Qt版本。Qt是Server/Client结构,延续了Qt在X上的强大功能,在底层摒弃了Xlib,仅采用帧缓冲作为底层图形接口。Qt/Embedded类库完全采用C++封装,提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能[4]。Qt/Embedded是完全面向对象的,很容易扩展,提供了丰富的窗口部件集,并且允许真正的组件编程。
1 硬件电路设计
1.1 系统整体框图
该控制系统的硬件部分主要由:步进电机、TA8435H、S3C2440微处理器、光电耦合器、触摸显示屏组成。控制系统硬件结构图如图1所示。
图1 系统硬件结构框图Fig.1 The system hardware structure diagram
系统在Linux下应用Qt设计开发嵌入式控制系统人机界面的方法,通过触摸屏界面对步进电机进行控制,控制步进电机的转动方向和转速、细分模式等。
1.2 电路设计
1.2.1 SC2440和TA8435H电路设计
本系统的硬件核心电路是由S3C2440处理器、TA8435H步进电机驱动芯片以及步进电机组成的步进电机控制电路。步进电机控制电路如图2所示。
图2 步进电机控制电路Fig.2 Stepper motor control circuit
在该步进电控制系统中,采用了以arm920t为内核的S3C2440芯片,该芯片是三星公司生产的一款高性能微处理器,具有功耗小、性能高、价格低等优势,在许多领域都获得了应用。本文选择该芯片为核心处理器,并将其植入Linux系统,进而完成通过触摸屏对步进电机交互控制。S3C2440芯片拥有289个引脚,其中多功能通用I/O多达30个,分别为GPA~GPJ,GPA有25个输出端口,其余均可根据需要配置成输入或输出[5]。为了实现四个电机的可靠控制,本系统选择GPB端口为控制端口,该端口具有8个引脚,分别为GPB0~GPB8,所以可完成步进电机的实时控制。TA8435H是东芝公司生产的单片正弦细分二项步进电机驱动专用芯片,TA8435H可以驱动二项步进电机,且电路简单,工作可靠。
TA8435H步进电机驱动芯片引脚4外接电容的电容值决定芯片内部驱动级的斩波频率,这里使用的电容容量是0.01 μF。 由于电机所需要的驱动电流为 0.1 A, 因此设定REF IN引脚为高电平,Rnf=0.8 Ω。步进电机接口需要使用快恢复二级管(D1-D4),用来泄放绕组电流。
1.2.2 电路可靠性设计
为了提高硬件的可靠性并且有效抑制干扰,S3C2440和TA8435H之间加入由光耦TLP521-4和TLP521-2芯片组成的电平隔离电路,将S3C2440处理器控制信号与步进电机控制器进行电平转换和隔离。电平隔离电路如图3所示,S3C2440处理器GPIO端口、PWM输出引脚通过光电耦合器TLP251实现电平隔离转换。
图3 电平隔离电路Fig.3 Level isolation circuit
2 软件设计
由于在实际工业控制中会对电机有精度、速度、稳定性、方向等要求,所以本设计要通过触摸屏按键交互,实现对电机正转、反转、转速、细分模式的选择。
TA8435H芯片有正转反转两种工作模式,分别通过引脚CW/CK1/CK控制电机的正反转[6]。也可以通过M1,M2输入引脚的高低电平来选择细分模式。当M1M2为00表示步进电机工作在整部方式,没有细分;10为半步方式,01为1/4方式;11为1/8细分方式。在低速工作时,可以选用1/4或1/8细分模式,以提高步距角精度;在高速工作时,可以选用整步或半步方式,以提高步进电机运行的稳定性,减小步进电机的噪声和振动。
步进电机的转速是由脉冲信号频率所决定的,脉冲信号的产生与控制实际是由CPU产生的,一般脉冲信号的占空比为 0.3-0.4 左右,电机转速越高,占空比则越大[7]。 本设计中电机转速是通过改变定时器参数,已产生其他频率和占空比的PWM输出控制步进电机。PWM输出信号占空比公式为
PWM输出信号的占空比=
PWM定时器的设置,要分别设置定时器0的预分频器值和时钟分频值,以供定时器0的比较缓冲寄存器和计数缓存寄存器。 预分频值为 0~255,分频器的分频值为 2,4,8,16。定时器输出时钟频率为
TCLK=PCLK/[(预分频值+1)]×分频器分频值 (2)
当时钟被使能后,定时器计数缓冲存储器(TCNTBn)把计数初值下载到递减计数器中,定时器比较缓冲器(TCMPBn)把其初始值下载到比较寄存器中,并将该值和递减计数器的值进行比较。这种基于TCNTBn和TCMPBn的双缓冲特性使定时器在频率和占空比变化时产生稳定输出。
3 QT控制界面设计开发
首先介绍将Qt/Embedded在以S3C2440为核心的硬件平台上的移植。该系统采用CPU内部LCD控制器和320*240分辨率的16bpp TFT LCD作为显示设备,同时移植了ARM Linux作为操作系统。这里用到的操作系统平台是Linux--Red Hat 9.0,交叉编译器版本是 arm-linux-gcc 4.1.2。其次介绍以qtopia为图形界面应用程序开发平台和图形界面控制电机系统的开发过程。
3.1 tslib移植
本设计采用的触摸屏是TQ4.3寸屏,因为要通过与触摸屏的交互来控制电机,也就是说在开发板上操作QT程序,是通过触摸屏完成的,所以首先要移植tslib,进行触摸屏校正。tslib是一个开源的触摸屏支持库,它是handhelds.org上开发的,作者是 Russul King,Douglas Lowder和 Chris Larson。 它给上层的应用程序,为不同的触摸屏提供了一个统一的接口。它提供诸如滤波、去抖、校准之类的功能。
解压源代码 tslib-1.4.tar.gz,编译安装 tslib,将安装路径下的整个tslib文件夹,下载至开发班的上,存放的路径为/usr/local。设置开发板环境变量,通过超级终端,打开环境变量文件/etc/profile,添加如下内容:
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_TSDEVICE=/dev/input/event1
export QWS_MOUSE_PROTO=tslib:/dev/input/event1
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=none
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
3.2 QT开发环境搭建与移植
将 qt-4.6.3.tar.gz 压缩包解压为 3 份, 分别编译 PC ,嵌入式 x86和 arm 三个版本的 Qtopia-2.2.0。 在 root目录下建立 tmp 文件夹,将 qt-4.6.2.tar.gz 直接解压后复制 3 份,分别命名为 pc、x86、arm。 将 Linux-Red Hat上/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib (bin/include/fronts) 中的所有文件分别复制到 ARM板 /flash/qt/lilib(bin/include/fronts)目录中。移植qt的嵌入式版本到嵌入式设备中,保证设备启动后可以正常进入到GUI模式。
3.3 建立QT项目文件
在PC的Linux的终端输入命令:#qt2/bin/designer&l来在后台启动QT设计器。 设计步进电机的控制界面,整个控制界面的名称为xagc,并将按钮的点击事件与控制电机转速和方向的函数用信号与槽连接起来 。图4是电机控制界面,控制界面分别控制电机转动、细分模式、四种转速。图5是信号和槽连接,添加的响应函数为 void Motor_CW(),void Motor_CCW (),voidDriver_Mode1/2/3/4(),void Speed Model1/2/3/4()。
图4 电机控制界面Fig.4 Motor control interface
图5 信号和槽连接Fig.5 Signals and slots connections
保存工程名为xagc.ui,然后使用uic软件将刚刚建立工程转化为源代码,首先建立一个可执行脚本来完成文件转换,这里用到的文件名与ui相同,该脚本会在以后开发中用到,设置ui2cpp脚本为可执行,最后执行建立的脚本转换文件。获得源码 xagc.h;xagc.cpp;moc_first.cpp。程序如下。
#gredit ui2cpp
#chomd+x ui2cpp
#./ui2cpp
使用tmake中的progen软件产生pro文件,编辑pro文件。程序如下:
TEMPLATE =app
CONFIG =qtopia warn_on release
HEADER =xagc.h
SOURCES =xagc.cpp/
Main.cpp
INTERFACES =xagc.ui
根据得到的pro文件使用tmaker软件生成Makefile文件,手首先复制前面制作好的“xagc/”目录到“/opt/EmbedSky/Qte/arm-qtopia-2.2.0/pro/”目录下,然后重新打开一个 PC的linux的终端,重新设置环境变量,修改Makefile文件,然后编译即可完成移植。
4 结果测试
经测试,电机控制界面移植到了s3c2440上,并通过触摸屏按键的交互,可以实现步进电机的控制,并且在改变电机速度时,电机可以稳定的运行。实例运行结果如图6。
图6 实例运行结果Fig.6 Instance run results
5 结 论
图形用户界面的广泛流行是当今计算机技术的重大成就之一,它极大地方便了非专业用户的使用[8]。本设计通过Linux下应用Qt设计开发嵌入式控制系统人机界面的方法,设计出了简单方便的步进电机控制界面,实现了对步进电机转速、方向、细分模式的选择控制。运用这一技术控制的步进电机成功地应用到我们研制的核电设备的焊机系统上,系统运行稳定,控制精度高,其软件界面形象生动,并且编程简单,实现起来非常方便,并且可根据用户的不同要求随时调整控制方式,因此具有广泛的应用价值。
[1]李杰,罗庆,韩宝玲,等.基于ARM9和Linux的步进电机四轴驱动程序设计[J].微计算机信息,2012,28(4):50-53.LI Jie,LUO Qing,HAN Bao-ling,et al.Arm9-based and Linux fouraxissteppermotordriverdesign[J].Micro Computer Information,2012,28(8):50-53.
[2]陈方泉,李建周,马思文,等.基于LabVIEW的步进电机驱动设计及其应用[J].上海大学学报:自然科学版,2006,12(1):46-50.CHEN Fang-quan,LI Jian-zhou,MA Si-wen,et al.Stepper motor driver based on LabVIEW design and its application[J].Journal of Shanghai University:Natural Science Edition,2006,12(1):46-50.
[3]赵毅,游有鹏.基于Qt/Embedded的嵌入式数控系统人机界面设计与开发[J].工业控制计算机,2008,21(4):79-83.ZHAO Yi,YOU You-peng.Embedded nc system based on Qt/Embedded human-machine interface design and development[J].Industrial Control Computer,2008,21(4):79-83.
[4]倪继利.Qt及Linux操作系统窗口设计[M].北京:电子工业出版社,2006.
[5]周立功.ARM微控制器基础与实战[M].北京:北京航空航天大学出社,2003.
[6]刘升.二相步进电机驱动芯片TA8435H及其应用[J].电子设计工程,2005(3):37-40.LIU Sheng.Two phase stepping motor driver TA8435H chip and its application[J].Electronic Design Engineering,2005(3):37-40.
[7]王鸿枉.步进电机控制技术入门[M].上海:同济大学出版社,1990.
[8]游燕珍,赵国锋,徐川.基于Qt/E的嵌入式GUI的研究及其移植[J].微计算机信息(嵌入式与SOC),2008(14):61-63.YOU Yan-zhen,ZHAO Guo-feng,XU Chuan.Based on the research of Qt/E embedded GUI and its transplantation[J].Microcomputer information (embedded and SOC),2008(14):61-63.