MIT关节电机相序校准

UVW三相相序判断
电机相序校正是确保多关节控制系统正常运行的重要步骤。在实际应用中,每个电机定子的三相线(W、U、V)的连接顺序可能存在差异,这是由于制造过程中的随机接线所致。不过,通过简单的校正方法,可以确保系统的正常运行。

测试步骤
给电机q轴施加正向电流指令,观察编码器反馈值的变化趋势:

当编码器值呈现单调递增时,表明相序连接正确
当编码器值呈现单调递减时,表明相序需要调整

void order_phases(EncoderStruct *encoder, ControllerStruct *controller, CalStruct * cal, int loop_count){
    /* 相序校验函数:确保Q轴正电流产生与位置传感器正方向一致的转矩
     * 参数:
     *   encoder - 编码器数据结构体指针
     *   controller - 控制器参数结构体指针 
     *   cal - 校准参数结构体指针
     *   loop_count - 当前循环计数 */
    
    PHASE_ORDER = 0;  // 初始化相位顺序标志

    if(!cal->started){
        /* 校准初始化阶段 */
        printf("Checking phase sign, pole pairs\r\n");  // 打印调试信息
        cal->started = 1;            // 设置校准启动标志
        cal->start_count = loop_count; // 记录起始循环计数
    }
    cal->time = (float)(loop_count - cal->start_count)*DT; // 计算当前校准时间(基于时间步长DT)

    if(cal->time < T1){  // 第一阶段:电压角度置零等待转子稳定
        // 设置电压角度为0(电角度对齐阶段)
        cal->theta_ref = 0;         // 参考角度置零(原始代码注释被修改)
        cal->cal_position.elec_angle = cal->theta_ref;  // 写入电气角度
        cal->cal_position.elec_velocity = 0;  // 电气速度置零
        
        // 设置直轴电流给定值,q轴电流置零(磁链对齐)
        controller->i_d_des = I_CAL;   // 注入预设校准电流(直轴)
        controller->i_q_des = 0.0f;    // q轴电流保持零(避免产生转矩)
        
        commutate(controller, &cal->cal_position);  // 执行换相操作
        cal->theta_start = encoder->angle_multiturn[0];  // 记录初始机械角度
        return;  // 退出当前循环
    }

针对第一个阶段,T1的值=1,也就是在1s内实现转子和定子磁场对齐;


    else if(cal->time < T1+2.0f*PI_F/W_CAL){  // 第二阶段:电压矢量旋转
        /* 旋转电压矢量完成一个完整电气周期(2π)*/
        cal->theta_ref = W_CAL*(cal->time-T1);  // 计算动态参考角度(按预设角速度旋转)
        cal->cal_position.elec_angle = cal->theta_ref;  // 更新电气角度
        commutate(controller, &cal->cal_position);  // 执行换相
        return;  // 保持当前状态直到完成旋转
    }

 

第二个阶段用到了W_CAL,这个值是角速度,10rad/s,也就是过了1秒以后,旋转2PI电弧度,

2.0f*PI_F/W_CAL代表经过的周期次数

此部分没有这两个值,延续上面的值

  • controller->i_d_des = I_CAL
  • controller->i_q_des = 0.0f

通过固定i_q_des=0,避免电机产生转矩,同时通过i_d_des=I_CAL注入直轴电流以稳定磁场,确保电压矢量旋转时电机仅响应相位变化,从而通过编码器反馈判断相序方向

通常情况下,给一个较大的电压到d轴上,缓慢的让角度递增,转子会在磁场力的作用下,随着旋转矢量的方向缓慢转动。此时,判断编码器的值是递增还是递减,如果递增,则一切正常。如果是递减,则在程序里,调换V相和W相的输出。

    /* 第三阶段:校验结果处理 */
    reset_foc(controller);  // 重置磁场定向控制器参数

    // 计算最终机械角度差
    float theta_end = encoder->angle_multiturn[0];  // 获取结束时刻机械角度
    cal->ppairs = round(2.0f*PI_F/fabsf(theta_end-cal->theta_start));  // 计算极对数(机械角度→电气角度转换)

2PI除以弧度差

    // 判断相位顺序方向
    if(cal->theta_start < theta_end){
        cal->phase_order = 0;  // 相位顺序正确
        printf("Phase order correct\r\n");
    }
    else{
        cal->phase_order = 1;  // 需要交换相位顺序
        printf("Swapping phase sign\r\n");
    }
    
    // 输出校准结果
    printf("Pole Pairs: %d\r\n", cal->ppairs);
    printf("Start: %.3f   End: %.3f\r\n", cal->theta_start, theta_end);
    
    // 写入全局参数
    PHASE_ORDER = cal->phase_order;  // 更新系统相位顺序标志
    PPAIRS = (float)cal->ppairs;     // 更新系统极对数参数
    
    // 重置校准状态
    cal->started = 0;                // 清除启动标志
    cal->done_ordering = 1;          // 设置校准完成标志
}

