1.首先,先检查舵机的好坏。
本身优必选舵机的连接线属于稀缺物品,所以经本人实验,使用PH2.0 3P端子口也可以供电,但要剪掉端口背面的一小段塑料凸起。
另:24齿的舵机也已经测试过可以兼容淘宝有售的24T铝合金舵机盘。
若供电之后,彩灯正常亮起,并有切换效果,则电机有九成概率是良品,可以使用了
2.精华部分,修改舵机ID
这一步是确保舵机可用,并可以集成到自己的机器人项目中的关键一步,只有自行修正了舵机ID,才能使多个舵机并联工作。
另:本人试过级联驱动,但估计是因为线材问题没有成功,目前只有统一连接实验成功了,即多个舵机连接至同一个控制板一条总线
我对这个舵机的研究基本基于两篇文章:一篇是在码云上的“某宝白菜价总线舵机开发记”,一篇是知乎上的相关文章,基本上前一篇的知识就都足够使用了,我的程序也是从博主的arduino代码移植而来。
其实关键就在于一点:根据协议表(刚才提到的码云教程就有),有修改电机ID的命令,使用串口助手即可,在广播模式下(ID位是0x00),仅连接一个电机(这是关键),使用修改命令就可以成功修改电机ID。
很简单,很方便(其实不是很方便校验和还得拿计算器算。。。。。。。。)
在这里也贴出驱动程序,校验和计算程序,基于STM32HAL库的
同理可任意移植到各平台,做ros应用或者机器人的各种学习都可以
uint8_t checksum(uint8_t* buf, uint8_t sz)//计算校验和
{
uint16_t sum = 0;
for(uint8_t i=0; i<sz; i++)
sum += buf[i];
return (uint8_t)(sum&0xff);
}
void delay_2bit()//延时出来2个回复位的时间,约20us
{
uint16_t a1 =50;
while(a1>2)
a1--;
}
void servo_c(uint8_t ID,uint8_t angle,uint8_t time)//舵机控制
{
servo[2]=ID; //舵机ID
servo[3]=0x01; //运动控制命令
servo[4]=angle;//目标角度
servo[5]=time; //运动时间
//6,7位控制指令中不使用
servo[8]= checksum(&servo[2],6);//校验和
HAL_UART_Transmit(&huart1,servo,10,1000);//发送10个值
delay_2bit();
}
使用这三个函数,可以实现基本的控制,但这款电机据说支持速度校准,位置校准,减速电机模式和回读之类的高级功能,暂时还没有开发。
另:要注意那个延时函数,连续发太快容易丢信号,要根据装机情况微调一下。
典型驱动电压7.4V,兼容2S锂电供电,正常最高是8.4V
应该支持超压提速运行,有待实验,电机和驱动的耐受程度还是很高的。
码云文章链接:https://gitee.com/alicedodo/xaobao_cheap_bus_servo_hack_record
文章写得慌促,各位朋友如果有进一步交流的想法请加qq交流:2754578740
我是热爱机器人的通信小白一只,欢迎各位留下宝贵的意见,也期待和各位交朋友。