|
|
@@ -280,17 +280,22 @@ float encoder_get_position(void) {
|
|
|
float encoder_zero_phase_detect(void) {
|
|
|
float phase = g_encoder.pwm_angle;
|
|
|
float total_ph = phase;
|
|
|
+ float prev_offset = g_encoder.enc_offset;
|
|
|
+ g_encoder.enc_offset = 0;
|
|
|
int count = 0;
|
|
|
for(; count < 10; count++) {
|
|
|
delay_ms(ENC_PWM_Min_P * 1000 + 2); //wait time for pwm
|
|
|
if ABS(phase - g_encoder.pwm_angle > 2.0f) {
|
|
|
+ g_encoder.enc_offset = prev_offset;
|
|
|
return INVALID_ANGLE;
|
|
|
}
|
|
|
phase = g_encoder.pwm_angle;
|
|
|
total_ph += phase;
|
|
|
}
|
|
|
- sys_debug("offset = %f\n", (total_ph/(float)count));
|
|
|
- return (total_ph/(float)count);
|
|
|
+ float offset_now = total_ph/(float)count;
|
|
|
+ g_encoder.enc_offset = offset_now;
|
|
|
+ sys_debug("offset = %f\n", offset_now);
|
|
|
+ return offset_now;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -357,6 +362,10 @@ bool ENC_Check_error(void) {
|
|
|
}
|
|
|
|
|
|
float encoder_get_pwm_angle(void) {
|
|
|
+#ifdef ENCODER_CC_INVERT
|
|
|
+ g_encoder.pwm_angle = 360.0f - (g_encoder.pwm_angle - g_encoder.enc_offset) + g_encoder.enc_offset;
|
|
|
+ rand_angle(g_encoder.pwm_angle);
|
|
|
+#endif
|
|
|
return g_encoder.pwm_angle;
|
|
|
}
|
|
|
|