大疆C板(STM32F4)控制关节电机GIM6010-8

       江西伺泰威公司在去年的时候发布了一款价格十分诱人的关节电机,型号为GIM6010-8,其额定扭矩在5牛米,峰值扭矩则可以达到11牛米,在和小米微电机同样的单编码器条件下价格甚至比小米微电机还要便宜,只要399元,而双编码器也只要449。很香的一款电机啊,所以买下以后用来做个小机器人来测试性能,下面我会介绍怎样用STM32来控制GIM6010-8。

        首先,了解一个产品我们需要获取它的文档,链接如下:GIM6010-8 - 江西伺泰威自动化设备有限公司 (steadywin.cn)

        伺泰威关节电机交流群(QQ):587865541

        在下载了文档后,我们首先根据文档内容进行所需要的环境配置:

        截止目前(2024-2-26),对于GIM6010-8貌似是不支持使用电机精灵进行调试,且出厂的驱动器已经安装USB驱动,无需再次进行安装。

        在完成了环境配置之后,我们就可以通过USB来对电机进行配置,根据文档,我们选择windows中断或者powershell都可以进行配置,我们在打开终端后输入odrivetool来连接电机。

        此时如果出现JSON文件无法读取连接错误的情况,可以重新插拔type-c口之后再重新打开一次中断重新连接,即可连接成功。

        连接之后,我们就可以对电机进行配置,根据笔者的理解,usb主要是为了配置控制模式,电流限制,以及PID参数等等,使用STM32控制前可以通过先把这些参数配置完成,这样会让我们省去很多工作。

        拿到新电机以后,我们首先需要对其进行校准,校准的命令如下:

odrv0.axis0.requested_state = 4
dump_errors(odrv0)
odrv0.axis0.requested_state = 7
dump_errors(odrv0)
odrv0.axis0.motor.config.pre_calibrated = 1
odrv0.axis0.encoder.config.pre_calibrated = 1
odrv0.save_configuration()
        其中等于7是编码器进行校准,等电机编码器转动停止大概两秒后再进行错误检查。上述命令作用则是将电机与编码器进行校准,校准完成之后进行确认,即 odrv0.axis0.motor.config.pre_calibrated = 1
        然后再保存我们校准后的数据。
        
        注意:任何参量的改变在修改后一定要保存,否则是无效的!!
        对电机进行校准完成之后,我们就可以对电机的id与控制模式进行配置,笔者的控制方式为STM32上进行位置环控制,然后将PID计算后的输出给电机的速度环来控制,故在进行电机配置的时候,我们可以选择将电机进行速度模式输出配置。
        我对电机进行了如下配置:
odrv0.axis0.config.can.node_id=1 //修改电机的id号
odrv0.axis0.controller.config.control_mode=2 //设置控制模式为速度控制
odrv0.axis0.controller.config.input_mode=1 //设置输入的控制值以什么方式运转,我选择的是直接控制
odrv0.axis0.controller.config.vel_gain=0.3
odrv0.axis0.controller.config.vel_integrator_gain=0.6//设置速度环的P与I的值
odrv0.save_configuration() //保存配置

        在配置完成之后,我们可以选择先通过USB来控制电机PI参数等是否设置合理,我们进行如下操作:

odrv0.axis0.requested_state=8 //电机进入闭环控制模式
odrv0.axis0.controller.input_vel=2 //给电机目标速度值 2rad/s

        若此时电机正常转动,则表示我们配置成功,之后我们就可以进行最后一步:

