| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #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 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;
- }
- static __INLINE void rev_park(foc_t *foc, dq_t *dq, albt_t *alpha_beta) {
- float c,s;
- s = foc->sin;
- c = foc->cos;
- alpha_beta->a = dq->d * c - dq->q * s;
- alpha_beta->b = dq->d * s + dq->q * c;
- }
- static __INLINE void park(foc_t *foc, albt_t *alpha_beta, dq_t *dq) {
- float c,s;
- s = foc->sin;
- c = foc->cos;
- dq->d = alpha_beta->a * c + alpha_beta->b * s;
- dq->q = -alpha_beta->a * s + alpha_beta->b * c;
- }
- #endif /* _FOC_H__ */
|