微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于QTE的ARMDSP嵌入式系统的直流电机监控界面的设计与实现

基于QTE的ARMDSP嵌入式系统的直流电机监控界面的设计与实现

时间:07-25 来源:互联网 点击:

摘要:以嵌入式微处理器ARMDSP主从控制模式下设计直流电机控制系统,重点介绍基于QT/Embedded设计的直流电机监控系统界面,包括串口通讯和电机控制。搭建基于嵌入式操作系统Linux的开发环境,采用C++语言进行应用程序界面的开发,根据基于串口的应用层协议,实现主从控制器间的数据通信。并完成Linux操作系统的移植,通过触摸屏实现人机交互。
关键词:S3C2440;TMS320F2812:Linux;QT/Embedded;直流电机;图形化用户界面

0 引言
嵌入式技术在机器人控制领域应用广泛,它集中了机械工程、自动化控制以及人工智能等多门学科的最新科研成果,已经成为当前科技研究和应用的焦点与重心。而机器人控制系统需要解决的关键问题之一就是电机控制技术。本课题基于嵌入式系统处理器ARMDSP主从控制模式的硬件平台,利用Linux操作系统,对直流电机的控制进行研究,设计了基于QT的应用程序开发,以图形的方式给用户提供操作接口,实现对电机更加直观的状态显示和灵活的控制。

1 控制系统的整体设计
本系统的主控制器由基于32位ARM。
920T的RISC处理器Samsung S3C2440嵌入式开发板构成,内部运行嵌入式Linux操作系统,主要负责系统的控制以及与从控制器DSP的通讯等任务,主控制器通过串行通信接口(UART)实现与从控制器的数据通信,包括发送特定数据格式的控制指令和接收DSP控制器返回的传感器数据。利用Linux操作系统搭建平台并开发基于QT的图形界面,通过触摸屏实现人机接口,完成对电机和传感器的控制和传感器数据的显示。从控制器采用32位定点控制器TMS320F2812,主要完成对电机的控制,以及反馈给主控制器ARM9当前的运动状态。控制系统整体结构设计框图如图1所示。



2 串行通信设计
本系统中主控制器ARM9与从控制器TMS320F2812之间的通讯采用串行通信接口,即UART口。TMS320F2812的SCI模块利用中断进行控制,其接收和发送是双缓冲的,二者可独立地工作于全双工模式。串口通过两个可以复用和具有优先级的I/O引脚SCITXD和SCIKXD分别用于发送和接收数据,RS-232与DSP中的TTL电平之间需要配驱动和隔离电路可以组成一个简单的通信接口。在ARM9和DSP之间采用了符合RS-232标准的驱动芯片MAX3232进行串行通信,MAX3232芯片功耗低、集成度高,具有两个接收和发送通道。TMS320F2812串行接口电路如图2所示。


在TMS320F2812的串行通信接口工作时,其功能可以通过软件可编程实现,当接收到数据后,通过事件管理器模块中的通用定时器,PWM单元以及捕获单元对电机的方向和速度进行控制。



3 QT图形界面的设计
3.1 QT/Embedded
大多数的嵌入式系统都需要与人进行交流,而且形成了软硬件完全定制开发的、基于图形化显示、触摸屏控制的人机接口产品。QT/ Embedded是一个跨平台应用程序和UI开发框架,支持丰富的图形控件,提供美观的界面开发,完全满足人机交互产品的界面显示需求。QT/ Embedded的实现结构框图如图3所示。


QT应用程序由C++语言进行开发。QT的API分为控件、框架和工具三个部分,其高效的工作性能与其信号和槽的机制是密不可分的。QT/ Embedded开发流程如图4所示。


在宿主机上建立QT开发环境,安装交叉编译工具,包括编译器、链接器、库函数等,应用程序在宿主机上运行,而产生的目标代码是针对特定的硬件平台。并且使用QtCreator跨平台的Qt集成开发环境,有助于提高开发的效率。QT应用程序的开发是在宿主机上调试通过后,移植到目标板上。
3.2 串口通信界面
串口通信界面提供串口属性设置、串口数据通信的接口函数以及DSP反馈给ARM9的电机状态信息。串口通信界面如图5所示。通过点击界面中‘Edit Parameter’按键实现对串口各种参数的配置。正确配置好参数,点击‘ConneCt’按键即可连接串口,准备通信。电机状态可以点击‘Receive’获得。‘Motor’菜单可打开电机控制界面,其控制也是通过生效的串口传输。

设计串口配置的界面时,首先定义结构体serial config,具体如下:


在设置好串口参数后,点击‘Connet’后发送控件QPushButton信号clicked(),调用自定义槽函数setup_serial(),实现对QT控件中各个参数的读取,并根据参数配置对应的串口。其中,由控件portNameComboBox的成员函数currentText()获得设置的串口号,由此读取串口名称,并赋值给属性serial.dev。设置串口名称代码段如下:


类似地读取串口通信的其他相应参数。接下来,需要打开串口,代码段如下:


其中,使用open函数打开串口,获得串口设备文件的文件描述符fd_serial。
槽函数setup_serial()中,完成参数读取并打开串口操作后,通过调用自定义的子函数set baudrate(int)用来设置波特率,而子函数set Parms(int)则是设置其他参数。其中主要使用了针对Linux串口通信的termios数据结构对串口进行配置。由于使用串口对电机进行读取或控制,不允许等待,所以对于打开的任何串口,都需要将其设置为非阻塞工作方式。程序中通过fcntl(fd serial,F_SETFL,O_NONBLOCK)实现把Linux下默认为阻塞读的缓冲设置为非阻塞读。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top