基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

这篇具有很好参考价值的文章主要介绍了基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、功能设计

二、硬件分析

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 所需材料

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

图 1 机械臂俯视图

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

图 2 机械臂正视图 

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

 图 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。

三、程序设计

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

图 4  前面板上位机控制图

(前面板设计与布局借鉴于网络优质项目)

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

 图 5 后面板程序框图

 

        前面板中主要有六个滑杆输入控件为主要操作部分,分别控制了机械臂的爪子、腕部旋转、臂部旋转、腕部上下运动、肘部上下运动、臂部上下运动。在面板右上角为监控舵机接受数据主要是监控滑杆输出的数据,并将滑杆输出的十进制数转化为十六进制字符串,在前面板左下角为串口选择,主要是用来选择机械臂与电脑连接的USB串口。除此之外左下角还有波特率的选择,在无特殊要求或硬件变化的情况下,波特率通常为9600。

在后面板的程序框图中各主要分为四个部分。

        第一个部分:舵机位置初始化,主要功能为初始化设定波特率为9600,并将六个滑杆的初始数据归零,此时连接机械臂初始化舵机,机械臂会进行复位,六个舵机会锁死,等待后续上位机给予舵机指令。

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

 图 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。最后连接舵机接收数据对输出的数据进行监控。

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

 图 7 滑杆部分vi

        第四部分:串口读写子VI,这个子VI的作用是这里是将串口返回上来的ASCII码字符串,转换为16进制的数字,以便开发人员阅读。比如ASCII码字符串是"hello",那么将会被转换为“68 65 6C 6C 6F”。在前面板中我们可以清晰的看到可以将十六进制字符串与字符串产生转换。在后面板上通过平铺式结构,首先对运行空字符串常量。在第二个结构中开始输入十六进制字符串并将其转换为字节数组,将信号输入至for循环中。再把刚刚输入的字节数组转换成宽度为2的十六进制数组。并判断输入的字符串是否大于零,在选择函数中依据s的值,返回连线至t输入或f输入的值。 s为TRUE时,函数返回连线至t的值。s为FALSE时,函数返回连线至f的值。随后组成我们课题要求的信号数组,并显示在前面板上。

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

 图 8 串口读写子VI前面板

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

 图 9 串口读写子vi程序面板

四、VI实现结果

4.1 子vi字符串换算功能

        当在主程序的爪子控件上输入1371时,子vi“HesString_to_String”将1371转变为字符串5B05,并且依照串口通信协议,将爪子部分输出信号为FF02005B05。并将输入的信号转化为ASCII码值,方便反复验证信号可行性。

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

图 10 子VI与主VI功能相互验证 

4.2 软硬件联调验证

        我们通过虚拟串口连接labview与串口助手以模拟labview上位机与机械臂的环境。

        以爪子的开合为例:

基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动

         经过LabVIEW上位机,串口助手所读到的数据符合我们采用的16路机械臂串口通信协议,且在实物机械臂上准确无误的完成了对应的操作,经验证此课题顺利完成。

五、分析与总结

        本次LabVIEW的课程设计的课题为基于LabVIEW上位机控制机械臂的运动,基本完成了通过LabVIEW中VISA串口通信模块对信号的首发,对机械臂的动作进行操控,且机械臂的运动均在可控范围内。在课程设计中我们遇到如下问题:

        对于十进制转十六进制字符串,在拖动滑杆时,十进制转十六进制字符,在转的过程中,程序不会补零以及最后四位数据位置相反。首先我们通过对字符串进行移位但是以为后则会导致labview的程序过于臃肿,且会导致labview程序可用性降低,所以我们决定通过组合字符串的形式来完成转换的过程。

        在连接变压器,电源和舵机三个模块时我们通常使用较为简单的杜邦线,但是杜邦线强度较低,在机械臂长期运行时内部阻值会升高,温度会升高甚至内部导线会熔断,因此我们旋转了强度更高的导电电线代替。

        在设计中电源问题一直影响着我们课程设计进度,因为使用的是变压器加电源的供电,电机得到的电压极其不稳定,且在我们的能力范围内暂时无法改变电源供电结构,但是在本次课设的总结中我们也得出了需要对供电电源进行改变,且得出使用更稳定电源的结论。

程序已开源,欢迎各位使用,若本程序存在纰漏与问题欢迎各位指正。

https://download.csdn.net/download/seka0617/74785550

 

