|
@@ -202,9 +202,11 @@ int hall_sensor_calibrate(float voltage){
|
|
|
int hall_iterations[8];
|
|
int hall_iterations[8];
|
|
|
memset(sin_hall, 0, sizeof(sin_hall));
|
|
memset(sin_hall, 0, sizeof(sin_hall));
|
|
|
memset(cos_hall, 0, sizeof(cos_hall));
|
|
memset(cos_hall, 0, sizeof(cos_hall));
|
|
|
|
|
+ memset(_sensor_hander.angle_table, 0, sizeof(_sensor_hander.angle_table));
|
|
|
memset(hall_iterations, 0, sizeof(hall_iterations));
|
|
memset(hall_iterations, 0, sizeof(hall_iterations));
|
|
|
co_task_delay(2 * 1000);
|
|
co_task_delay(2 * 1000);
|
|
|
// Forwards
|
|
// Forwards
|
|
|
|
|
+#if 1
|
|
|
for (int i = 0;i < 5;i++) {
|
|
for (int i = 0;i < 5;i++) {
|
|
|
for (int j = 0;j < 360;j++) {
|
|
for (int j = 0;j < 360;j++) {
|
|
|
hall_sensor_set_theta(true, j);
|
|
hall_sensor_set_theta(true, j);
|
|
@@ -218,6 +220,8 @@ int hall_sensor_calibrate(float voltage){
|
|
|
hall_iterations[hall]++;
|
|
hall_iterations[hall]++;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+#endif
|
|
|
|
|
+#if 0
|
|
|
//hall_sensor_set_theta(true, 360);
|
|
//hall_sensor_set_theta(true, 360);
|
|
|
//co_task_delay(2 * 1000);
|
|
//co_task_delay(2 * 1000);
|
|
|
sys_debug("Revers\n");
|
|
sys_debug("Revers\n");
|
|
@@ -235,16 +239,23 @@ int hall_sensor_calibrate(float voltage){
|
|
|
hall_iterations[hall]++;
|
|
hall_iterations[hall]++;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+#endif
|
|
|
foc_pwm_start(false);
|
|
foc_pwm_start(false);
|
|
|
hall_sensor_set_theta(false, 0.0f);
|
|
hall_sensor_set_theta(false, 0.0f);
|
|
|
foc_set_dq_command(0.0f, 0.0f);
|
|
foc_set_dq_command(0.0f, 0.0f);
|
|
|
int fails = 0;
|
|
int fails = 0;
|
|
|
for(int i = 0;i < 8;i++) {
|
|
for(int i = 0;i < 8;i++) {
|
|
|
if (hall_iterations[i] > 30) {
|
|
if (hall_iterations[i] > 30) {
|
|
|
|
|
+ float ang = pi_2_degree(atan2f(sin_hall[i], cos_hall[i]));
|
|
|
|
|
+ fast_norm_angle(&ang);
|
|
|
|
|
+ _sensor_hander.angle_table[i] = (u16)ang;
|
|
|
|
|
+ sys_debug("%d: %d\n", i, _sensor_hander.angle_table[i]);
|
|
|
} else {
|
|
} else {
|
|
|
fails++;
|
|
fails++;
|
|
|
|
|
+ _sensor_hander.angle_table[i] = 0xFFFF;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
return fails == 2;
|
|
return fails == 2;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -350,7 +361,7 @@ static s32 _hall_position(u8 state_now, u8 state_prev) {
|
|
|
|
|
|
|
|
void hall_sensor_handler(void) {
|
|
void hall_sensor_handler(void) {
|
|
|
if (_sensor_hander.is_override_angle) {
|
|
if (_sensor_hander.is_override_angle) {
|
|
|
- sys_debug("%d:%d\n", (int)get_hall_stat(HALL_READ_TIMES), (int)_sensor_hander.override_el_angle);
|
|
|
|
|
|
|
+ sys_debug("irq: %d:%d\n", (int)get_hall_stat(HALL_READ_TIMES), (int)_sensor_hander.override_el_angle);
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
time_measure_start(&g_meas_hall);
|
|
time_measure_start(&g_meas_hall);
|