目录
一、功能设计
二、硬件分析
2.1 所需材料
2.2 串口通信协议
三、程序设计
四、VI实现结果
4.1 子vi字符串换算功能
4.2 软硬件联调验证
五、分析与总结
文章来源地址https://www.toymoban.com/news/detail-440998.html
学校对于LabVIEW的学习进行的一次课程设计,设计内容主要是通过LabVIEW的VISA串口通信部分做出相对应的课题,本人选择了将LabVIEW通过VISA通信做上位机的设计,本文将围绕此部分分享在设计过程中的心得。
一、功能设计
通过LabVIEW的VISA串口通信模块,设计出使用滑杆输出,在波特率为9600的情况下,通过数值转十六进制字符串经串口将信号输入完成机械臂的运动,通过发送指令如0xFF 0x02 0x01 0x0a 0x00的字符串对机械臂状态进行控制,使得操纵人员可以通过滑杆控制机械臂,对机械臂的爪子,腕部旋转,臂部旋转,腕部上下运动,肘部上下运动,臂部上下运动,等六个舵机进行操控。即程序前面板为为机械臂舵机的列表,可以根据通信协议,对机械臂的动态进行串口通信。
Labview作为上位机发出命令给作为下位机的机械臂舵机。下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般为模拟量),转换成数字信号反馈给上位机。
二、硬件分析
2.1 所需材料
图 1 机械臂俯视图
图 2 机械臂正视图
图 3 16路舵机示意图
如(图1)的机械臂俯视图中,我们对机械臂的供电采用12V电源(图中标注为⑦)通过变压器(图中标注为⑥)对其进行降压,产生5.5V电压和2.5A的电流,经过经过16路舵机(图示为⑤)对机械臂进行控制。
在(图1)与(图2)中标注的六个舵机为:①号舵机,主要控制机械臂爪子的开关。②号舵机,控制机械臂爪子腕部的转动。⑧号舵机,控制机械臂腕部的上下运动。③号舵机,控制机械臂肘部的上下。④号舵机,控制机械臂臂部的上下。⑨号舵机控制机械臂底部转盘的转动。
2.2 串口通信协议
1、 电平:TTL 电平(非RS232 电平,若将模块错接到RS232 电平可能造成模块损坏)
波特率:9600,停止位1,校验位0。
2、上位机至控制板
说明:
(1).出厂默认设置使用串口,波特率9600。配置可通过上位机软件配置,因为所有配置都是掉电保存的,所以只需配置一次就行。
(2).数据格式
0xFF |
CMD |
CH |
DataL |
DataH |
每个数据包5个字节,注意数据是按照16 进制方式发送的,不是ASCII 码。第一个字节是起始码0xFF。第二个字CMD。第三个字节为通道号,即需要控制哪个通道的数据。第四和第五位分别为数据的低字节和高字节。
3、设置舵机位置
0xFF |
0x02 |
CH |
DataL |
DataH |
CH:舵机通道号。①号舵机对应00,②号舵机对应01,⑧号舵机对应02,③号舵机对应04,④号舵机对应05,⑨号舵机对应03.
DataL,DataH:数据的低字节和高字节,二者组合成一个有符号的short类型的数据Data,DataL=Data&0xff;DataH=Data>>8。Data表示舵机的位置,单位us (0.09°),取值为500~2500,舵机的控制脉宽是500us~2500us,对应的角度0°~180°。
示例:
(1)、舵机0,位置1500us(90°):发送指令0xFF 0x02 0x00 0xdc 0x05,其中0x05dc就是十进制的1500。
(2)、舵机1,转速500us(0°):发送指令0xFF 0x02 0x01 0xf4 0x01,其中0x01f4就是十进制的500。
三、程序设计
图 4 前面板上位机控制图
(前面板设计与布局借鉴于网络优质项目)
图 5 后面板程序框图
前面板中主要有六个滑杆输入控件为主要操作部分,分别控制了机械臂的爪子、腕部旋转、臂部旋转、腕部上下运动、肘部上下运动、臂部上下运动。在面板右上角为监控舵机接受数据主要是监控滑杆输出的数据,并将滑杆输出的十进制数转化为十六进制字符串,在前面板左下角为串口选择,主要是用来选择机械臂与电脑连接的USB串口。除此之外左下角还有波特率的选择,在无特殊要求或硬件变化的情况下,波特率通常为9600。
在后面板的程序框图中各主要分为四个部分。
第一个部分:舵机位置初始化,主要功能为初始化设定波特率为9600,并将六个滑杆的初始数据归零,此时连接机械臂初始化舵机,机械臂会进行复位,六个舵机会锁死,等待后续上位机给予舵机指令。
图 6 初始化部分
第二个部分:VISA串口通信模块,首先对串口进行配置,选择串口号,设定波特率之后启用终止符使串行设备做好识别终止符的准备,默认值为TRUE, VI_ATTR_ASRL_END_IN属性设置为识别终止符;如值为FALSE,VI_ATTR_ASRL_END_IN属性设置为0(无)且串行设备不识别终止符。随后进入while循环结构,通过进入while循环隧道,随后信号随着事件结构中滑杆发出的信号一并进入写入缓冲区,并将写入缓冲区的数据写入VISA资源名称指定的设备和接口,最后跳出while循环,并光比VISA资源名词的设备会话句柄或事件对象。
第三个部分,滑杆控制的事件循环结构,以爪子的操作控件为例,滑杆输入数据后将滑杆的数值转至六进制字符串,且宽度必须为数值,对处理后的数值并行地处理截取字符串一次,一组字符串A为原字符串的一个偏移量,剩余两个长度,一组字符串B为0个偏移量,一个剩余长度。随后通过连接字符串的控件将FF0200(通信协议中对机械臂舵机的定义),字符串A,0以及字符串B进行组合,实现符合通信协议中0xFF 0x02 0x00 0xAB 0x0C的串口通信格式。处理好的数据信号跳出事件结构,随后通过与回车键连接字符串。使得,在前面板的操作中存在写入这一个动作,最后通过串口读写的子VI。最后连接舵机接收数据对输出的数据进行监控。
图 7 滑杆部分vi
第四部分:串口读写子VI,这个子VI的作用是这里是将串口返回上来的ASCII码字符串,转换为16进制的数字,以便开发人员阅读。比如ASCII码字符串是"hello",那么将会被转换为“68 65 6C 6C 6F”。在前面板中我们可以清晰的看到可以将十六进制字符串与字符串产生转换。在后面板上通过平铺式结构,首先对运行空字符串常量。在第二个结构中开始输入十六进制字符串并将其转换为字节数组,将信号输入至for循环中。再把刚刚输入的字节数组转换成宽度为2的十六进制数组。并判断输入的字符串是否大于零,在选择函数中依据s的值,返回连线至t输入或f输入的值。 s为TRUE时,函数返回连线至t的值。s为FALSE时,函数返回连线至f的值。随后组成我们课题要求的信号数组,并显示在前面板上。
图 8 串口读写子VI前面板
图 9 串口读写子vi程序面板
四、VI实现结果
4.1 子vi字符串换算功能
当在主程序的爪子控件上输入1371时,子vi“HesString_to_String”将1371转变为字符串5B05,并且依照串口通信协议,将爪子部分输出信号为FF02005B05。并将输入的信号转化为ASCII码值,方便反复验证信号可行性。
图 10 子VI与主VI功能相互验证
4.2 软硬件联调验证
我们通过虚拟串口连接labview与串口助手以模拟labview上位机与机械臂的环境。
以爪子的开合为例:
经过LabVIEW上位机,串口助手所读到的数据符合我们采用的16路机械臂串口通信协议,且在实物机械臂上准确无误的完成了对应的操作,经验证此课题顺利完成。
五、分析与总结
本次LabVIEW的课程设计的课题为基于LabVIEW上位机控制机械臂的运动,基本完成了通过LabVIEW中VISA串口通信模块对信号的首发,对机械臂的动作进行操控,且机械臂的运动均在可控范围内。在课程设计中我们遇到如下问题:
对于十进制转十六进制字符串,在拖动滑杆时,十进制转十六进制字符,在转的过程中,程序不会补零以及最后四位数据位置相反。首先我们通过对字符串进行移位但是以为后则会导致labview的程序过于臃肿,且会导致labview程序可用性降低,所以我们决定通过组合字符串的形式来完成转换的过程。
在连接变压器,电源和舵机三个模块时我们通常使用较为简单的杜邦线,但是杜邦线强度较低,在机械臂长期运行时内部阻值会升高,温度会升高甚至内部导线会熔断,因此我们旋转了强度更高的导电电线代替。
在设计中电源问题一直影响着我们课程设计进度,因为使用的是变压器加电源的供电,电机得到的电压极其不稳定,且在我们的能力范围内暂时无法改变电源供电结构,但是在本次课设的总结中我们也得出了需要对供电电源进行改变,且得出使用更稳定电源的结论。
程序已开源,欢迎各位使用,若本程序存在纰漏与问题欢迎各位指正。
https://download.csdn.net/download/seka0617/74785550文章来源:https://www.toymoban.com/news/detail-440998.html
到了这里,关于基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!