|
@@ -20,7 +20,6 @@ void foc_observer_init(void) {
|
|
|
foc_obser.is_sensorless_stable = false;
|
|
foc_obser.is_sensorless_stable = false;
|
|
|
foc_obser.sensorless_stable_cnt = 0;
|
|
foc_obser.sensorless_stable_cnt = 0;
|
|
|
foc_obser.sensorless_unstable_cnt = 0;
|
|
foc_obser.sensorless_unstable_cnt = 0;
|
|
|
- foc_obser.b_force_sensorless = false;
|
|
|
|
|
#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;
|
|
@@ -47,7 +46,12 @@ float foc_observer_update(float uAlp, float uBeta, float iAlp, float iBeta){
|
|
|
|
|
|
|
|
bool foc_observer_diagnostic(float enc_angle, float enc_vel) {
|
|
bool foc_observer_diagnostic(float enc_angle, float enc_vel) {
|
|
|
if (foc_obser.b_force_sensorless) {
|
|
if (foc_obser.b_force_sensorless) {
|
|
|
- return true;
|
|
|
|
|
|
|
+ if (foc_obser.is_sensorless_stable) {
|
|
|
|
|
+ if (foc_obser.sensorless_speed <= foc_observer_sensorless_working_speed()/2.0f) {
|
|
|
|
|
+ foc_obser.is_sensorless_stable = false;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
if (enc_vel <= (foc_observer_sensorless_working_speed() - 100.0f)) {
|
|
if (enc_vel <= (foc_observer_sensorless_working_speed() - 100.0f)) {
|
|
|
if (!foc_obser.is_sensorless_running) {
|
|
if (!foc_obser.is_sensorless_running) {
|
|
@@ -137,6 +141,10 @@ bool foc_observer_sensorless_stable(void) {
|
|
|
return foc_obser.is_sensorless_stable;
|
|
return foc_obser.is_sensorless_stable;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+bool foc_observer_is_force_sensorless(void) {
|
|
|
|
|
+ return foc_obser.b_force_sensorless;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
float foc_observer_sensorless_working_speed(void) {
|
|
float foc_observer_sensorless_working_speed(void) {
|
|
|
#ifdef CONFIG_SMO_OBSERVER
|
|
#ifdef CONFIG_SMO_OBSERVER
|
|
|
return CONFIG_SMO_MIN_SPEED;
|
|
return CONFIG_SMO_MIN_SPEED;
|