| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #ifndef _FOC_H__
- #define _FOC_H__
- #include "math/fix_math.h"
- #include "foc/core/PI_Controller.h"
- typedef struct {
- float a;
- float b;
- }albt_t;
- typedef struct {
- float d;
- float q;
- }dq_t;
- typedef struct {
- float curr_abc[3];
- albt_t curr_ab;
- float vol_abc[3]; //相对地电压
- float mot_velocity; //from hall or encoder
- float mot_angle; //from hall or encoder
- dq_t target_curr_dq;
- dq_t target_vol_dq;
- float dc_vol;
- bool b_openloop;
- }foc_in_t;
- typedef struct {
- u16 duty[3];
- u16 low_duty;
- u16 mid_duty;
- u8 sector;
- u8 sample_phase;
- u16 sample1;
- u16 sample2;
- dq_t vol_dq;
- dq_t curr_dq;
- albt_t vol_albeta;
- }foc_out_t;
- typedef struct {
- foc_in_t in;
- foc_out_t out;
- dq_t ramp_curr_dq;
- float curr_abc_filter[3];
- float curr_abc_dt[3]; //abc phase current for deadtime compesition
- float mot_velocity_filterd; //电机滤波后的转速
- float mot_vel_radusPers; //电机的电角速度
- float d_ramp_time;
- float q_ramp_time;
- float ts;
- float sin;
- float cos;
- u32 half_period;
- PI_Controller daxis;
- PI_Controller qaxis;
- }foc_t;
- void foc_init(foc_t *foc);
- void foc_update(foc_t *foc);
- void foc_abc_2_dq(float a, float b, float c, float *d, float *q);
- static __INLINE void clark(float A, float B, float C, albt_t *alpha_beta){
- alpha_beta->a = A;
- alpha_beta->b = ONE_BY_SQRT3 * (B - C);
- }
- static __INLINE void rev_clark(albt_t *alpha_beta, float *ABC){
- ABC[0] = alpha_beta->a;
- ABC[1] = -alpha_beta->a * 0.5f + alpha_beta->b * SQRT3_BY_2;
- ABC[2] = -alpha_beta->a * 0.5f - alpha_beta->b * SQRT3_BY_2;
- }
- #endif /* _FOC_H__ */
|