完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言
是的,经过一次又一次的调试修改,今天终于可以实现简单的对伺服电机的控制。接下来,我需要对这段时间的工作做个梳理总结。 一、利用YZ-ACSD608测试电机 YZ-ACSD608软件是厂商给的上位机软件,一则用来调试伺服电机,二则用来设置电机运行的参数。 1 上位机软件界面介绍 从上图中可看出,该上位机的软件界面主要8部分组成: (1) 波形显示图框:从上图看出,总共有4个波形,分别是蓝色—电流,绿色—输出脉冲,红色—当前转速,黑色——电压。 (2)电机运行参数显示框:用来显示电机在运行时的实时参数。 (3) 驱动器设置参数显示框:显示当前运转的模式,1表示位置模式,0表示速度模式;显示当前转向方向,0表示正转,1表示反转;显示使能设置,1表示使能。 (4)Modbus读取设置框:设置读取设备地址,一般设为1,设置读取驱动器数据的周期,以及是否读取。 (5)驱动器运行状态显示:此栏在运行后如没报警,则会显示运行正常。 (6)串口连接项:选取对应的串口号,点击连接串口。 (7)Modbus 控制参数显示框:显示驱动器内部的所有相关参数。 (8)Mobus 发送设置框:用于修改驱动器的参数,先选好参数的类型,再设定要参数数据,点击发送即可。 2 上位机控制过程 (1)将485转USB口插入电脑端,并安装USB转485驱动,在设备管理器中查到相应的COM4端,如下图所示。 (2)打开上位机软件,选择COM4端口,连接串口,此时可看到485的A、B口有小灯在接替闪烁; (3)选择Modbus使能,参数数据输入1点发送; (4)选择PU步数,参数数据输入40000点击发送。此时电机根据计算,有转动相应的角度。 二、使用串口助手测试电机 之所以选用串口助手来测试电机,主要是验证直接用16进制的代码控制电机,效果是否和上位机软件的一致,如果一致的话,那直接用代码控制则有效。 1.串口工具SSCOM 在串口工具SSCOM界面中,需要进行以下设置: (1)选择端口号:此处应该选择COM4,可在设备管理器查找到对应的COM端口号; (2)波特率设置为:19200 (3)勾选HEX显示,HEX发送 (4)在加校验码后的下拉选项中,选择Modbus CRC16 使用串口工具控制伺服电机转动的步骤: (1)点击打开串口按钮; (2)输入 01 06 00 00 00 01 点击发送,在显示框中可看到 在图中可看到,通讯通了,这串功能码是使能1的功能码。 (3)继续输入 01 10 00 0C 00 02 04 9C 40 00 00 ,(对应上面的40000)点击发送,则看到电机旋转相应角度。 对于以上代码的相关都在Modbus协议中和电机控制手册中有阐述。如下图 上图显示了相关功能的寄存器的地址。 下图显示写操作相关的Modbus协议,包括了使能和写脉冲数。 串口助手测试成功后,接下来就需要在Window端,使用Qt上位机与虚拟串口进行通讯测试,通过communication选项查看通讯的代码是否正确,如正确,则表示Qt上位机与虚拟串口通讯测试成功。 三、Qt上位机与虚拟串口通讯测试 虚拟串口采用Configure Virtual Serial Port Driver虚拟得到虚拟串口端COM1和COM2,并以Qt上位机为Mobus Master,使用下载的Modbus Slave作为从端,建立通讯连接。 首先,在设备管理器中查到,虚拟的串口号,如下图所示: 在进行通讯时,数据类型需要做一个转换,即脉冲数的数据是2个寄存器的数据组合在一起,即是由高16位和低16位数据组成的无符号32位的整数型,因此在定义输入脉冲数时,需要将它定义为uint32类型的数据,而在寄存器中赋值时,需要有一个将32位无符号整型数拆分成高16位和低16位的无符号整型数: tab_reg[0]=(uint16_t)(0x0000FFFF&num_1);tab_reg[1]=(uint16_t)((0xFFFF0000&num_1)>>16); 数据输入4000,Slave端收到的数据,通讯代码显示如下: 数据输入40000,Slave端收到的数据,通讯代码显示如下: 由于40000对应的16进制数为9C40,超出了无符号16位整型数的范围,因此显示是错误的数。 但是从通讯代码看,是正确的。 因此,Qt上位机的代码无误,可直接来对电机进行控制。 四、 Qt上位机控制伺服电机 实物图连接如下。 将485转USB线端插入电脑,在设备管理器中查询到COM端口号为COM4,在原Qt的cpp代码中,修改如下: ctx = modbus_new_rtu("COM4",19200,'N',8,1);...... 运行Qt程序,先在文本框中输入1,点击Modbus使能按钮,然后在文本框中输入40000,再点击脉冲数按钮,电机转动相应角度。从而实现利用libmodbus库实现了Qt上位机与电机的Modbus通讯。 总结 故不积跬步,无以至千里。不积小流,无以成江海。如果没有之前对libmodbus库的编译和理解,没有在vs上的编译运行,没有在Windows端与虚拟串口的通讯,没有Modbus通讯协议的理解,那么实现此功能则完全不可能,但是接下来还需要将功能进行完善,另外还需要最后将Qt项目编译到嵌入式开发板中,这才是最终的目的。路漫漫其修远兮,吾将上下而求索。 |
|
|
|
只有小组成员才能发言,加入小组>>
2397 浏览 0 评论
8956 浏览 4 评论
36569 浏览 19 评论
4995 浏览 0 评论
24414 浏览 34 评论
1402浏览 2评论
1656浏览 1评论
2065浏览 1评论
1467浏览 0评论
424浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 06:04 , Processed in 1.336136 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号