#ifndef _FOC_OBSERVER_H__
#define _FOC_OBSERVER_H__
#include "os/os_types.h"
/*
处理编码器和角度观测器的电角度融合，主要是判断编码器是否异常，切换到角度观测器
*/
typedef struct {
	float enc_angle;
	float enc_speed;
	float enc_est_angle; //通过encoder速度，估计当前角度
	float sensorless_angle;
	float sensorless_speed;
	float sensorless_est_angle; //通过smo速度，估计当前角度
	bool  is_sensorless_enable;
	bool  is_sensorless_running;
	u16   enc_err_cnt;  //融合系数
}foc_observer_t;
void foc_observer_init(void);
float foc_observer_update(float uAlp, float uBeta, float iAlp, float iBeta);
bool  foc_observer_diagnostic(float enc_angle, float enc_vel);
float foc_observer_speed(void);
bool  foc_observer_is_encoder(void);
void  foc_observer_use_sensorless(bool use_smo);
void  foc_observer_enable_sensorless(bool enable);
float foc_observer_sensorless_angle(void);
float foc_observer_sensorless_speed(void);
float foc_observer_sensorless_working_speed(void);
u16 foc_observer_enc_errcount(void);

#endif /*_FOC_OBSERVER_H__*/

