|
@@ -4,7 +4,9 @@
|
|
|
#include "foc/core/smo_observer.h"
|
|
#include "foc/core/smo_observer.h"
|
|
|
#include "foc/motor/motor.h"
|
|
#include "foc/motor/motor.h"
|
|
|
|
|
|
|
|
-static foc_observer_t foc_obser;
|
|
|
|
|
|
|
+static foc_observer_t foc_obser = {
|
|
|
|
|
+ .enc_err_cnt = 0,
|
|
|
|
|
+};
|
|
|
void foc_observer_init(void) {
|
|
void foc_observer_init(void) {
|
|
|
foc_obser.is_sensorless_enable = false;
|
|
foc_obser.is_sensorless_enable = false;
|
|
|
foc_obser.is_sensorless_running = false;
|
|
foc_obser.is_sensorless_running = false;
|
|
@@ -14,7 +16,6 @@ void foc_observer_init(void) {
|
|
|
foc_obser.sensorless_angle = INVALID_ANGLE;
|
|
foc_obser.sensorless_angle = INVALID_ANGLE;
|
|
|
foc_obser.sensorless_est_angle = INVALID_ANGLE;
|
|
foc_obser.sensorless_est_angle = INVALID_ANGLE;
|
|
|
foc_obser.sensorless_speed = 0;
|
|
foc_obser.sensorless_speed = 0;
|
|
|
- foc_obser.enc_err_cnt = 0;
|
|
|
|
|
#ifdef CONFIG_SMO_OBSERVER
|
|
#ifdef CONFIG_SMO_OBSERVER
|
|
|
smo_observer_init(CONFIG_SMO_PLL_BANDWITH, CONFIG_SMO_LFP_WC, CONFIG_SMO_GAIN_K, CONFIG_SMO_SIGMOID_MAX);
|
|
smo_observer_init(CONFIG_SMO_PLL_BANDWITH, CONFIG_SMO_LFP_WC, CONFIG_SMO_GAIN_K, CONFIG_SMO_SIGMOID_MAX);
|
|
|
foc_obser.is_sensorless_enable = true;
|
|
foc_obser.is_sensorless_enable = true;
|
|
@@ -46,7 +47,7 @@ bool foc_observer_diagnostic(float enc_angle, float enc_vel) {
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
if (!foc_obser.is_sensorless_running) {
|
|
if (!foc_obser.is_sensorless_running) {
|
|
|
- float est_diff = RPM_2_degree(foc_obser.sensorless_speed);
|
|
|
|
|
|
|
+ float est_diff = RPM_2_degree(foc_obser.enc_speed);
|
|
|
float enc_angle_est = est_diff + foc_obser.enc_angle;
|
|
float enc_angle_est = est_diff + foc_obser.enc_angle;
|
|
|
rand_angle(enc_angle_est);
|
|
rand_angle(enc_angle_est);
|
|
|
float real_est_diff = enc_angle - enc_angle_est;
|
|
float real_est_diff = enc_angle - enc_angle_est;
|