|
|
@@ -126,7 +126,7 @@ void hall_init(void) {
|
|
|
g_hall.samples.index = 0;
|
|
|
g_hall.samples.filled = 0;
|
|
|
g_hall.elec_angle_vel = 0;
|
|
|
- g_hall.prev_dir = g_hall.dir = POSITIVE;
|
|
|
+ g_hall.dir_set = g_hall.prev_dir = g_hall.dir = POSITIVE;
|
|
|
g_min_delta = 1000000 * 100;
|
|
|
for (int i = 0; i < SAMPLE_MAX_COUNT; i++) {
|
|
|
g_hall.samples.ticks[i] = HALL_MAX_TIME;
|
|
|
@@ -141,10 +141,10 @@ void hall_init(void) {
|
|
|
}
|
|
|
|
|
|
void hall_set_direction(s8 dir) {
|
|
|
- if (dir == g_hall.dir) {
|
|
|
+ if (dir == g_hall.dir_set) {
|
|
|
return;
|
|
|
}
|
|
|
- g_hall.dir = g_hall.prev_dir = dir;
|
|
|
+ g_hall.dir_set = g_hall.dir = g_hall.prev_dir = dir;
|
|
|
hall_init_low_pos();
|
|
|
}
|
|
|
|
|
|
@@ -244,6 +244,10 @@ float hall_update_elec_angle(void) {
|
|
|
g_hall.elec_angle_vel = g_hall.elec_angle_vel * 0.95f;
|
|
|
if (g_hall.elec_angle_vel < 30) {
|
|
|
g_hall.elec_angle_vel = 0;
|
|
|
+ g_hall.samples.filled = 0;
|
|
|
+ g_hall.samples.index = 0;
|
|
|
+ g_hall.dir = g_hall.prev_dir = g_hall.dir_set;
|
|
|
+ hall_init_low_pos();
|
|
|
}
|
|
|
float velocity_raw = g_hall.elec_angle_vel/PHASE_360_DEGREE/g_hall.mot_poles * 60.0f * g_hall.dir;
|
|
|
g_hall.velocity_filted = velocity_raw;
|