odrv0.axis0.controller.input_vel=0 //给电机目标速度值 0rad/s
odrv0.axis0.requested_state=1 //电机进入空闲模式
odrv0.config.enable_can_a=True//打开can通信开关
odrv0.save_configuration() //保存配置

        目前(2024-2-26)电机的固件版本为3.7,其不支持USB与CAN通信兼容,所以需要手动打开CAN通信,此CAN通信的波特率为500k,不要先入为主进行1M的波特率设置。(点名批评RM电机)当然,你也可以通过odrivetool中的命令来修改波特率。

        完成上述配置之后我们就可以进行STM32开发了,笔者使用的是STM32CubeMx + Clion进行开发,首先我们需要在CubeMx上进行can通信的配置,其余配置请参考其他优秀文章,大疆c板的配置网上有大量开源资料,这里不再赘述。

 

 

        截止到此,在Cubemx上的配置结束了,由于笔者在项目中驱动电机,使用了Freertos,不方便直接展示,我会给大家介绍驱动需要的函数步骤:

can1_filter_init(); //can通信需要对其过滤器进行配置
Motor_Init();//初始化所有电机使其都进入闭环控制模式
Read_beginPos(); //读取电机上电时候的初始位置
Eight_PID_Init(); //八个电机的位置环PID初始化

·        电机驱动所需要的初始化就是这些,之后只要调用相应的输入参数的函数即可控制,下面贴出来笔者写的部分通信用的命令等:

        odrive.c

#include "odrive.h"
#include "can.h"

float begin_pos[9];

union_32 union_32f;
union_16 union_16f;
SetState Setstate;
SetMode Setmode;
Feedback GIM6010[9];
/**
 * 输出目标速度值
 * @param _hcan
 * @param Input_Vel
 * @param Torque
 * @param stdid
 */
void Odrive_Axis_Set_Input_Vel(CAN_HandleTypeDef *_hcan, float Input_Vel,float Torque,uint32_t stdid)
{
    CAN_TxHeaderTypeDef TxHeader;
    uint8_t TxData[8];
    uint32_t mbox;         //发送使用到的can邮箱

    TxHeader.StdId = stdid;
    TxHeader.IDE = 0;
    TxHeader.RTR = 0;
    TxHeader.DLC = 8;

	union_32f.data_f = Input_Vel;
    TxData[0] = union_32f.data_8[0];
    TxData[1] = union_32f.data_8[1];
    TxData[2] = union_32f.data_8[2];
    TxData[3] = union_32f.data_8[3];

    union_32f.data_f = Torque;
    TxData[4] = union_32f.data_8[0];
    TxData[5] = union_32f.data_8[1];
    TxData[6] = union_32f.data_8[2];
    TxData[7] = union_32f.data_8[3];

    //等一个空の邮箱呢
    while(HAL_CAN_GetTxMailboxesFreeLevel(_hcan) == 0);

    //发送成功了吗?失败就卡住了捏
    if (HAL_CAN_AddTxMessage(_hcan, &TxHeader, TxData, &mbox) != HAL_OK)
    {
        Error_Handler();
    }
}
/**
 * 输出目标角度值
 * @param _hcan
 * @param Input_Pos
 * @param Vel_FF
 * @param Torque_FF
 * @param stdid
 */
