发明内容
针对现有技术存在的缺陷及不足,本发明提供一种能够直接显示伺服驱动单元内部数据的波形方法,以方便开发人员对伺服驱动单元的内部算法的调整和电路的优化、测试人员进行产品性能测试、以及方便安装调试人员进行产品的工业现场调试。
本发明为实现上述目的所采用的技术方案是:基于伺服驱动单元的数据处理方法,包括以下步骤:
伺服驱动单元内的DSP芯片接收来自主机端的采样信息并进行初始化;DSP芯片内的虚拟A/D模块根据DSP芯片内部定时器产生的周期性中断对输入的伺服电机反馈数据和控制输入数据进行采样,并经FIFO发送至主机端;主机端对接收到的数据帧进行处理并显示控制调节参数、实时显示伺服电机运行的时域、频域波形。
所述采样信息包括采样频率、触发方式、触发限值。
所述初始化为设置采样频率、触发方式、触发限值。
所述虚拟A/D模块默认状态为Ready态,能够在采样过程开始前切换为Busy态,在取得采样数据后切换至Final态,在保存采样数据后恢复到Ready态。
所述虚拟A/D模块根据DSP芯片内部定时器产生的周期性中断对输入数据进行采样包括以下步骤:
判断采样标志位是否需要采样;如果为否,则出中断;如果需要采样,虚拟A/D模块将A/D状态切换为Busy态,采入一个float型数据;然后将采样状态切换为Final态;
判断采样信息中的触发方式;
如果为上升沿触发方式,判断触发方式标志位是否为1;若为1,则将该数据存入FIFO;如果不为1,判断本次采样数据的数值是否大于上一次采样数据;如果为不大于,则出中断,如果大于,则判断本次采样数据是否大于触发限值;若不大于,则出中断,如果大于触发限值,置触发方式标志位为1,将该数据存入FIFO;
如果为下降沿触发方式,判断触发方式标志位是否为1;若为1,则将该数据存入FIFO;如果不为1,判断本次采样数据的数值是否小于上一次采样数据;如果不小于,则出中断,如果小于,则判断本次采样数据是否小于触发限值;若不小于,则出中断,如果小于触发限值,置触发方式标志位为1,将该数据存入FIFO;
虚拟A/D模块将状态恢复为Ready态;出中断。
所述经FIFO发送至主机端包括以下步骤:
1)标记中断采样标志位;
2)判断采样信息中的触发方式是否为正常模式;
如果是,则执行3)判断FIFO是否达到预设容量;
如果未达到,则返回步骤3);如果达到,则FIFO内所有数据发送至主机端,清空FIFO;判断是否接收到主机端发来的停止帧,如果为否,则返回步骤3),如果收到,则清除中断采样标志位,结束;
如果为否,则执行4)判断FIFO是否已满;
如果为否,则返回步骤4);如果已满,则FIFO内所有数据发送至主机端,清除中断采样标志位,清空FIFO,结束。
所述主机端对接收到的数据帧进行处理并显示伺服电机运行的时域、频域波形和控制调节参数包括以下步骤:
主机端将接收到来自DSP芯片的数据帧通过调用函数显示伺服电机的控制输入、运行状态数据和波形;具体包括:时域波形;频域波形;峰值时间;超调量;稳态误差。
所述时域波形通过以下方法显示:调用dataToPixel(floatdata,inttime,refintx,refinty)计算得到坐标点,其中data为某一个数据的幅值,time为该数据采样的时刻,x为计算出的横坐标,y为计算出的纵坐标;并将所得坐标点保存,使用System.Drawing.Graphics.Drawlines(pen,points)绘制图像并显示,其中pen对象为绘制图像所使用的画笔,points为图像的所有采样点坐标集合。
所述频域波形通过以下方法显示:将时域数据转换为频域数据,然后调用freqToPixel(floatdata,intfreq,refintx,refinty)计算得到坐标点,其中data为数据的幅值,freq为频率,x为计算出的横坐标,y为计算出的纵坐标,并将所得坐标点保存,使用System.Drawing.Graphics.Drawlines(pen,points)绘制图像并显示,其中pen对象为绘制图像所使用的画笔,points为图像的所有采样点坐标集合。
所述超调量、稳态误差、峰值时间则通过调用calculateInfo(float[]data,reffloatdet,floatdth,refintts)函数得出超调量、稳态误差值、峰值时间,其中data为存储所有数据的数组,det为超调量,dth为稳态误差值,ts为峰值时间,通过调用函数showInfo(floatdet,floatdth,intts)显示,其中det为超调量,dth为稳态误差值,ts为峰值时间。
本发明具有以下有益效果及优点:
1.本发明在不增加额外设备成本的情况下,实现了一种伺服驱动单元调试的新手段,使伺服驱动单元的调试更加方便、灵活、高效。
2.本发明相较于常规示波器调试手段具有采集数据准确、数据精度高、直接获取算法数据、嵌入伺服驱动单元内部、现场调试无需携带沉重的示波器设备等优点。
3.本发明的数据传输采用高速USB芯片PDIUSBD12,可以满足大数据量,高实时性的要求,并且具有即插即用使用方便、生产成本低、研发资料全等优点,解决了传统数据传输使用计算机串口传输速度慢、数据带宽窄、抗干扰性弱等问题。
4.本发明的PC端的控制与数据分析示波器软件具有友好的图形化人机交互界面、实时显示伺服驱动单元内部数据的优点,相较于传统示波器调试手段还具有可放大图像的任意细节部分而不受零点坐标轴偏移量限制的优势,且操作灵活、使用方便。
具体实施方式
下面结合附图及实施例对本发明做进一步的详细说明。
本发明的技术方案是:直接在伺服驱动单元内部DSP芯片TMS320F28335上,虚拟一个A/D模块,该虚拟模块由固定频率的周期性中断推动,在中断的作用下采集要观测的数据,该数据可以是实际的物理量,例如电机的A相电流,也可以是伺服驱动单元在该时刻下某一电机控制算法计算所得出的结果。然后将采集到的数据存储在FIFO队列中,并通过高速USB接口芯片PDIUSBD12将FIFO中的数据发送至PC端,最后由PC端对相关数据重新构建为时域波形图像、频谱图,计算数据的峰值时间、超调量、稳态误差,并显示在PC端软件示波器界面上。
本发明伺服驱动单元嵌入式示波器(以下简称示波器)的整体结构如图1所示,本发明的示波器由三个子系统组成:
1)基于虚拟A/D模块的采样系统(以下简称采样系统),功能是收集和存储监视源(示波器的被测波形数据的来源,也是采样系统的采样目标)在一段时间内的采样数据,并通过高速USB数据传输系统将数据发送至PC机;
2)高速USB数据传输系统,实现了伺服驱动单元与PC机之间的通信,并完成它们之间的数据交换;
3)控制与数据分析示波器软件系统(以下简称示波器软件),对采样系统进行监视源选择、采样频率等功能性设置,并且接收到采样系统发送过来的数据后,可绘制出该数据的时域波形图、幅频特性曲线、计算出调节时间等功能。
本发明伺服驱动单元嵌入式示波器工作原理如图2所示,目标端为伺服驱动单元,主机端为PC机。目标端是由电源装置、通用DSP控制芯片和USB接口芯片等组成。伺服控制单元控制伺服电机的运行,主要是通过控制三相交流伺服电机的电压幅值和频率并接收伺服电机背部的光电式编码器反馈回来的速度和位置信号来实现的。伺服控制单元中DSP控制芯片主要实现对数据信号的采集并对其进行处理;USB接口芯片的主要功能是按照USB通信协议规范实现主机端与目标端的数据传输。
1.采样系统的实施过程
采样系统的原理图如图3所示。采样系统为多种触发方式实时采样系统,系统实时既有采样数据是实时之含义,又有触发方式为正常方式时,数据的时域、频域波形是实时显示之涵义。包括:
1)虚拟A/D模块,由伺服驱动器内部程序虚拟而出,用于完成对观测数据的采样;
2)监视源模块,在程序中以结构体变量的形式表示具体某一被观测量,该观测量可以为实际物理量,也可以是某一电机算法的结果;
3)周期性中断产生模块,用于产生推动虚拟A/D模块采样的中断,该中断时间间隔稳定可调,保证采样数据的实时性;
4)数据存储与转发模块,用于将采集到的数据存储在FIFO队列中并将其转发至下一系统;
5)示波器设置模块,用于完成对采样频率及触发方式的设置。
采样系统具体工作过程如图4所示。
采样系统在开始采样前首先接收PC端示波器软件系统发送的设置指令帧,进行初始化示波器设置,其帧格式如下:帧头:3.5个字节的传输时间;从机地址:0x01;功能码:0x64;子功能码0x12;采样周期(1字节);触发方式:0代表正常方式,1代表上升沿触发,2代表下降沿触发;通道数目(1字节);保留位(4字节);触发限值(4字节);触发点位置:(4字节);CRC校验码(2字节);帧尾:3.5个字节传输时间。
采样系统对此帧进行解析后,提取采样周期信息,并按照提取的采样周期设置周期性中断产生模块的中断周期,并将中断采样标志位置1,表示周期性中断来临后,需要在该中断内采样监视源数据。
若触发方式为正常模式,则一直判断FIFO内的数据容量是否达到了预设的容量,直到达到预设容量值为止。然后将数据通过高速USB数据传输系统转发至PC端,判断是否收到了PC端停止采样帧,若未收到,则等待FIFO内的数据容量达到预设值,继续如上循环操作,由此可得到实时采样的数据,可供PC端示波器软件实时显示波形使用。若收到停止帧,则清除中断采样标志位,程序结束。
若触发方式为上升沿或下降沿触发方式,则一直判断FIFO是否已满,直到FIFO内的数据确实已满,才将FIFO内的数据通过高速USB数据传输系统发送至主机端,此上升沿或下降沿触发方式的采样数据是实时的,但是数据的时域和频域波形并非实时,主要原因为该功能用于抓取一小段突变的上升沿和下降沿附近的数据波形,而非连续观测较长时间的数据波形。
虚拟A/D模块的主要工作过程在周期性中断服务程序中,如图5所示。
进入中断首先判断采样标志位,如果标志位为0(不需采样之意),则出中断。如果为1需要采样,则分为以下三种情况:
当触发方式为正常时,PC端下达开始采样指令后,虚拟A/D模块由Ready态切换至Busy态开始采样,然后判断监视源是否为实际物理量(例如电机的A相电流),若是物理量,则启动物理A/D芯片,得到该物理量的采样值;否则启动监视源内部算法并计算出结果,切换虚拟A/D模块的采样状态为Final态,最后将物理A/D芯片的值或算法计算结果存入FIFO,采样结束,虚拟A/D模块由Final态还原至Ready态。
当触发方式为上升沿触发,则在正常触发方式的工作过程中加入如下判断:
1)该数值是否大于上一次采样的数值,此判断可确定是否抓取到了上升沿,如果大于,则认为该沿是上升沿,否则保存本次采样数值到临时变量,出中断;
2)该数值是否达到了触发限值。若未达到限值,则保存本次采样数值到临时变量,出中断。若达到了触发限值,则将已抓取该沿标志位置1,并将该值保存至FIFO,虚拟A/D模块由Final态切换为Ready态。
触发方式为下降沿触发与上升沿触发类似,不再赘述。
监视源模块在程序中由结构体实现,具体成员变量包括:
1)监视源类别,char型,0代表一种算法,1代表实际物理量;
2)计算监视源数值函数指针,当虚拟A/D模块对该监视源采样时,会通过该指针调用算法或启动物理A/D芯片;
3)监视源数据结果,float型,示波器的观测数值保存在该变量中。
监视源模块具体实施过程如下,当虚拟A/D器件要对监视源采样时,虚拟A/D器件首先获取监视源结构体变量中监视源类别,然后通过计算监视源数值函数指针调用计算监视源数值函数,函数的返回值保存在监视源数据结果中,虚拟A/D模块即获得该采样数值。
2.高速USB数据传输系统的实施过程
本发明伺服驱动单元嵌入式示波器的目标端包含高速USB接口芯片,主机端PC机带有USB接口,其特征在于:所述高速USB数据传输系统的功能是按照USB通信协议规范实现主机端与目标端的数据传输,目标端的DSP控制芯片对采集到的数据进行相应的运算处理后,传送到目标端的USB接口芯片,USB接口芯片将传输数据进行转发,经过USB电缆线到达PC机的USB端口,应用PC端示波器软件程序读取USB接口的数据,以实现数据的分析和图形显示。
本发明伺服驱动单元嵌入式示波器的主机端为带有USB接口的通用PC机,采用PC机上C#软件语言调试工具可以对伺服驱动单元进行现场测试和调试。
系统的工作过程如下:伺服电机转动过程中产生的模拟信号经检测装置反馈到目标端,经目标端的DSP控制芯片转换成数字信号并进行相应的处理运算后,传送到目标端的USB接口芯片,USB接口芯片按照USB通信协议规范将传输数据进行转发,经过USB电缆线到达PC机的USB端口,在PC机端采用C#软件语言编写示波器界面程序读取USB接口的数据,并实现数据的分析和图形显示。
下面详细介绍目标端所采用的元器件及其性能,以及为实现目标端和主机端的通信需要完成的设计。
目标端的任务是将模拟信号转换为数字信号,并按照USB通信协议规范将数据传输到主机端。目标端在硬件上采用了电源装置、高速的DSP数字信号处理芯片、高速的USB总线。
其中DSP芯片采用的型号为TMS320F28335,USB总线接口芯片的型号为PDIUSBD12(以下简称D12)。
固件程序设计主要是进行USB与DSP之间数据交换的固件程序设计,其目的是要实现USB设备枚举、DSP与USB设备的数据交换以及USB设备端的数据处理与控制工作,如图6所示。
(1)DSP与D12的数据交换
DSP与D12之间的数据交换是通过事件标志和缓冲区实现的。由于DSP要进行大量的设备控制和数据处理等任务,因此固件程序设计成前后台模式分别实现。
前台主要建立了3个任务,TaskIdle为空闲任务,TaskSetup为控制传输处理任务,TaskStart为DSP写入或读取USB端口任务,这个任务建立之后一直运行,本文中它主要是读取USB端口1数据缓冲区(此数据缓冲区中为输入伺服驱动单元的频率值),然后计算出频率的正弦值,并写入USB端口缓冲区。
后台为ISR(中断服务程序),根据中断寄存器值,转向相应的中断服务程序。当中断寄存器值与端点1或端点2的输入地址值相与为真时,进行USB_ReadISR中断处理,即在USB端点缓冲区数据写满时,后台ISR负责将数据冲USB端点缓冲区移到DSP内存缓冲区,并清空USB端点缓冲区,以便下一次读数据。当中断寄存器值与端点1或端点2的输出地址值相与为真时,进行USB_WriteISR中断处理,即在USB端点缓冲区数据为空时,后台ISR负责将DSP内存缓冲区数据移到USB端点缓冲区。
(2)USB端的数据处理与控制工作
USB端的数据处理主要是对D12硬件设备端口进行读取和写入,D12有两个写端口,1个读端口。主要函数有以下三个:
voidoutportc(INT8UData);//写入数据
voidoutportd(INT8UData);//写入数据
INTUinportd(void);//发送数据
3.PC端示波器软件系统
PC端示波器软件采用C#语言进行编写,主要包括数据接收与发送模块、示波器设置模块、示波器波形显示模块、数据处理与分析模块,各个模块的具体功能将在后面叙述。
示波器软件流程如图7所示。首先用户通过鼠标点击主界面上的示波器设置控件或填写控件内空白的方式确定示波器的采样频率、触发方式、触发限值,然后用户点击开始按钮,示波器将设置信息封装整理为数据帧,通过高速USB数据传输系统发送至伺服驱动单元内,由伺服驱动单元中的采样系统接收,并改变采样系统的采样频率、触发方式、触发限值设置。
采样系统开始采样工作并将采样说得数据作为回复帧告知示波器软件,最后示波器软件将数据帧重构为数据时域波形图像和频域波形图像,具体重构过程在示波器波形显示模块中叙述,并计算和显示峰值时间、超调量、稳态误差。
下面具体介绍各个模块的功能:
1)数据接收与发送模块
本示波器软件使用C#语言封装了一个USB_Port类来对USB端口进行读写访问。该类中的成员函数如下:
USB_Port.Init();//为查找并初始化USB端口
USB_Port.Read(byte[]send,intlength,intoffset);//向USB端口发送数据
USB_Port.Write(byte[]receive,intlength,intoffset);//读取USB端口接收的数据
USB_Port.Close();关闭USB端口,USB端口读写完成后必须关闭,否则将无法再次打开。
数据接收完成和发送之前对数据解析和校验的过程如下。
若数据为接收到的数据,则首先按照下述通信帧格式进行解析。帧头:3.5个字节的传输时间;从机地址:0x01;功能码:0x64;子功能码0x16;通道号(1字节);数据长度(4字节);数据1(4字节);数据2(4字节);……数据N(4字节);CRC校验码(2字节);帧尾:3.5个字节传输时间。提取接收到的最后2个字节内容作为CRC循环冗余校验的校验码。
若数据为发送的数据,则按照如下方式封装数据包。帧头:3.5个字节的传输时间;从机地址:0x01;功能码:0x64;子功能码0x12;采样周期(1字节);触发方式:0代表正常方式,1代表上升沿触发,2代表下降沿触发;通道数目(1字节);保留位(4字节);触发限值(4字节);触发点位置:(4字节);CRC校验码(2字节);帧尾:3.5个字节传输时间。按照上述校验方法计算发送数据的校验码,写入发送字节的最后2位,再调用USB_Port.Write()重载将数据发送出去。
2)示波器设置模块由.NETFramework中的System.Windows.Forms命名空间中的控件组成,其中示波器通道数目、采样频率和监视源由界面上的ComboBox控件给出相应显示,触发方式由3个RadioButton控件进行显示,触发限值由NumbericUpDown控件显示,用户进行选择后,单击发送按钮,程序收集控件内的信息,并将信息组成如上第1条叙述的通信帧格式,并使用上述数据接收与发送模块中的USB_Port.Write()重载将数据帧发送出去。
3)示波器波形显示模块由System.Windows.Forms中的PictureBox控件实现。首先将PictureBox的背景色设置为黑色,重写PictureBox里的Paint方法,实例化一个PenpenGard对象,选用白色作为penGard的颜色,并设置其DashStyle属性为DashStyle.Dot,用penGard对象绘制出示波器的网状参考线,同样实例化出其他蓝、红等不同色彩Pen用于绘制波形。调用dataToPixel(floatdata,inttime,refintx,refinty)计算得到接收到的数据在PictureBox中的坐标点即完成数据到坐标点的重构过程,其中data为某一个数据的幅值,time为该数据采样的时刻,x为计算出的横坐标,y为计算出的纵坐标,并将所得坐标点保存在List<Point>points对象中,使用System.Drawing.Graphics.Drawlines(pen,points)绘制在PictureBox上,其中pen对象为绘制图像所使用的画笔,points为图像的所有采样点坐标集合,即完成了图像的显示。
4)数据处理与分析模块由显示幅频特性曲线按钮、计算超调量按钮、稳态误差按钮、调节时间按钮、峰值时间按钮组成。幅频特性曲线显示功能的实现通过调用calculateFrequency(float[]data,inttime,reffloat[]tarData,refintfreq)将接收到的时域数据转换为频域数据,其中data为时域数据,time为该数据采样的时刻,tarData为转换后频域数据,freq为频率,然后调用freqToPixel(floatdata,intfreq,refintx,refinty)计算得到坐标点,其中data为数据的幅值,freq为频率,x为计算出的横坐标,y为计算出的纵坐标,并使用System.Drawing.Graphics.Drawlines(pen,points)将该频域图像绘制在PictureBox上,其中pen对象为绘制图像所使用的画笔,points为图像的所有采样点坐标集合。超调量、稳态误差、峰值时间则调用calculateInfo(float[]data,reffloatdet,floatdth,refintts)函数,其中det为超调量,dth为稳态误差值,ts为峰值时间,计算出相关数据,在窗口中的label控件中显示。