|
|
@@ -524,7 +524,7 @@ void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
}
|
|
|
|
|
|
#else
|
|
|
-#if 1
|
|
|
+#if 0
|
|
|
#define Duty_Sat(max, t1, t2) \
|
|
|
do { \
|
|
|
if (t1+t2 > max) { \
|
|
|
@@ -536,12 +536,12 @@ void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
#else
|
|
|
#define Duty_Sat(max, t1, t2)
|
|
|
#endif
|
|
|
-void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
+void SVM_Duty_Fix(AB_t *alb, float vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
float alpha = (alb->a) * SQRT3_BY_2;
|
|
|
float beta = (alb->b) * SQRT3_BY_2;
|
|
|
- u32 PWM_Period = PWM_half_period * 2;
|
|
|
+ s32 PWM_Period = PWM_half_period * 2;
|
|
|
u8 sector = 0xFF;
|
|
|
- int tA, tB, tC;
|
|
|
+ s32 tA, tB, tC;
|
|
|
u32 low, midle;
|
|
|
float X, Y, Z;
|
|
|
float modu = (float)(PWM_Period) / (vbus);
|
|
|
@@ -587,8 +587,8 @@ void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
Z = (-alpha + ONE_BY_SQRT3 * beta) * modu;
|
|
|
switch(sector) {
|
|
|
case SECTOR_1: // 3
|
|
|
- { u32 T4 = -Z;
|
|
|
- u32 T6 = X;
|
|
|
+ { s32 T4 = -Z;
|
|
|
+ s32 T6 = X;
|
|
|
Duty_Sat(PWM_Period, T4, T6);
|
|
|
tC = (PWM_Period - T4 - T6)/4;
|
|
|
tB = tC + T6/2;
|
|
|
@@ -599,8 +599,8 @@ void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
}
|
|
|
case SECTOR_2: // 1
|
|
|
{
|
|
|
- u32 T6 = Y;
|
|
|
- u32 T2 = Z;
|
|
|
+ s32 T6 = Y;
|
|
|
+ s32 T2 = Z;
|
|
|
Duty_Sat(PWM_Period, T2, T6);
|
|
|
tC = (PWM_Period - T6 - T2)/4;
|
|
|
tA = tC + T6/2;
|
|
|
@@ -611,8 +611,8 @@ void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
}
|
|
|
case SECTOR_3: // 5
|
|
|
{
|
|
|
- u32 T2 = X;
|
|
|
- u32 T3 = -Y;
|
|
|
+ s32 T2 = X;
|
|
|
+ s32 T3 = -Y;
|
|
|
Duty_Sat(PWM_Period, T2, T3);
|
|
|
tA = (PWM_Period - T2 - T3)/4;
|
|
|
tC = tA + T3/2;
|
|
|
@@ -623,8 +623,8 @@ void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
}
|
|
|
case SECTOR_4: // 4
|
|
|
{
|
|
|
- u32 T1 = -X;
|
|
|
- u32 T3 = Z;
|
|
|
+ s32 T1 = -X;
|
|
|
+ s32 T3 = Z;
|
|
|
Duty_Sat(PWM_Period, T1, T3);
|
|
|
tA = (PWM_Period - T1 - T3)/4;
|
|
|
tB = tA + T3/2;
|
|
|
@@ -635,8 +635,8 @@ void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
}
|
|
|
case SECTOR_5: // 6
|
|
|
{
|
|
|
- u32 T1 = -Y;
|
|
|
- u32 T5 = -Z;
|
|
|
+ s32 T1 = -Y;
|
|
|
+ s32 T5 = -Z;
|
|
|
Duty_Sat(PWM_Period, T1, T5);
|
|
|
tB = (PWM_Period - T1 - T5)/4;
|
|
|
tA = tB + T5/2;
|
|
|
@@ -647,8 +647,8 @@ void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
}
|
|
|
case SECTOR_6: // 2
|
|
|
{
|
|
|
- u32 T4 = Y;
|
|
|
- u32 T5 = -X;
|
|
|
+ s32 T4 = Y;
|
|
|
+ s32 T5 = -X;
|
|
|
Duty_Sat(PWM_Period, T4, T5);
|
|
|
tB = (PWM_Period - T4 - T5)/4;
|
|
|
tC = tB + T5/2;
|
|
|
@@ -660,9 +660,9 @@ void SVM_Duty_Fix(AB_t *alb, s16q5_t vbus, u32 PWM_half_period, FOC_OutP *out) {
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- out->n_Duty[0] = fclamp(tA, 0, PWM_half_period);
|
|
|
- out->n_Duty[1] = fclamp(tB, 0, PWM_half_period);
|
|
|
- out->n_Duty[2] = fclamp(tC, 0, PWM_half_period);
|
|
|
+ out->n_Duty[0] = sclamp(tA, 0, (s32)PWM_half_period);
|
|
|
+ out->n_Duty[1] = sclamp(tB, 0, (s32)PWM_half_period);
|
|
|
+ out->n_Duty[2] = sclamp(tC, 0, (s32)PWM_half_period);
|
|
|
out->n_lowDuty = low;
|
|
|
out->n_midDuty = midle;
|
|
|
out->n_Sector = sector;
|