您要打印的文件是:LabVIEW,32路舵机控制板和多自由度机械臂

LabVIEW,32路舵机控制板和多自由度机械臂

作者:佚名    转贴自:http://www.eefocus.com/zhang700309/blog/12-12/289716_4f26b.html    点击数:27


   从题目上看,这篇文章涉及了LabVIEW的编程、32路舵机控制板的使用和多自由度机械臂的动作演示,应该还有蓝牙通讯,后面三部分内容,在前面的文章中讲述过,文章题目《32路舵机控制板与多自由度机械臂》,网址:http://www.eefocus.com/zhang700309/blog/12-09/286479_a1c80.html 。这篇文章主要讲LabVIEW如何编程来与舵机控制板串口通信,并进而控制机械臂上的各个舵机。

    32路舵机控制板由国内公司DFRobot出品,上一篇文章讲述了如何用控制板自带的舵机控制软件,来设置舵机动作的方法,这篇文章希望用LabVIEW程序来代替厂家的舵机控制软件一部分功能,来做一个为这个实验项目量身定做的人机界面。

实验视频: 

 点击网址,全屏看视频,

http://www.tudou.com/v/anpCVbq0ZDI/&rpid=96368873&resourceId=96368873_04_05_99/v.swf。  

   多自由度机械臂的6个舵机分别控制爪子抓放、腕部旋转、腕部上下、肘部上下、臂部上下和臂部旋转,这些部位的舵机按照从爪子到塔台的顺序,分别通过控制线接到舵机控制板的通道上,通道编号为3、4、5、13、14、15,如下图所示。

6自由度机械臂:(所有图片,双击都可以放大观看!

 32路舵机控制板:

 

   多自由度机械臂上的6个舵机都支持180度转角,舵机的转动角度是通过调节PWM(脉冲宽度调制)信号的占空比来实现的,标准PWM信号的周期固定为20ms(50Hz),脉宽在500us到2500us之间,脉宽和舵机的转角0°~180°相对应。

       从人机对话前面板入手,开始讲解LabVIEW编程,看看下图LabVIEW前面板中,有六个滑动杆控件,用鼠标移动游标,在行程范围从500到2500的滑动杆上移动,就可以分别控制机械臂上的六个舵机转动角度。

     六个滑动杆的当前值会立即反馈到后台程序,即LabVIEW框图程序,这个程序会把这些数据组合成一行字符串命令,并通过串口,下达给32路舵机控制板,进而控制机械臂上的舵机。所以这次LabVIEW编程有两个要点:1、如何编写LabVIEW串口通信程序,让舵机控制板接受到上位机下达的字符串命令;2、如何把数据类型为整数的六个舵机PWM脉宽数据组合成字符串,而且这个字符串必须符合控制板对字符串命令的格式要求。

框图程序:(所有图片,双击都可以放大观看!

   上图的图形化编程设计是采用NI_VISA串口Serial函数来访问和控制串口的。VISA中的Serial函数库里包含VISA 配置串口、VISA 写入、VISA 读取、VISA 关闭等子函数。这些子函数的提取路径是:函数库→仪器I/O→串口,本设计用到的三个VISA串口子函数是:VISA串口配置函数VISA Configure Serial Port、VISA写入函数VISA Write、和VISA 关闭函数VISA Close。它们的图标见下图所示:

 

    VISA串口配置函数的作用是完成串口参数的初始化设置,包括了串口资源名称,波特率,奇偶校验、数据比特、是否启用终止符等,上图中该函数连接了两个输入变量,变量名为“请选择串口名”和“波特率”,它们分别连在串口资源名称和波特率参数端子上,变量值是在前面板上相应控件来设定的,其它输入参数采用默认值。图中VISA串口配置函数有两个输出端子,图标上面的输出端子输出的是串口资源名称,下面的输出端子输出的是错误码,输出端子向下游函数传递信息。
       VISA写入函数有三个输入端子,上面一个输入端子是前面VISA 串口配置函数传递的串口资源名称,下面的输入端子是传递的错误码,意思是若前面的函数出错了,会往这里输入一个错误码,然后继续往下面传递,有错误码出现时程序是不会工作的。中间的输入端子是写入缓冲区入口,写入缓冲区支持的数据格式是字符串

     VISA关闭函数VISA Close的作用是当程序停止之前,必须要把使用的串口设备关闭,若不关闭,其他程序就不能使用该设备。

    了解了LabVIEW的串口通信函数,下面的问题是如何把六个整数数据组合成字符串,而且这个字符串必须符合格式要求,然后把它送到VISA写入函数的写入缓冲区。

   DF-USBSSC32控制板说明书网址:http://wiki.dfrobot.com.cn/index.php?title=USB%E7%89%8832%E8%B7%AF%E8%88%B5%E6%9C%BA%E6%8E%A7%E5%88%B6%E6%9D%BF(SKU:DRI0005)

,看看里面的说明书,多舵机字符串命令的格式是如何解释的。

说明书文摘:

  舵机群运动实例:#5 P1600 #10 P750 T2500
 
通道5移动到1600us位置,通道10移动到750us的位置,2个都同时在2500us内完成,这个命令能协调多个舵机的速度。 

   机械臂上有六个舵机,它们的控制线接到舵机控制板的控制通道为3、4、5、13、14、15,不考虑移动速度,如果所有舵机都转动到90度位置,那么这个字符串命令应该如何写?答案是:

#3 P1500 #4 P1500 #5 P1500 #13 P1500 #14 P1500 #15 P1500字母P后面的整数数据是6个舵机通道的舵机PWM脉宽值,我用到了“格式化写入字符串”命令,该命令有一个“格式化字符”输入端,我对应地写入格式字符串为 #3 P%d #4 P%d  #5 P%d  #13 P%d #14 P%d  #15 P%d,%d意思是带符号整数数据,这个函数左侧的六个输入端输入的数据就是格式字符串的六个%d所对应的实时舵机脉宽值,舵机脉宽值通过前面板的六个滑动杆上的游标来设置。

    由于舵机安装的方位不同,所以程序中“3000-滑动杆当前值”算式的意思是让滑动杆游标的移动方向与舵机转动方向调整为一致,比如希望滑动杆游标左移,希望舵机顺时针旋转,如果发现实际情况是舵机逆时针旋转,就要用到这个算式。

     再看看LabVIEW框图程序中,与生成字符串命令相关的部分,我把它们单独截屏下来了。

 

   按照DF-USBSSC32控制板说明书上所述,在这个字符串命令后面要加入是回车符,我通过“连接字符串”函数,来实现回车符的加入。如上图所示。

    框图程序中,VISA配置串口函数下方的程序是:1、串口波特率设定为115200b/s;2、控制各舵机转角的滑动杆初值都设置为1500us,即舵机角度设置为90度,使程序开始运行时,机械臂到达工作初始位置,我在机械臂上安装舵机时,事先把所有舵机的转角都调整为90度,才把它们安装上去。

 

   通过以上编程,符合格式要求的字符串命令就这样一步步生成了,把这个字符串往VISA写入函数“一送”,就OK了,通过串口写到了下位机DF-USBSSC32控制板中,控制板不需要编写一行程序,它会自动理解下达的命令,同时响应前面板上滑动杆控件的游标移动,并驱使各舵机转动角度,让机械臂完成鼠标操纵者所希望达到的各种动作。

Labview程序请下载:labVIEW.zip

   我的这个实验项目与国外创客爱好者的项目,从原理是一致的,所以只要坚持做某项工作,别人能实现的任务,自己也可以逐渐实现。