| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include "bsp/bsp.h"
- #include "foc/core/foc_observer.h"
- #include "foc/core/smo_observer.h"
- #include "foc/motor/motor.h"
- static foc_observer_t foc_obser;
- void foc_observer_init(void) {
- foc_obser.smo_enabled = false;
- foc_obser.smo_used = false;
- #ifdef CONFIG_SMO_OBSERVER
- smo_observer_init(CONFIG_SMO_PLL_BANDWITH, CONFIG_SMO_LFP_WC, CONFIG_SMO_GAIN_K, CONFIG_SMO_SIGMOID_MAX);
- foc_obser.smo_enabled = true;
- #endif
- }
- float foc_observer_update(float uAlp, float uBeta, float iAlp, float iBeta){
- if (foc_obser.smo_enabled) {
- foc_obser.smo_angle = smo_observer_update(uAlp, uBeta, iAlp, iBeta);
- foc_obser.smo_speed = smo_observer_est_rpm();
- }
- foc_obser.enc_angle = motor_encoder_get_angle();
- foc_obser.enc_speed = motor_encoder_get_speed();
-
- if (foc_obser.smo_used) {
- return foc_obser.smo_angle;
- }
- return foc_obser.enc_angle;
- }
- float foc_observer_speed(void) {
- if (foc_obser.smo_used) {
- return foc_obser.smo_speed;
- }
- return foc_obser.enc_speed;
- }
- bool foc_observer_is_encoder(void) {
- return !foc_obser.smo_used;
- }
- void foc_observer_use_smo(bool use_smo) {
- if (foc_obser.smo_enabled) {
- foc_obser.smo_used = use_smo;
- }else {
- foc_obser.smo_used = false;
- }
- }
- void foc_observer_enable_smo(bool enable) {
- foc_obser.smo_enabled = enable;
- }
- float foc_observer_smo_angle(void) {
- return foc_obser.smo_angle;
- }
- float foc_observer_smo_speed(void) {
- return foc_obser.smo_speed;
- }
|