Skip to content

Commit dd73d88

Browse files
committed
CurrentSense correct filtering if 3 current measurements are available
1 parent 7bacc20 commit dd73d88

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

src/common/base_classes/CurrentSense.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,12 @@ float CurrentSense::getDCCurrent(float motor_electrical_angle){
1717
i_alpha = current.a;
1818
i_beta = _1_SQRT3 * current.a + _2_SQRT3 * current.b;
1919
}else{
20-
i_alpha = 2*(current.a - (current.b - current.c))/3.0;
21-
i_beta = _2_SQRT3 *( current.b - current.c );
20+
// signal filtering using identity a + b + c = 0. Assumes measurement error is normally distributed.
21+
float mid = (1.f/3) * (current.a + current.b + current.c);
22+
float a = current.a - mid;
23+
float b = current.b - mid;
24+
i_alpha = a;
25+
i_beta = _1_SQRT3 * a + _2_SQRT3 * b;
2226
}
2327

2428
// if motor angle provided function returns signed value of the current
@@ -44,9 +48,13 @@ DQCurrent_s CurrentSense::getFOCCurrents(float angle_el){
4448
// if only two measured currents
4549
i_alpha = current.a;
4650
i_beta = _1_SQRT3 * current.a + _2_SQRT3 * current.b;
47-
}else{
48-
i_alpha = 0.6666667*(current.a - (current.b - current.c));
49-
i_beta = _2_SQRT3 *( current.b - current.c );
51+
} else {
52+
// signal filtering using identity a + b + c = 0. Assumes measurement error is normally distributed.
53+
float mid = (1.f/3) * (current.a + current.b + current.c);
54+
float a = current.a - mid;
55+
float b = current.b - mid;
56+
i_alpha = a;
57+
i_beta = _1_SQRT3 * a + _2_SQRT3 * b;
5058
}
5159

5260
// calculate park transform

0 commit comments

Comments
 (0)