到了这里,关于基于LabVIEW上位机以PWM控制16路舵机六自由度机械臂运动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32输出PWM波控制180°舵机

    时间记录:2024/2/8 (1)脉冲宽度调制 (2)占空比:高电平时间占整个周期时间的比例 (3)STM32通过定时器实现PWM时具有两种模式 PWM1模式:向上计数模式下,CNT当前计数寄存器的值小于CCR比较寄存器的值时输出有效电平,大于时输出无效电平,向下计数模式下,CNT当前计数

    2024年02月21日
    浏览(51)
  • 学习stm32 pwm 多路舵机的控制(PWM 的频率的理解)

    接着上一节,pwm 的使用,控制多路舵机进行角度旋转和设置。 参考stm32f103x中文说明时钟树如下图 1.当HSI被用于作为PLL时钟的输入时,系统时钟能得到的最大频率是64MHz。 2.对于内部和外部时钟源的特性,请参考相应产品数据手册中“电气特性”章节。 用户可通过多个预分

    2024年02月13日
    浏览(35)
  • cubemx stm32 pca9685pw模块 16路PWM 可用于舵机驱动 驱动代码

    淘宝链接请点这里 淘宝资料资料: 链接:https://pan.baidu.com/s/1Kda-c7QdZdQ03FBMa0zeRA 提取码:1234 这个模块是 I2C 通信控制 16 路 PWM 的模块。 所有路的 频率 是统一设置的,所以每一路的频率都一样,但是每一路可以设置不同的占空比。 PCA9685的分辨率是12位,即占空比控制时,0-

    2024年02月06日
    浏览(47)
  • STM32第七课:PWM控制SG90舵机

            学习完上一课的PWM控制LED小灯实现呼吸灯的效果,我们就可以进一步学习PWM控制舵机的效果了。PWM控制舵机相信会是一个更有意思的小实验的。          舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档

    2024年04月17日
    浏览(34)
  • 【概念理解】单片机控制舵机之PWM波参数的设置

    我们要知道,SG90舵机接收的PWM信号的参数:f=50Hz,T=1/f,所以周期为20ms。 当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。 换句话说,我们要用单片机产生一个 周期(20ms) 的PWM波,然后获得对应这些时长(分别是 0.5ms 、 1ms 、 1.5ms 、 2ms 、 2.5ms )的 高电

    2024年02月10日
    浏览(38)
  • Arduino ESP8266控制SG90舵机输出PWM信号

    舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。 控制信号由接收机的通道进入信号调制芯片

    2023年04月26日
    浏览(73)
  • 12.[STM32]PWM脉宽调制-舵机控制(一篇足以)

    🍌 🍌🍌 作者简介:大家好啊,我叫DW,每天分享一些我新学到的知识,期待和大家一起进步 🍋 🍋🍋 系列专栏: STM32 🍎 🍎🍎 🍎🍎🍎 🌞小实验目标:控制舵机旋转🌞 🍊如有写得不好的地方欢迎大家指正🍊 创作时间:🍊🍊🍊2022年5月2日🍊🍊🍊 在机器人机电控

    2023年04月15日
    浏览(39)
  • 用STM32CubeMX配置输出PWM信号控制多路舵机(HAL)

    (1)编程平台:Keil5 (2)CubeMX (1)本此使用最小核心板STM32F103C8T6为例 (2)一个舵机:SG90或者MG996等均可 (3)ST-link 下载器 (4)杜邦线若干         舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度

    2023年04月09日
    浏览(44)
  • 蓝桥杯STM32 G431 hal库开发速成——按键+PWM综合案例——按键控制PWM驱动舵机

    适用于学习了TIM输出比较(PWM)跟GPIO输入(按键)的新手作为练习的综合项目! PWM(Pulse Width Modulation,脉冲宽度调制)是一种常用的技术,用于通过调节电信号的脉冲宽度(即脉冲的持续时间)来控制模拟系统的电源。在数字电子系统中,由于只能输出固定的高(通常为

    2024年01月21日
    浏览(59)
  • 【STM32单片机】STM32控制SG90舵机的PWM部分参数的设置解答

    我们要知道,SG90舵机接收的PWM信号的参数:f=50Hz,T=1/f,所以周期为20ms。 当高电平的脉宽在0.5ms-2.5ms之间时舵机就可以对应旋转到不同的角度。 换句话说,我们要用单片机产生一个 周期(20ms) 的PWM波,然后获得对应这些时长(分别是 0.5ms 、 1ms 、 1.5ms 、 2ms 、 2.5ms )的 高电

    2024年02月13日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包