当前位置: 首页 > news >正文

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

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

http://www.xdnf.cn/news/326665.html

相关文章:

  • upload-labs靶场通关详解:第二关
  • 绕线机的制作与研究
  • very_easy_sql(SSRF+SQL注入)
  • 配置指定地址的conda虚拟Python环境
  • gitcode 上传文件报错文件太大has exceeded the limited size (10 MiB) in commit
  • dragonfly Prometheus 没有监控指标 dragonfly_scheduler_host_traffic
  • 益鑫通连接器车规级,非车规可替代JST,MOLEX
  • Keil安装pack包时报错解决:Cannot copy license file to “.Download“ folder.
  • string--OJ3
  • 基于Django框架开发的B2C天天生鲜电商平台
  • 306.检查是否所有A都在B之前
  • 通用分布式锁组件
  • 【优化策略】离散化
  • 力扣92.反转指定范围内的链表、25.k个一组反转链表
  • SpringBoot优雅参数检查
  • java基础-数组
  • AI训练服务器概述
  • 【信息系统项目管理师】法律法规与标准规范——历年考题(2024年-2020年)
  • 【fastadmin开发实战】财务数据快速导入系统(复制导入)
  • 配置Hadoop集群-测试使用
  • C# NX二次开发:曲线和点位相关UFUN函数详解
  • 游戏中心首页
  • LeetCode:对称二叉树
  • 贵州省棒球运动发展中长期规划(2024-2035)·棒球1号位
  • MySQL 联合查询的使用教程
  • Consumer Group的作用是什么?Rebalance的触发条件有哪些? (实现消费者负载均衡;消费者加入/离开、订阅Topic变化等)
  • JAVA中常见队列详解-非线程安全
  • by 组态在化工生产线自动化控制中的应用方案
  • 工具分享:通过滑块拉取CAN报文信号数值自动发送报文
  • Python小酷库系列:Box,更为完善的dict属性化访问扩展库