小米CyberGear微电机驱动代码(ROS下的CAN总线驱动,含开源地址)
前言
笔者在半年前开发项目的时候想要用大扭矩的电机来带动机械臂(机械臂的质量比较大,连杆长度较长),为了达到这个目的,需要一个扭矩大的电机同时这个电机的质量要尽可能小且体积小。最终我们选择要用无刷伺服电机来做。小米的CyberGear无刷电机是一款峰值扭矩大(12N.m),价格相对便宜的无刷伺服电机,官方售价是499。虽然这款电机有很多上述的好处,但是由于这个电机使用CAN总线来控制,这个电机的驱动难度不小。笔者当时在开发的时候翻了翻网上关于这个电机的开源代码来简化我的工作量,能找到一点STM32上的CAN控制案例。笔者当时使用ROS来控制机器人,希望如果能直接利用一个上位机(跑ubuntu的高性能板子)来直接输出CAN信号给到电机这将大大优化整体架构且降低开发难度和提高稳定性,然而我当时无法找到利用ROS驱动这个电机的开源资料。幸运的是笔者在淘宝上发现一家有出售适配CyberGear电机的硬件,并且提供了软件支持,可以用ROS来直接通过CAN转USB模块来发布CAN信号控制电机。但是笔者拿到代码发现它们的代码只是一个非常基础的demo,估计是这个公司没有人去维护这个了,因为他们的主要厂品是他们自家的电机,但是价格上没有小米电机那么优势所以我们没有选择全套。接下来就给大家介绍一下硬件和我基于开源修改的ROS驱动代码。
软硬件介绍
硬件
笔者所用的硬件来自于大然科技,大家可以去淘宝上去搜索。我们主要需要购买:
小米官方:
CyberGear无刷电机(参考价格 499)*n
大然科技:
1.USB转CAN模块(参考价格 130) *1
2.小米电机驱动板(一拖四)*1
3.小米电机连接线 *n
连接注意事项:
1.驱动板要输入24V的电压,所以黄色的xt60接口要接入24V电源。
2.一个小米电机的驱动功率建议预留到200W,所以如果你想驱动3个电机,那么最好就是输入电源的最大功率要600W
3.将USB转CAN的CANL和CANH连接到驱动板的CANL和CANH就好啦,USB转CAN模块只是用来负责传递can信号的,不用来驱动,另外一个GND不需要接
软件
笔者github代码地址
代码说明参照README.md以及代码的注释
小米电机说明以及注意事项:
1.小米电机没有配备掉电不丢失内存,无法记忆起始点,电机的零点就是电机上电的点,你最好在上电的时候使用代码里面的zero_all_node.cpp设置零点,或者你可以手动将电机扭到一个位置在使用zero_all_node.cpp设置该点为零点
2.小米电机需要使能,也可以是失能,所有的操作需要小米电机在使能的时候才可以正常运行,使能的时候你可以感受到小米电机开始有轻微震动会有点噪音,你可以使用enable_all_node.cpp来使能电机。当你使用stop_all_node.cpp的时候电机会立刻“掉电”,电机停止震动,不再接收电能
3.!!安全限电:请一定要给电机限电,在代码中我已经通过注释告诉大家在哪里限电,不然pid响应的时候可能会功率飞到500w可能更大。计算最大功率方法:小米电机电压是24V,如果限制最大电流,也就是代码里的current处,的电流为10,那么电机最大的功率会给限制到240W附近
4.目前笔者只测试了PP位置模式功能可行,速度模式几个月前测试是不行的,最近没有设备和时间完善,star一下后续会继续完善
5.你可以根据大然科技公司的上位机来对小米电机的内参进行修改,最常用的修改就是电机ID号和PID的几个系数的调整。这里我提供一下大然科技的gitee链接,大家也可以去交流群里面要资料。特别注意一下,用大然的USB转CAN模块无法让电机连接到小米官方的web软件上,主要原因我猜是大然科技的这个模块是一个ACM设备,小米的需要使用USB设备,大家如果想用小米的官方软件可以去买官方推荐的一个USB转CAN模块,那个在linux下识别为USB而不是ACM。大然科技的上位机我使用的时候经常闪退,多试几次就好了。
6.一定要记得配置ubuntu的can通道
结尾
如果我的项目对您有帮助,请给我一个免费的star和点赞,感谢您的支持。如果有任何疑问请向我提出,我将及时修改!