【某时钟信号源测控嵌入式控制软件设计案例12000字】_第1页
【某时钟信号源测控嵌入式控制软件设计案例12000字】_第2页
【某时钟信号源测控嵌入式控制软件设计案例12000字】_第3页
【某时钟信号源测控嵌入式控制软件设计案例12000字】_第4页
【某时钟信号源测控嵌入式控制软件设计案例12000字】_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

某时钟信号源测控嵌入式控制软件设计案例目录TOC\o"1-3"\h\u20295某时钟信号源测控嵌入式控制软件设计案例 [47]。综合考虑,使用树莓派的硬件串口,通过RS485总线与时钟信号源的底层硬件模块进行数据传输,通信过程如图3-15所示。嵌入式控制软件通过控制树莓派串口将控制字下发至底层硬件控制器(如FPGA,STM32),即各个控制节点,控制底层硬件执行对应操作。也是通过树莓派串口将底层控制器的反馈信号返送至控制软件,由控制软件对反馈信号进行分析处理。因此串口通信模块是本设计的重要部分,只有通过正确发送接收数据,才能精确控制时钟信号源合成目标信号。Qt对串口通信提供了专用模块QtSerialPort,该模块由QSerialPort类及QSerialPortInfo类组成。QSerialPort类主要用来对串口的相关参数进行设置,QSerialPortInfo类主要用来检测计算机中的可用串口,并提供有关串口的数据信息。本设计通过调用QtSerialPort模块中的相关函数来实现串口通信功能。图3-15时钟信号源串口通信结构图Fig.3-15Structureofserialcommunicationsignalsource本课题在该模块的主要任务是根据通信需求,获取参数管理模块的相关控制字,按照需求将控制字合成为特定的硬件控制指令,通过串口总线统一将控制指令发送至时钟信号源的各个控制节点,控制底层硬件协同工作,最终输出用户所需的时钟信号。通信模块按功能可划分为两部分,第一部分是根据一定的规则,按照通信需求将以通信协议为标准格式的控制字合成控制指令,第二部分是创建串口线程,将合成的控制指令发送给底层的控制节点,控制“需”动作节点执行相关指令。图3-16通信模块工作流程图Fig.3-16Workflowchartofcommunicationmodule通信模块的工作流程图如图3-16所示,每当嵌入式控制软件界面参数发生改变,参数管理模块就会根据参数信息调用相关的控制节点函数,及时更新对应的控制字,并向通信模块发送一个信号,让通信模块将更新的控制字合成控制指令。一个时钟信号源输出信号参数的改变需要不同的硬件模块共同配合来实现,当一个参数的设定改变时,会对应不同控制节点控制字的改变,将这些与一个参数相关、不同控制节点需要的控制字合成控制指令,由串口线程统一发送至所有控制节点,每个控制节点识别指令中的地址信息,根据地址匹配与否来判断是否控制底层硬件执行相关命令,执行命令的所有控制节点相互配合最终实现时钟信号源输出时钟信号某一参数的改变。根据参数与控制节点的这一特性,设定了固定的规则,规则如表3-3所示。表3-3参数与控制节点对应表Table3-3Correspondingtableofparametersandcontrolnodes参数控制节点地址控制节点函数名(软件)参数控制节点地址控制节点函数名(软件)频率周期0x02fre_function_02()输出通道0x10output_volage_function_relayAnd987_10()0x03OCXO_function_03()0x11Q_volage_function_ONET1101L_11()0x04fre_function_04()0x71switch_function_71()0x09phase_and_freDiv_function_09()CMOS输出通道0x10output_volage_function_relayAnd987_10()0x10output_volage_function_relayAnd987_10()0x41CMOS_volage_function_DAC2_41()0x11Q_volage_function_ONET1101L_11()0x42CMOS_volage_function_DAC1_42()0x21LVDS_volage_function_ONET1101L_21()0x71switch_function_71()0x41CMOS_volage_function_DAC2_41()RS485输出通道0x10output_volage_function_relayAnd987_10()0x42CMOS_volage_function_DAC1_42()0x71switch_function_71()延时相位0x08timeMod_function_08()LVDS输出通道0x10output_volage_function_relayAnd987_10()0x09phase_and_freDiv_function_09()0x21LVDS_volage_function_ONET1101L_21()时基设置0x01time_base_function_01()0x71switch_function_71()时间调制0x01time_base_function_01()PRBS输出通道0x07PRBS_and_delayLine_function_07()0x05prescale_function_05()0x71switch_function_71()精度估算0x08timeMod_function_08()CLK输出通道0x08timeMod_function_08()伪随机码0x07PRBS_and_delayLine_function_07()0x71switch_function_71()电平0x11Q_volage_function_ONET1101L_11()CMOS电平0x41CMOS_volage_function_DAC2_41()0x12Q_volage_function_DAC_12()0x42CMOS_volage_function_DAC1_42()控制指令由控制某一参数的多个控制字组成,一个控制字对应一个硬件控制节点。当某一参数改变时,控制指令将下发至所有硬件控制节点,“需”动作控制节点接收到指令后,立即派遣底层硬件执行任务,无法控制各个底层硬件执行相关指令的顺序与时间,可能会导致某一底层硬件功能的漏失。可以通过增加延时控制下发控制指令中控制字间的时间间隔,但并不能排除某一硬件停滞死机所导致的仪器输出异常的问题,基于次,本课题设计了阻塞式串口线程dataserialport类,使用Qt信号量,以阻塞方式发送数据后等待读取缓冲区内的反馈量,若反馈量正确,则继续发送控制指令中的下一控制字,否则重复发送原控制字。图3-16阻塞式串口线程逻辑流程图Fig.3-16Logicflowchartofblockingserialportthreaddataserialport线程工作流程如图3-所示,在主线程的构造函数中调用dataserialport类的串口初始化函数,设置串口波特率为115200baud。当需要下发指令时,主线程调用串口线程写函数sendReciveData(constchar*strCmd,qint64leng,QByteArray&pstrReply),清空缓冲区数据,返回当前信号量可用资源个数,并将所有资源全部用去,清空反馈量字符串pstrReply;将待发送数据、数据长度与期望反馈量以形参形式传递至写函数,通过串口发送至底层硬件控制器,若已发送数据与原数据长度相等,则判断数据缓冲区是否有反馈量返回,若有则赋值给反馈量字符串pstrReply,并以返回值的形式将反馈量返送至主线程。1.6状态管理模块设计在本课题中,时钟信号源当前设置状态按仪器参数类别可分为两大类:一类为通道设置状态,即输出时钟信号的频率、相位、电平等参数设置状态;另一类为仪器设置状态,即仪器当前时基设置状态、时间调制设置状态、精度估计设置状态与各个输出通道的开闭状态等。前者状态可直接于界面编辑框显示,而后者状态无法直接通过仪器前面板观察,需设计间接方法使用户知晓仪器当前状态。为方便用户实时观察时钟信号源当前的仪器设置状态,设计了仪器状态管理模块,该模块采用“观察者模式”[48],用一个或多个状态参数同时观察同一仪器设置参数,当被观察参数的状态改变时,立即通知所有观察它的状态参数,使这些状态参数同步刷新自身状态。仪器设置参数的状态参数观察联系表如表3-4所示,状态轮询与错误数均以标签形式在界面下状态显示区反应仪器状态。表3-4状态参数观察联系表Table3-4Stateparameterobservationcontacttable参数名被观察参数状态参数参数名被观察参数状态参数输出通道Q_openlabel_LED_Q_1PRBS输出通道PRBS_openlabel_LED_PRBS_1led_flag[0]led_flag[7]_Q_openlabel_LED_Q_2_PRBS_openlabel_LED_PRBS_2led_flag[1]led_flag[8]COMS输出通道CMOS_openlabel_LED_CMOS_1CLK输出通道CLK_openlabel_LED_CLK_1led_flag[2]led_flag[9]RS485输出通道RS485_openlabel_LED_RS485_1_CLK_openlabel_LED_CLK_2led_flag[3]led_flag[10]_RS485_openlabel_LED_RS485_2时基选择TimeInReltlabel_LED_TimeInled_flag[4]LVDS输出通道LVDS_openlabel_LED_LVDS_1时间调制TimeModReltlabel_LED_TimeModled_flag[5]_LVDS_openlabel_LED_LVDS_2频率估算TimeCalReltlabel_LED_TimeCalled_flag[6]状态轮询StateReltlabel_state_awser伪随机码PRBSReltlabel_LED_PRBS_state错误数errorReltlabel_error_awser仪器输出通道选择结果以两种方式指示仪器当前输出状态:在界面上状态显示区通过自定义QcwIndicatorLamp类控件以指示灯的形式表达对应通道的开闭状态;在仪器前面板输出接口按键部分通过按键灯的亮灭来映射对应通道的开闭状态。因此设计输出通道的被观察参数以“_open”结尾,表示输出通道的开闭,检测被观察参数的状态参数分别以“label_LED”、“led_flag”开头,前者为界面显示区指示灯对应的状态参数,后者为前面板输出接口按键灯对应的状态参数。当某一输出通道开启时,指示灯对应的状态参数通过调用QcwIndicatorLamp类setAlarm(int)函数来设置指示灯为绿色,按键灯对应的状态参数通过调用guidingled类的output_led(int)函数来设置按键灯亮;当该通道关闭时,设置指示灯为灰色,按键灯灭。要实现按键灯的亮灭映射输出通道状态这一功能,需通过对树莓派的I/O口输出电平进行控制,进而完成实体按键下的LED灯亮灭的控制。因此编写guidingled类来控制按键灯对应GPIO口的输出电平,该类的逻辑流程图如图3-17所示。在MainWindow类构造函数中调用guidingled类的gpioinit()函数对树莓派的GPIO口进行初始化,配置按键指示灯对应I/O口为低电平输出模式。创建led_flag[]数组,将所有按键灯对应的状态参数以数组元素形式按顺序附入led_flag[]中,当检测到输出通道的某一被观察对象N_open状态发生改变时,其对应的状态参数led_flag[n]随之更新自身状态,随后根据led_flag[n]的状态设定I/O口的高低电平。图3-17guidingled类功能逻辑流程图Fig.3-17Functionlogicflowchartofguidingledclass除输出通道的被观察参数外,其他仪器设置的被观察参数均以“Relt”结尾,表示仪器设置结果(result),被观察参数的状态参数同样以“label_LED”开头,象征使用QLabel类的提升类QcwIndicatorLamp类指示灯控件指出当前仪器设置状态。各个仪器设置参数的选择状态与对应指示灯状态的联系如表3-5所示,其中指示灯的“1”状态表示指示灯为绿色,“0”状态表示指示灯为灰色。表3-5仪器设置参数状态对应表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论