void Odrive_Axis_Set_Input_Position(CAN_HandleTypeDef *_hcan, float Input_Pos,int16_t Vel_FF,int16_t Torque_FF,
<think>好的,我现在需要帮助用户了解如何通过CAN通讯协议使用GIM6010-8控制器来驱动电机。首先,我需要回顾用户提供的信息和之前的引用内容。根据引用[1],GIM6010-8的驱动器出厂时已经安装了USB驱动,但不支持电机精灵调试,所以用户可能需要直接通过CAN通信来控制。 首先,我应该确认用户的需求:他们希望通过CAN协议发送指令来控制电机,包括启动、停止、速度或位置控制等。接下来,我需要考虑实现这一目标的基本步骤。通常,使用CAN通信控制电机涉及硬件连接、协议配置、报文格式、数据发送与接收等环节。 硬件连接方面,用户需要将STM32的CAN接口与GIM6010-8的CAN接口连接,注意终端电阻是否正确配置,以确保信号稳定。然后,STM32的CAN控制器需要初始化,设置正确的波特率、工作模式等参数。CAN协议通常使用标准帧或扩展帧,用户需要知道GIM6010-8使用的具体标识符和报文格式。 接下来是数据帧的构造。例如,控制电机可能需要发送特定的命令字,如0x01表示启动,0x02设置速度,后面跟着具体的数据值。数据可能需要按照特定的字节顺序排列,如大端或小端,以及可能的校验和。 然后,用户需要编写代码来初始化CAN模块,发送控制命令,并处理可能的反馈。代码示例可能会有帮助,比如展示如何配置CAN的GPIO引脚、过滤器设置,以及发送函数的使用。同时,需要注意错误处理,比如总线关闭或报文丢失的情况。 另外,用户可能需要查阅GIM6010-8的CAN通信协议手册,获取具体的命令格式和参数定义。如果手册不可用,可能需要联系厂家或寻找其他资源。测试阶段,建议逐步验证每个步骤,从简单的发送接收测试到实际控制电机运动,确保每一步都正确。 最后,用户可能会遇到常见问题,如通信失败、电机不响应等,需要检查硬件连接、波特率设置、报文ID和数据的正确性。可能还需要使用CAN分析工具来监控总线上的数据流,帮助诊断问题。 总结起来,我需要分步骤解释硬件连接、协议配置、报文构造、代码实现以及测试调试方法,同时提醒用户查阅相关文档和使用工具进行验证。确保回答结构清晰,逐步引导用户实现目标,并附上相关的问题供进一步学习。</think>### GIM6010-8 CAN通信控制实现方法 #### 1. 硬件连接与配置 - **CAN物理层连接**:将STM32F4的CAN_H/CAN_L引脚与GIM6010-8控制器的CAN接口连接,确保总线终端电阻(通常120Ω)正确接入[^1] - **电源隔离**:建议为CAN接口添加隔离模块,防止电气干扰 - **波特率设置**:根据手册设置匹配的通信速率(常用125kbps/1Mbps),需与驱动器配置一致 #### 2. 协议解析(示例) GIM6010-8通常使用标准CAN协议帧格式: $$ID(11bit) + DLC(1byte) + DATA(8bytes)$$ 典型控制帧结构: | 控制指令 | 目标速度/位置 | 保留字段 | 校验和 | |---------|--------------|----------|--------| | 1 byte | 4 bytes | 2 bytes | 1 byte | #### 3. STM32代码实现 ```c // CAN初始化(以HAL库为例) CAN_HandleTypeDef hcan; void CAN_Init() { hcan.Instance = CAN1; hcan.Init.Prescaler = 6; // 84MHz/(6*(1+8+3))=1MHz hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan.Init.TimeSeg1 = CAN_BS1_8TQ; hcan.Init.TimeSeg2 = CAN_BS2_3TQ; HAL_CAN_Init(&hcan); CAN_FilterTypeDef filter; filter.FilterIdHigh = 0x0000; // 根据实际ID配置过滤器 filter.FilterMaskIdHigh = 0x0000; filter.FilterMode = CAN_FILTERMODE_IDMASK; filter.FilterScale = CAN_FILTERSCALE_32BIT; HAL_CAN_ConfigFilter(&hcan, &filter); HAL_CAN_Start(&hcan); } // 发送速度控制指令 void Send_Speed_Cmd(int32_t rpm) { uint8_t data[8] = {0}; data[0] = 0xA1; // 速度模式指令 *(int32_t*)(data+1) = rpm; // 小端格式写入速度值 data[7] = Checksum(data,7); // 自定义校验函数 CAN_TxHeaderTypeDef header; header.StdId = 0x201; // 控制指令ID(需参照手册) header.IDE = CAN_ID_STD; header.RTR = CAN_RTR_DATA; header.DLC = 8; uint32_t mailbox; HAL_CAN_AddTxMessage(&hcan, &header, data, &mailbox); } ``` #### 4. 调试验证 - **回环测试**:先使用CAN回环模式验证通信链路 - **CAN分析仪**:使用PCAN/USB-CAN工具监控实际报文 - **安全防护**:初始测试时限制电机扭矩,防止意外动作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值