摘要:研究并实现了基于dsPIc30F4012控制的无刷直流电动机控制器与上位机之间的数据通讯,用Lab—VIEW6设计了上位机的数据通讯程序,用c语言编写了电机控制程序中的uART接收中断函数,实验结果验证了上位机程序与电机控制程序的正确性。 关键词:DSP;无刷直流电动机:uART数棍通讯:电机控制 O引 言 无刷直流电动机与电子技术、微电子技术、数字技术、自控技术以及稀土永磁材料的发展密切相关,因其拥有优良的性能使得无刷直流电动机在某些领域取代了有刷电机。本文采用的dsPIc30F4012是由MicrochiP公司专为电机高速控制而设计的16位数字控制芯片,已有多篇论文对该芯片以及由其做成的无刷直流电动机控制器进行了介绍,于此不做详述。本文研究基于dsPIc30F4012的无刷直流电动机控制器与上位机之问的数据通讯的实现方式,研究并设计了上位机程序和与上位机程序相对应的电机控制程序,实验结果验证了上位机与电机控制器的数据通讯符合本文的设计要求。 1上位机与电机控制器之间的数据通讯原理 上位机与电机控制器之间的数据通讯原理如图l所示。

上位机将要发送的指令数据等通过数据包的形式发送到下位机,下位机接收到数据包之后,按照事先规定好的通讯协议对其进行解包,由上位机向电机控制器发送数据完成;下位机将接收到指令数据也通过数据包的形式发送至上位机,上位机接收到数据包之后对其进行解包.由电机控制器向上位机上传数据完成,这就是上位机与电机控制器之间的数据通讯原理。本文所指的上位机为计算机,上位机与电机控制器之间是通过uART串行数据通讯实现的。电机控制器通过TTL电平转换电路转换成RS232电平与计算机的c0M口连接。 为确保接收到的数据与发送的数据一致,在数据通讯的过程中加入了包头、cRc校验算法,因此通讯的数据包包含的数据有:包头soi、命令描述符Command、数据高8位h8、数据低8位18、cRc校验值chksum。包头的作用是开始接收数据的标志,cRc校验值是为了确保发送的数据的正确性,包头和cRc校验值共同保证,整个数据包发送与接收的正确性,以避免数据紊乱。命令描述符使可以发送的数据类型可以有很多种,比如速度、PID计算的系数等,由此可以制定一个上位机与电机控制器之间的通讯协议。数据高8位、数据低8位为具体的数据,其含义与命令描述符有关,比如命令描述符为速度,数据则为速度值。 2上位机程序 上位机的程序是通过LabVIEW8.6编写,其功能主要实现数据打包发送至电机控制器与接收电机控制器发送来的数据并显示,其程序可分为串口通讯没置、cRc校验算法、数据打包发送、接收数据并处理。 (1)串口通讯设置串口配置程序如图2所示,使用LabvIEw8.6中内部自带的VIsA配置串口模块来设置通讯方式。在本文中涉及到的主要包括端口选择、波特率设定、奇偶校验选择、发送的数据长度以及停止位。
 (2)cRc校验算法程序在发送与接收过程中均用到了cRc校验算法,因此将其做成了cRc校验算法子VI,以方便使用。 cRc校验算法子VI的输人为命令字符command与数据h8+18,输出为产生的cRc校验值chksum。
 cRc校验算法程序流程如图3所示。 (3)数据打包发送电机转速由受PMM的占空比控制,控制占空比就相当于控制速度,因此本文在此发送的数据是占空比值,实现由上位机控制电机速度。在打包发送数据程序设计时一定要加上延迟,以避免下位机接收紊乱,其程序如图4所示。发送的数据包为图中的打包数据,数据包头为0x55。
 (4)接收电机控制器发送的数据因为一次只能接收8位二进制数据,因此整个数据包是通过五次循环完成的,故在接收时加延迟时间,以避免接收乱码。其程序如图5所示,从下位机接收到的数据包放在接收到的数组内,等待后续处理。
 本文中接收的数据包是上位机发送的数据包经下位机即电机控制器解包一打包一上传之后的数据包,这两个数据包应该是一致的,因经上位机程序解压出来的占空比应一致,如不一致则说明上位机程序或者下位机程序错误,其解包处理程序如图6所示。
 3电机控制程序 电机控制器中的程序是用c语言编写的,通过MPLAB IcD2仿真连接器下载至数字控制芯片dsPIc30F4012中。本文主要研究并设计了整个uART接收中断两数,PwM中断函数则是参考以往实验程序稍加修改,整个电机控制程序流程如图7所示.电机控制程序首先要对数字控制芯片dsPTc30F4012进行系统配置,然后对用到的uART、PwM模块进行初始化配置,编写PwM中断函数和uART接收中断函数,等上位机发送指令数据引起uART中断事件,进入uART接收中断函数,接收数据并解包,将收到的数据再打包上传,执行完uARl函数之后改变了程序中占空比的值,引起了PwM中断事件,从而进入PwM中断函数,对电机进行换相,实现电机转速控制,执行完各中断之后,程序进入主函数中的whhi1e循环,每隔一段时间,将看门狗清零,以防dsPIc30F4012进行复位。 本文中上位机与电机控制器之间的数据通讯是在uART中断函数实现的,及数据包接收与发送均由uART中断函数完成,uART接收中断函数程序框架如图8所示。在接收数据时,由于每次接收到的是8位二进制数,因此需要五次接收,需加延时程序,以免接收错误,接收到的数据临时放在数组A[i J中。接收完数据后,进入数据解包程序,得出所发送的数据,在本文中为占空比值,将发送的占空比值赋给控制占空比的变量,改变电机转速,之后进入数据上传函数,把刚刚接收到的数据即占空比值打包上传到上位机,最后清除uART接收中断标志,退出uART接收中断函数。 数据解包函数框架如图9所示。首先判断接收到的数据的包头是不是预先规定的0x55,若不是则直接退出此函数。找到包头后,然后将接收的命令描述符command与数据data送至cRc校验算法函数,将产生的校验值与上位机发送来的校验值相比较,若一致,则将data值赋给占空比变量以控制电机转速;若不一致则说明接收的数据有错,不引起PwM中断,直接退出。该函数中的cRc校验算法函数与上位机中的cRc校验算法流程一致,只是编写语言不同,故于此不再详述。 数据上传函数框架如图10所示,分为数据打包与数据上传两部分。数据打包部分与上位机程序中数据打包发送类似,程序流程是一致的,所不同的足编写语言。数据打包后放在一个数组B[j]里,分五次将该数据包上传至上位机,中间的延时一定要与上位机的一致,否则会发生上位机接收紊乱。 在本文中,uART接收中断函数为整个电机控制程序的核心设计,而PwM中断函数则是参考以往程序,对其稍加修改揉进本程序中,已有论文对其进行阐述,在此不做详细介绍。 4实验结果 通过MPLAB IcD2仿真连接器把电机控制程序下载至数宁控制芯片,脱机运行,让上位机程序也运行,由上位机向电机控制器发送数据即占空比值,然后再由电机控制器将发送的占空比值打包之后卜传至上位机,其实验结果如图11、图12所示。 图11为占空比值从l00~300,即占空比从25%~75%由上位机发送至电机控制器的占空比曲线图和由电机控制器上传至上位机的占空比曲线图。由图可知,两条曲线是一致的,放在一个图中会重合,于是分开显示。 图12(a)是上位机发送的占空比值为270即占空比为67.5%时的卜位机数据显示结果,发送的数据包与接收的数据包是一致的,接收的占空比值也与发送的占空比一致。图12(b)是上位机发送值电机控制器占空比为67 5%电机转动时,由示波器测出的PMw输出波形,将波形放大几倍之后,算得其占空比约为68%,在误差允许的范围之内,与上位机发送的占空比是一致的。 图11与图12的实验结果表明,本文实现了上位机与电机控制器的数据通讯,为后续工作打下了基础。 5结语 本文给出了基于dsPIc30f4012控制的无刷直流电动机控制器与上位机数据通讯的上位机程序设计与电机控制程序中的uART接收中断函数设计。 每一步看似简单,在实际程序研究设计中需经多次反复修改才能达到所要达到的目的。本文实现的上位机与下位机的数据通讯,为以后的速度计算、上传以及PID闭环速度控制提供了基础。
|