我设计了一个FOC板。首先,我想在不使用其他变换的情况下实现SVPWM,以使电机先旋转。
- PWMC_SetPhaseVoltage(pwmcHandle, Valphabeta);
所以我生成了一个关于 Valphabeta 的数组,代码如下:
- #define PIDIV180 0.017453292519943
- #define MAX 25000
- int main()
- {
- double cnt=0,angle;
- int a,b;
- printf("int16_t test1[][2]=n{n");
- for(cnt = 0;cnt<90;cnt+=0.05)
- {
- angle = cnt * PIDIV180;
- a = MAX*cos(angle);
- b = MAX*sin(angle);
- printf("{%d,%d},n",a,b);
- }
- printf("};");
- return 0;
- }
FOC代码更改为以下内容:
- cnt = (cnt+1)%1800;
- if(!cnt)
- {
- cnt1 = (cnt1+1)%4;
- }
- switch(cnt1)
- {
- case 0:// 4 quadrand
- a = test1[cnt][0];
- b = test1[cnt][1];
- break;
- case 1:// 3 quadrand
- a = -test1[cnt][1];
- b = test1[cnt][0];
- break;
- case 2:// 2 quadrand
- a = -test1[cnt][0];
- b = -test1[cnt][1];
- break;
- case 3:// 1 quadrand
- a = test1[cnt][1];
- b = -test1[cnt][0];
- break;
- }
- Valphabeta.alpha = a;
- Valphabeta.beta = b;
- hCodeError = PWMC_SetPhaseVoltage(pwmcHandle, Valphabeta);
当PWM_FREQUENCY大于10k时,电机转动,当PWM_FREQUENCY慢到5k时,电机来回小角度转动。
哪里有问题?FOC频率不能太低还是我的测试方法不对。