关键注释说明​​:

  1. ​阶段划分​​:通过时间条件划分三个校准阶段(对齐→旋转→校验),符合电机控制系统的典型校准流程

    7

  2. ​电流控制​​:保持q轴电流为零避免转矩干扰,通过直轴电流对齐转子位置

    8

  3. ​角度计算​​:cal->ppairs的计算公式实现了机械角度到电气角度的转换(2π对应一个电气周期)
  4. ​安全措施​​:使用fabsf()保证角度差绝对值计算,round()确保极对数取整正确

    3

  5. ​调试输出​​:包含完整的调试信息打印,符合嵌入式调试规范

建议结合系统文档补充以下宏定义的说明:
I_CAL(校准电流值)=0.125

W_CAL(校准角速度)=10rad/s

T1(对齐阶段持续时间)=1S

等参数的具体数值和物理意义

### 关于MIT关节电机项目的资料 #### MIT Mini Cheetah机器狗电机CAN驱动方法 MIT Mini Cheetah 是一款开源的四足机器人,其设计目标之一是实现高性能的运动控制。该项目中的电机控制系统采用了 CAN 总线技术作为通信协议,用于协调多个关节电机的动作[^1]。通过这种方式,Mini Cheetah 实现了高效的实时数据传输和同步操作。 在具体实现上,MIT 的团队开发了一套基于 STM32 微控制器的硬件平台,该平台能够支持多轴电机的同时运行,并提供高精度的位置、速度以及力矩反馈功能。此外,项目还提供了详细的固件源码和技术文档供开发者学习与改进。 #### 四足机器人力控电机优劣分析及解决方案 针对四足机器人应用场合下的力控需求,MIT 及其他研究机构深入探讨过不同类型伺服系统的特性及其适用范围[^2]。例如,在某些复杂地形环境下行走时可能需要较高的动态响应能力;而在执行精细抓取任务时,则更加注重平稳性和准确性等方面的表现。因此选择合适的电机对于提升整体性能至关重要。 为了克服传统直流无刷马达存在的一些局限性(如成本较高),研究人员尝试引入新型材料制造工艺或者优化现有算法结构等方式来进行补偿调整。这些努力不仅有助于降低成本同时也提高了产品的可靠度。 #### 大疆C板(STM32F4)控制关节电机案例分享 除了学术界的研究成果外,工业领域也有不少成功的实践范例值得借鉴。比如江西伺泰威公司推出的 GIM6010-8 型号关节电机就凭借出色的性价比受到广泛关注[^3]。配合大疆官方提供的 C 板 (基于 STM32F4 系列芯片),用户可以轻松搭建起一套完整的机械臂控制系统。 此方案利用 HAL 库简化底层编程流程,并借助 FreeRTOS 操作系统提高资源利用率从而满足多任务并发处理的需求。同时由于采用标准 Modbus RTU 协议进行主机间通讯连接,使得整个网络架构变得更加灵活易扩展。 ```c // 示例代码片段展示如何初始化并配置一个关节电机参数设置过程 void motor_init(void){ MX_CAN_Init(); // 初始化CAN接口 uint8_t tx_data[8]; memset(tx_data, 0 , sizeof(uint8_t)*8); /* 设置模式为目标位置 */ tx_data[0]=0xA1; HAL_CAN_AddTxMessage(&hcan,TX_MAILBOX,(uint32_t)(MOTOR_ID<<5),tx_data,sizeof(uint8_t)*8); } ``` 以上就是关于关节电机特别是围绕着MIT关联的一些重要参考资料整理汇总情况说明如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值