首先利用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,撰此文以记。