2018-04-18 23:21:56 +00:00
|
|
|
#include "commands.h"
|
|
|
|
#include "common.h"
|
|
|
|
#include "hal.h"
|
|
|
|
#include "math.h"
|
|
|
|
#include "defines.h"
|
|
|
|
#include "angle.h"
|
|
|
|
|
|
|
|
HAL_COMP(dq_sp);
|
|
|
|
|
|
|
|
HAL_PIN(mode);
|
|
|
|
|
|
|
|
//rotor position
|
|
|
|
HAL_PIN(pos);
|
|
|
|
HAL_PIN(polecount); //1
|
|
|
|
|
|
|
|
//a,b input
|
|
|
|
HAL_PIN(a);
|
|
|
|
HAL_PIN(b);
|
|
|
|
|
|
|
|
//d,q output
|
|
|
|
HAL_PIN(d);
|
|
|
|
HAL_PIN(q);
|
|
|
|
|
|
|
|
static void rt_func(float period, volatile void *ctx_ptr, volatile hal_pin_inst_t *pin_ptr) {
|
|
|
|
// struct dq_ctx_t * ctx = (struct dq_ctx_t *)ctx_ptr;
|
2018-04-20 02:40:45 +00:00
|
|
|
struct dq_sp_pin_ctx_t *pins = (struct dq_sp_pin_ctx_t *)pin_ptr;
|
2018-04-18 23:21:56 +00:00
|
|
|
|
|
|
|
//clarke transformation
|
|
|
|
float a = PIN(a);
|
|
|
|
float b = PIN(b);
|
|
|
|
|
|
|
|
float p = (int)MAX(PIN(polecount), 1.0);
|
|
|
|
float pos = PIN(pos) * p;
|
|
|
|
|
|
|
|
float si = 0.0;
|
|
|
|
float co = 0.0;
|
|
|
|
sincos_fast(pos, &si, &co);
|
|
|
|
|
|
|
|
//park transformation
|
|
|
|
float d = a * co + b * si;
|
|
|
|
float q = -a * si + b * co;
|
|
|
|
|
|
|
|
PIN(d) = d;
|
|
|
|
PIN(q) = q;
|
|
|
|
}
|
|
|
|
|
2018-04-20 02:40:45 +00:00
|
|
|
hal_comp_t dq_sp_comp_struct = {
|
2018-04-18 23:21:56 +00:00
|
|
|
.name = "dq_sp",
|
|
|
|
.nrt = 0,
|
|
|
|
.rt = rt_func,
|
|
|
|
.frt = 0,
|
|
|
|
.nrt_init = 0,
|
|
|
|
.rt_start = 0,
|
|
|
|
.frt_start = 0,
|
|
|
|
.rt_stop = 0,
|
|
|
|
.frt_stop = 0,
|
|
|
|
.ctx_size = 0,
|
2018-04-20 02:40:45 +00:00
|
|
|
.pin_count = sizeof(struct dq_sp_pin_ctx_t) / sizeof(struct hal_pin_inst_t),
|
2018-04-18 23:21:56 +00:00
|
|
|
};
|