半导体激光器驱动电源的嵌入式GUI开发

时间:2015-06-25 10:17来源:电子产品世界作者:Peter 点击:
------分隔线----------------------------

摘要:半导体激光器驱动电源的控制核心处理器采用Sitare系列ARM处理器AM3354,其最高运行频率可达800 MHz,集成了基于ARM Cortex A8的微处理器单元(MPU),POWERVR SGXTM图形加速器,可编程实时单元和工业用通信子系统,保证系统在低功耗运行的同时拥有高性能。

关键字:激光,激光技术

    Linux在台式机上的成功,使大家看到了Linux在嵌入式系统领域中的辉煌应用前景。嵌入式Linux具 有源码开放、硬件需求低、软件模块化、可随意配置免许可、可移植等特点,符合工控领域可靠性、实时性、稳定性等要求。Qt是奇趣(Trolltech)公 司开发的一套跨平台的应用程序开发框架,拥有直观、强大的API接口和C++类库,2000年发布的Qt/Embedded Linux版本可用于Linux嵌入式设备,Qt/Embedded Linux提供了自己的窗口系统,并且可以作为X11的轻量级替代产品。半导体激光器具有体积小、重量轻、运转可靠、耗电少、效率高等优点,作为一种新颖 的激光光源,已经广泛用于军事、医疗、通信、工业等领域,如激光通信、激光雷达、激光手术、激光焊接。半导体激光器的特性受驱动电流和温度的影响,阈值电 流随温度的升高而增大,当达到阈值电流时输出光功率随注入电流成线性变化,相同注入电流在不同温度下的输出光功率也不同,温度的变化也会引起中心波长的漂 移,所以,半导体激光器的控制包括对驱动电流的控制和工作温度的控制。半导体激光器驱动电源的控制方法多样,利用Qt/Embedded开发的嵌入式图形 用户界面能够方便地实现对驱动源系统的实时监测、控制、数据存储等功能。

  1开发环境的搭建

  半导体激光器驱动电源的控制核心处理器采用Sitare系列ARM处理器AM3354,其最高运行频率可达800 MHz,集成了基于ARM Cortex A8的微处理器单元(MPU),POWERVR SGXTM图形加速器,可编程实时单元和工业用通信子系统,保证系统在低功耗运行的同时拥有高性能。硬件结构如图1所示,外接256 MB的SDRAM和2 GB的NANDFLASH;电源管理芯片TPS65217用于处理器的电源管理,它能提供灵活的加电和断电时序并拥有电源正常输出、按钮监视器等附加功 能;外接7寸LCD液晶显示触摸屏,处理器内的LCD控制器集成了LCD接口显示驱动器控制器,经过驱动电路后可直接连接LCD模块;AM3354处理器 最多可支持6个UART,系统通过串口与LD驱动源连接进行数据的传输。

  

 

  图1 LD驱动源控制硬件结构图

  嵌入式应用软件的开发属于跨平台开发,由于目标机CPU和宿主机CPU拥有不同的架构,需要构建一个交叉编译环境,使在宿主机上开发出来的程序 经过交叉编译后能够在目标机上运行。用来开发的计算机称为宿主机,一般运行Linux操作系统。嵌入式设备属于目标机。这里使用的宿主机为安装了 Ubuntu操作系统的X86计算机(Ubuntu是一个以桌面应用为主的Linux操作系统),目标机为AM3354为处理器的嵌入式主板,操作系统采 用嵌入式Linux.由于Qt /Embedded和Qt/X11有一样的API,在开发嵌入式环境的应用程序时,可以先在带Qt/X11库的宿主机上开发。

  在此安装的交叉编译器版本为arm-linux-gcc-4.4.3,支持硬浮点运算。解压到某一目录下,在系统启动文件/etc /profile设置交叉编译器环境变量,最后导入环境变量,#arm-linux-gcc-v命令可以查看编译器是否添加成功。安装嵌入式Qt应用程序 开发库,解压Qt/Embedded库到相应目录下并编译。在应用程序运行时,要正确设置环境变量,以使应该程序能正确调用安装目录下的库文件。

  2 Qt/Embedded应用程序软件设计

  Qt/Embedded软件体系摒弃了X lib库,将外部输入设备抽象为键盘和鼠标事件,采用帧缓冲作为底层图形接口,应用程序可以直接写内核帧缓冲,避免了使用繁琐的X lib/Server机制。

  Qt/Embedded应用程序设计有两种方式,一种是用集成开发环境图形编程方式,一种是代码编程方式。无论使用哪种方式都会涉及元对象系 统。元对象系统是对C++进行扩展的一种机制,Qt使用这种机制创建了独立的软件组件,它提供了关键的两项技术:信号-槽以及内省。内省功能对于实现信号 和槽是必需的,并且允许应用程序的开发人员在运行时获得有关QObject子类的“元信息”,包括一个含有对象的类名以及它所支持的信号和槽的列表。信号 和槽是Qt通信机制的核心。当一个特殊的事情发生时便可以发射一个信号,而槽就是一个函数,它在信号发射后被调用来响应这个信号,通常一个信号对应一个 槽,一个信号也可以关联多个槽,多个信号也可以关联到同一个槽上。

  2.1串口通信的实现

  在Qt中并没有特定的串口控制类,大部分使用第三方写的qextserialport类。该类包含两个类:QextSeri-alBase类和 Posix_QextSerialPort类,后者继承前者,而QextSerialBase类又继承自Qt软件自带的QIODevice类。在 QextSerialBase类中涉及到了一个枚举变量QueryMode,它有两个值Polling和EventDriven,Polling指的是查 询方式读/写串口,EventDriven是事件驱动方式。事件驱动方式就是使用事件处理串口的读取,一旦有数据到来,就会发出readyRead()信 号,就可以关联该信号来读取串口的数据。

  在事件驱动的方式下,串口的读/写是异步的,调用读/写函数会立即返回,它们不会冻结调用线程。而查询方式Polling读/写函数是同步执行 的,信号工作在这种模式下是不起作用的,但这种模式下开销较小,可以建立定时器来读取串口的数据,并将结果显示在Qt的图形用户界面上。这里采用 Polling查询方式读/写串口。设置一个100 ms的定时器,通过Qt特有的信号与槽机制,将定时溢出信号关联到读串口槽函数上,实现数据的实时采集显示。

  程序流程:首先新建一个串口类,设置串口通信的属性,最常见的属性设置包括通信端口、波特率、数据位、奇偶校验、停止位以及控制流等,然后读/写串口。

  每个设备端口在/dev目录下都有一个对应的文件,Linux下的文件用文件描述符来描述,它指向内核中每个进程打开的文件记录表。串口资源的文件路径是/dev/ttyO*,因此对串口的操作就像对普通文件的操作一样,部分操作程序如下:

  struct PortSettings myComSetting = {BAUD9600,DATA_8,PAR_NONE,STOP_1,FLOW_OFF,500};

  QString portName ="/dev/ttyO2";

  myCom=new Posix_QextSerialPort(portName,myComSetting,QextSerialBase::EventDriven);

  myCom->open(QIODevice::ReadWrite);

  QByteArray temp=myCom->readAl(l);

  2.2软键盘的调用

  文中设计的软键盘包括字母、数字的输入、大小写字母的切换以及退格、回车等功能。在Linux环境的QtDesigner下,创建一个新的 Widget,将Buttons选项中的PushButton按键拖入到软键盘区域内,然后根据需要修改每个按键上面的文本属性和名字属性。

  软键盘的实现是基于信号与槽机制。利用Qt的多信号映射机制,首先使用QSignalMapper类来捆绑不同按键所发送的一系列无参数信号, 并将其转化为有参数的信号,实现一个函数可以响应不同按钮的功能;然后需要建立每一键值对应的信号与槽之间的关系 connect(ui->pushButton,SIGNAL(clicked()),码值信号调用sendCharacter(QChar)槽, 从而实现正确的键值输入。界面设计如图2所示。

  

 

  图2软键盘界面

【光粒网综合报道】( 责任编辑:Peter )
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------

凡光粒网注明"来源:光粒网"或"来源:www.oeworld.cn"的作品,包括但不限于本网刊载的所有与光粒网栏目内容相关的文字、图片、图表、视频等网上内容,版权属于光粒网和/或相关权利人所有,任何媒体、网站或个人未经光粒网书面授权不得转载、摘编或利用其它方式使用上述作品;已经书面授权的,应在授权范围内使用,并注明"来源:光粒网"。违反上述声明者,本网将追究其相关法律责任。

【免责申明】本文仅代表作者个人观点,与光粒网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

在线投稿有投稿需求的公司企业请直接在线申请,其他项目合作联系电话:027-65526099 QQ:2644977628 QQ:1965483967 → 在线申请投稿 >
Copyright  ©  2010-2018 oeworld.cn Inc. All rights reserved.光粒网 版权所有
鄂ICP备11013139号-2