2026/3/27 17:22:23
网站建设
项目流程
公司设计网站详情,淘宝网站怎么做的,wordpress配置文件数据库连接,yahoo怎么提交网站新能源汽车电机控制代码#xff0c;TC17xx系列#xff0c;TASKING工程#xff0c;FOC代码#xff0c;有弱磁控制等最近在搞TC17xx的电机控制项目#xff0c;用TASKING环境调FOC算法的时候发现个有意思的事——弱磁控制这玩意儿真不是随便调几个参数就能搞定的。特别是当电…新能源汽车电机控制代码TC17xx系列TASKING工程FOC代码有弱磁控制等最近在搞TC17xx的电机控制项目用TASKING环境调FOC算法的时候发现个有意思的事——弱磁控制这玩意儿真不是随便调几个参数就能搞定的。特别是当电机转速飚到基速以上时电压饱和的问题就跟大姨妈似的准时来找麻烦。先看这段初始化代码TC1782的PWM模块配置直接关系到控制精度void PWM_Init(void) { GPT12E_T3CON 0x0040; // 定时器3预分频设置 GPT12E_T6CON 0x0020; // 死区时间生成 GPT12E_PSLLR 0x88; // 相位偏移锁定 // 重点在这行同步触发配置 GPT12E_T2CON | 0x0800; // 开启PWM重载同步 }这里有个坑爹的地方是PSLLR寄存器的相位偏移量上次就因为设成0x80导致死区时间对不上电机启动直接抖成筛糠。后来发现当母线电压超过300V时这个值得跟着IGBT开关速度动态调整。FOC的核心算法里Clarke变换看着简单但在定点处理器上搞浮点运算简直要命// 定标后的Clarke变换 void Clarke_Transform(int16_t a, int16_t b, int16_t c) { alpha a - (b c)/2; // Q15格式处理 beta (866 * (b - c)) 10;// 相当于√3/2的定点优化 // 这里藏着个骚操作用移位代替除法 }那个866其实是√3/2乘以1024取整的结果实测比直接用浮点快三倍不止。不过要注意当相电流超过200A时得防止运算溢出这时候得在AD采样环节先做右移处理。弱磁控制的关键代码段长这样void Flux_Weakening(float udc) { static float id_ref 0; // 电压环输出补偿 float delta (sqrtf(udc*udc - uq*uq) - udc_limit) * K_fluxweaken; id_ref CLAMP(delta, -ID_MAX, 0); // 注意这个CLAMP宏得处理边界突变 dq_current.id_ref id_ref; }重点在udc_limit这个阈值它跟电机参数和转速强相关。有一次在零下20度测试时发现永磁体磁链变化导致这个值得动态修正后来加了个温度补偿查表才解决。调弱磁时最直观的是看示波器里的相电压波形当出现削顶失真时得立马让Id往负方向拉。用TASKING自带的调试工具抓变量波形能看到类似心电图似的突变——这时候别慌把K_fluxweaken参数从0.05慢慢往上加直到电压环不再震荡。最后说个邪门的问题当代码里同时有弱磁控制和MTPA最大转矩电流比时这两个模块会互相掐架。后来在状态机里加了优先级仲裁弱磁控制生效时暂时冻结MTPA的输出总算让电机在高速区稳定下来了。不过这么搞带来的副作用是转矩响应会变慢现在还在找更好的解决方案。