[方案相关] HC32F460 Simple FOC移植参考

[复制链接]
6782|15
 楼主| liangzhou1988 发表于 2024-6-30 00:05 | 显示全部楼层 |阅读模式
本帖最后由 liangzhou1988 于 2024-6-30 00:06 编辑

1 Simple FOC控制原理
核心其实就是SVPWM调制,由三相功率逆变器的六个功率开关元件组成的特定开关模式产生的脉宽调制波,能够使电机电流波形尽可能接近于理想的正弦波形。

图片1.png

SVPWM子程序(为了让代码看起来更简洁,所以程序中没有约束条件,参数设置一定要按要求范围输入):
void setPhaseVoltage(float Uq, float Ud,float angle_el) {

  intsector = (angle_el / _PI_3) + 1;    //find the sector we are in currently
float T1 = _SQRT3*_sin(sector*_PI_3 - angle_el) *Uq/driver.voltage_limit;
float T2 = _SQRT3*_sin(angle_el - (sector-1)*_PI_3) *Uq/driver.voltage_limit;
float T0 = 1 - T1 - T2;

float Ta,Tb,Tc;
switch(sector){
   case 1:
     Ta = T1 + T2 + T0/2;
     Tb = T2 + T0/2;
     Tc = T0/2;
     break;
   case 2:
     Ta = T1 +  T0/2;
     Tb = T1 + T2 + T0/2;
     Tc = T0/2;
     break;
   case 3:
     Ta = T0/2;
     Tb = T1 + T2 + T0/2;
     Tc = T2 + T0/2;
     break;
   case 4:
     Ta = T0/2;
     Tb = T1+ T0/2;
     Tc = T1 + T2 + T0/2;
     break;
   case 5:
     Ta = T2 + T0/2;
     Tb = T0/2;
     Tc = T1 + T2 + T0/2;
     break;
   case 6:
     Ta = T1 + T2 + T0/2;
     Tb = T0/2;
     Tc = T1 + T0/2;
     break;
   default:  // possible error state
     Ta = 0;
     Tb = 0;
     Tc = 0;
  }
  //calculate the phase voltages and center
float Ua = Ta*driver.voltage_limit;
float Ub = Tb*driver.voltage_limit;
float Uc = Tc*driver.voltage_limit;

driver.setPwm(Ua,Ub,Uc);
}

2 调试方法

1、开环控制,只能使用电压模式,电流模式需要采样电流,那就是闭环了,
2、一般设置Ud=0,所以只需设置Uq。在SimpleFOC中voltage_limit最终赋值Uq,
3、Uq设置太大,电机发热严重,Uq设置太小,电机没劲转不动或者转不快,所以一定要根据电机相电阻设置大小,
4、θ不是当前的角度,是目标角度,就是下次计算时的角度。




3 移植完成工程截图

图片2.png

4 参考意义:
A 软件意义:HC32F460 FOC电机基础驱动参考(主频,GPIO, TMR4触发ADC,PWM,SVPWM,PARK逆变换);
B 硬件意义:可用于验证基础硬件的好坏,选择合适的目标转速和Uq,可以让电机实现较小电流的慢速旋转,则基础硬件正常,否则需要排查驱动电路的故障。

5硬件参考详见附件;欢迎讨论。软件附件超过10M,传不上去,详询18688968198;


F460 Drive Card.pdf

101.97 KB, 下载次数: 27

驱动板

F460 Power Card.pdf

191.8 KB, 下载次数: 25

功率板

feifeifeichang 发表于 2024-9-30 15:34 | 显示全部楼层
感谢分享
键盘手没手 发表于 2024-10-2 21:58 来自手机 | 显示全部楼层
开关元件组成的特定开关模式产生的脉宽调制波
高级安全大使 发表于 2025-1-31 12:00 | 显示全部楼层
程序中没有约束条件,参数设置一定要按要求范围输入
yangxiaor520 发表于 2025-2-21 20:11 来自手机 | 显示全部楼层
FOC控制算法写好了,电机的运行效果确实不一样
suncat0504 发表于 2025-2-26 23:16 | 显示全部楼层
好高深的东西。FOC电机驱动。也成了专门的知识,。
地瓜patch 发表于 2025-2-28 12:23 来自手机 | 显示全部楼层
哪个版本的simplefoc
gejigeji521 发表于 2025-2-28 15:06 | 显示全部楼层
移植起来方便不方便啊
wang6623 发表于 2025-3-31 13:51 | 显示全部楼层
FOC的目的是通过解耦控制磁场的d轴和q轴电流,使得电机的控制变得更加高效和精确。
发顺丰更大nc 发表于 2025-4-23 11:00 | 显示全部楼层
能够使电机电流波形尽可能接近于理想的正弦波形。
发顺丰更大nc 发表于 2025-4-23 11:00 | 显示全部楼层
能够使电机电流波形尽可能接近于理想的正弦波形。
q1211404618 发表于 2025-4-24 10:01 | 显示全部楼层
不好弄
Amazingxixixi 发表于 2025-4-24 14:32 | 显示全部楼层
按照以前的经验来说,这个是个不错的案例。但也有很多值得改进的地方。
有何不可0365 发表于 2025-4-30 15:48 | 显示全部楼层
建议在函数中主动进行参数约束
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

56

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部