新闻中心

EEPW首页>嵌入式系统>设计应用> 基于QTE的ARMDSP嵌入式系统的直流电机监控界面的设计与实现

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

作者: 时间:2011-07-25 来源:网络 收藏


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

f.JPG


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

g.JPG


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

a.JPG

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

h.JPG


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

i.JPG


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

j.JPG


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

设计电机状态读取部分时,首先定义了结构体motor_status:

k.JPG


当电机处于正常工作状态时,点击界面上‘Receive’,自定义的槽函数receive data()会响应,实现对电机状态的读取。制定的DSP反馈给ARM9的数据包的格式如表1所示,数据格式大小为16位的char型数组。在槽函数中,使用read(fd_serial,buff16)函数通过串口读取这16位带有电机状态信息的数据,并赋值给数组buff[]。


将字符数组buff[]各个字段传递给对应motor_status属性,并分别发送自定义信号。用于显示电机状态的控件QLabel是QWidget的子类,其槽函数setText(QString)接收信号并将其显示。比如,显示电机转速状态的过程是:发射自定义信号speed_changed(QString),触发QL-abel类型控件label_DiskSpced_value的槽函数setText(OString),将当前电机转速显示在界面上。该信号和槽函数连接的语句为connect(this,SIGNAL(speed_changed(Qstring)),ui->label DiskSpeed value,SLOT(setText(QString)),实现了电机转速的数据显示。
3.3 电机控制界面
电机控制界面提供了对电机控制指令的配置,电机控制界面如下图6所示。

b.JPG


点击‘Edit’键可对参数进行编辑,之后点击‘Send’,通过串口传输生效。
先定义了电机参数结构motor config:

m.JPG


点击‘Send’后发送控件QPushButton的信号clicked(),它会触发自定义的槽函数send_data(),实现通过串口传递给DSP控制指令。定义DSP接收的电机控制的数据格式,如表2所示,需要大小为13位的char型数组存储电机控制信息。槽函数send_data()中,按照格式赋值给
char型buff[]数组,然后通过函数write(fd_serial,buff,sizeof(buff))将数据写入串口。

n.JPG


3.4 实验结果
完成QT应用程序在PC端的Linux下的仿真运行,编译出在开发板上执行的二进制可执行文件,最终在嵌入式ARM板上运行效果如图7所示,实现了ARM与DSP的串行通信及对电机的监控。

c.JPG



4 结语
基于QT/Embedded的GUI应用程序运行在嵌入式操作系统Linux上,高效稳定,UI设计提供了良好的用户体验,满足了嵌入式设备的界面显示需求。本课题采用ARMDSP+Linux+QT/Embedded的技术方案,设计与实现了电机控制界面,显示了高性能嵌入式处理器、智能化嵌入式操作系统、图形化应用程序在嵌入式产品应用上的可行性。


上一页 1 2 下一页

关键词:直流电机图形化用户

评论


相关推荐

技术专区

关闭