在matlab中,简单地利用RS485协议对伺服电机进行控制

首先利用usb转485串口线将伺服电机连接到电脑上,需要安装USB转UART的驱动,并且在matlab中设置串口,串口设置代码如下:

%%  设置串口
scom = serial('COM3',...
    'BaudRate', 115200,...
    'Parity', 'none',...
    'DataBits', 8,...
    'StopBits', 1,...
    'BytesAvailableFcnCount', 1,...
    'BytesAvailableFcnMode', 'byte',...
    'BytesAvailableFcn', {@read_serial});

其中COM3是串口名,可从设备管理器>端口查看,其他参数为RS485总线参数及单电机命令数据帧格式,可从电机RS485协议说明中查看。

 设置完串口以后,利用485协议将信号写入到伺服电机中。代码如下:

gui1=[62,164,1,12,239,160,241,4,0,0,0,0,0,160,140,0,0,193];
fwrite(scom,gui1);

其中数组gui1就是利用485协议写的命令,第一位数62为头字节,均为62,RS485协议中为0x3E,转为十进制即为62。第二位164为命令字节,协议中有读取pid参数命令,电机关闭命令等诸多命令,这里举例的是多圈位置闭环控制命令,RS485协议中为0xA4,转为十进制即为164。第三位1即为ID字节,代表需要控制哪个电机,最多可以控制32个电机。第四位为数据长度字节,第五位239为帧头校核字节,即前四个字节62,164,1,12之和。第六位到第十三位为速度控制字节,首先需要转动的角度转化为字节数,3600个字节转一度,再将所需字节数用十六进制表示,接着将每一位上的十六进制数转为十进制表示,位数越小,字节位置越靠前。例如所需转动角度为90度,字节数需要324000,转为十六进制即为4f1a0,该十六进制数共三位,即04,f1,a0,转为十进制数为4,241,160,位数由低到高排列160,241,4。第十四位到第十七位为速度控制位,计算方法与位置控制相同,最后一位为字节校验和,保证前面数据无误,计算方法将第六位到第十七位按十进制相加除256取余即可,实例代码中相应位数的和为705,除256取余即为193。

最后需关闭串口。

stopasync(scom);
 fclose(scom);
 delete(scom);
 clear scom;

初学rs485,撰此文以记。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值