HPM SDK
HPMicro Software Development Kit
hpm_mcl_control.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 #ifndef HPM_MCL_CONTROL_H
8 #define HPM_MCL_CONTROL_H
9 #include "hpm_mcl_common.h"
10 #include "hpm_mcl_math.h"
11 
16 typedef enum {
22 
27 typedef enum {
35 
40 typedef struct {
41  float rs;
42  float ld;
43  float lq;
44  float ls;
45  float flux;
47 
52 typedef struct {
61 
66 typedef struct {
70 
75 typedef struct {
76  float a_offset;
77  float b_offset;
78  float c_offset;
80 
85 typedef struct {
86  float lowpass_k;
88 
93 typedef struct {
95  float d_mem;
96  float q_mem;
98 
103 typedef struct {
104  struct {
105  float res;
106  float inductor;
107  float sample_ts;
108  float loop_ts;
109  } const_data;
110  struct {
111  float smc_f;
112  float smc_g;
113  float zero;
114  float ksmc;
115  float filter_coeff;
116  } factor;
117  float theta0;
120 
125 typedef struct {
127  float ialpha_mem;
128  float ibeta_mem;
129  float alpha_cal;
130  float zalpha_cal;
131  float beta_cal;
132  float zbeta_cal;
133  float theta_mem;
134  float theta;
135  float ualpha;
136  float ubeta;
138 
143 typedef struct {
145  float ud_delta;
146  float vbus;
149  float delay_times;
151  float lowpass_k;
153 
158 typedef struct {
161  float tick_count;
162  struct {
163  float ud_mem;
164  } rs;
165  struct {
166  float is_last;
167  } ls;
168  struct {
169  float val0_mem;
170  float val1_mem;
171  float val_filter;
173  } flux;
175 
180 typedef struct {
193 
198 typedef struct {
203  hpm_mcl_type_t sin_x, hpm_mcl_type_t cos_x,
206  hpm_mcl_type_t *alpha, hpm_mcl_type_t *beta);
207  hpm_mcl_stat_t (*currentd_pid)(hpm_mcl_type_t ref, hpm_mcl_type_t sens, mcl_control_pid_t *pid_x, hpm_mcl_type_t *output);
208  hpm_mcl_stat_t (*currentq_pid)(hpm_mcl_type_t ref, hpm_mcl_type_t sens, mcl_control_pid_t *pid_x, hpm_mcl_type_t *output);
210  hpm_mcl_stat_t (*position_pid)(hpm_mcl_type_t ref, hpm_mcl_type_t sens, mcl_control_pid_t *pid_x, hpm_mcl_type_t *output);
212  hpm_mcl_type_t cos_x, hpm_mcl_type_t *alpha, hpm_mcl_type_t *beta);
215  hpm_mcl_stat_t (*get_block_sector)(hall_phase_t hall, uint8_t u, uint8_t v, uint8_t w, uint8_t *sector);
216  hpm_mcl_stat_t (*dead_area_polarity_detection)(mcl_control_dead_area_compensation_t *dead_area,
217  float id, float iq, float theta,
218  float deadtime, float ts, mcl_control_dead_area_pwm_offset_t *pwm_out);
219  void (*smc_init)(mcl_control_smc_t *smc_cfg);
220  void (*smc_process)(mcl_control_smc_t *smc_cfg, float ualpha, float ubeta, float ialpha, float ibeta);
221  hpm_mcl_stat_t (*offline_param_detection_rs)(mcl_control_offline_param_detection_t *detection, float ialpha, float ibeta, float *ud, float *uq);
222  hpm_mcl_stat_t (*offline_param_detection_ld)(mcl_control_offline_param_detection_t *detection, float ialpha, float ibeta, float *ud, float *uq);
223  hpm_mcl_stat_t (*offline_param_detection_lq)(mcl_control_offline_param_detection_t *detection, float ialpha, float ibeta, float *ud, float *uq);
224  hpm_mcl_stat_t (*offline_param_detection_ls)(mcl_control_offline_param_detection_t *detection);
225  hpm_mcl_stat_t (*offline_param_detection_flux)(mcl_control_offline_param_detection_t *detection, float ialpha, float ibeta, float ualpha, float ubeta, float *ref_d, float *ref_q);
226  hpm_mcl_stat_t (*offline_param_detection_init)(mcl_control_offline_param_detection_t *detection);
228 
233 typedef struct {
234  void (*init)(void);
235  _FUNC_OPTIONAL_ mcl_control_method_t method;
237 
242 typedef struct {
252 
257 typedef struct {
260 } mcl_control_t;
261 
262 #ifdef __cplusplus
263 extern "C" {
264 #endif
265 
274 
275 #ifdef __cplusplus
276 }
277 #endif
278 
279 #endif
static void init(hpm_panel_t *panel)
Definition: cc10128007.c:86
uint32_t hpm_mcl_stat_t
Definition: hpm_mcl_common.h:15
hpm_mcl_stat_t hpm_mcl_control_init(mcl_control_t *control, mcl_control_cfg_t *cfg)
Initialise the operating data for the control function.
Definition: hpm_mcl_control.c:470
mcl_svpwm_sector_t
Six sectors of svpwm.
Definition: hpm_mcl_control.h:27
@ svpwm_sector5
Definition: hpm_mcl_control.h:32
@ svpwm_sector1
Definition: hpm_mcl_control.h:28
@ svpwm_sector3
Definition: hpm_mcl_control.h:30
@ svpwm_sector2
Definition: hpm_mcl_control.h:29
@ svpwm_sector4
Definition: hpm_mcl_control.h:31
@ svpwm_sector6
Definition: hpm_mcl_control.h:33
mcl_control_status_t
Control Module Status.
Definition: hpm_mcl_control.h:16
@ control_status_run
Definition: hpm_mcl_control.h:19
@ control_status_null
Definition: hpm_mcl_control.h:17
@ control_status_init
Definition: hpm_mcl_control.h:18
@ control_status_fail
Definition: hpm_mcl_control.h:20
float hpm_mcl_type_t
Enable Q format.
Definition: hpm_mcl_math.h:30
hall_phase_t
The mounting angle of the Hall sensor, 60 degrees or 120 degrees, is an inherent property of the moto...
Definition: hpm_mcl_physical.h:18
callback function
Definition: hpm_mcl_control.h:233
Control Function Configuration.
Definition: hpm_mcl_control.h:242
mcl_control_pid_t speed_pid_cfg
Definition: hpm_mcl_control.h:246
mcl_control_dead_area_compensation_t dead_area_compensation_cfg
Definition: hpm_mcl_control.h:248
mcl_control_pid_t currentd_pid_cfg
Definition: hpm_mcl_control.h:244
mcl_control_offline_param_detection_t offline_param_detection_cfg
Definition: hpm_mcl_control.h:250
mcl_control_pid_t currentq_pid_cfg
Definition: hpm_mcl_control.h:245
mcl_control_smc_t smc_cfg
Definition: hpm_mcl_control.h:249
mcl_control_callback_t callback
Definition: hpm_mcl_control.h:243
mcl_control_pid_t position_pid_cfg
Definition: hpm_mcl_control.h:247
DeadAera Compensation Configuration.
Definition: hpm_mcl_control.h:85
float lowpass_k
Definition: hpm_mcl_control.h:86
DeadAera Compensation data.
Definition: hpm_mcl_control.h:93
float d_mem
Definition: hpm_mcl_control.h:95
float q_mem
Definition: hpm_mcl_control.h:96
mcl_control_dead_area_compensation_cfg_t cfg
Definition: hpm_mcl_control.h:94
Used to compensate for pwm dead zones, Duty cycle ratio, between 0 and 1.
Definition: hpm_mcl_control.h:75
float b_offset
Definition: hpm_mcl_control.h:77
float c_offset
Definition: hpm_mcl_control.h:78
float a_offset
Definition: hpm_mcl_control.h:76
Supported control algorithms.
Definition: hpm_mcl_control.h:198
Offline Detection Configuration.
Definition: hpm_mcl_control.h:143
float ud_delta
Definition: hpm_mcl_control.h:145
float flux_detection_times
Definition: hpm_mcl_control.h:148
float lowpass_k
Definition: hpm_mcl_control.h:151
float detection_loop_ts
Definition: hpm_mcl_control.h:150
float vbus
Definition: hpm_mcl_control.h:146
float inductor_detection_times
Definition: hpm_mcl_control.h:147
float current_half_rated
Definition: hpm_mcl_control.h:144
float delay_times
Definition: hpm_mcl_control.h:149
Offline Detection Data.
Definition: hpm_mcl_control.h:158
float val0_mem
Definition: hpm_mcl_control.h:169
float val_filter
Definition: hpm_mcl_control.h:171
float val_filter_mem
Definition: hpm_mcl_control.h:172
float ud_mem
Definition: hpm_mcl_control.h:163
float is_last
Definition: hpm_mcl_control.h:166
float val1_mem
Definition: hpm_mcl_control.h:170
mcl_control_offline_param_detection_cfg_t cfg
Definition: hpm_mcl_control.h:159
float tick_count
Definition: hpm_mcl_control.h:161
mcl_offline_param_detection_result_t result
Definition: hpm_mcl_control.h:160
Configuration data for pid.
Definition: hpm_mcl_control.h:52
hpm_mcl_type_t integral_max
Definition: hpm_mcl_control.h:56
hpm_mcl_type_t kd
Definition: hpm_mcl_control.h:55
hpm_mcl_type_t output_max
Definition: hpm_mcl_control.h:58
hpm_mcl_type_t integral_min
Definition: hpm_mcl_control.h:57
hpm_mcl_type_t ki
Definition: hpm_mcl_control.h:54
hpm_mcl_type_t output_min
Definition: hpm_mcl_control.h:59
hpm_mcl_type_t kp
Definition: hpm_mcl_control.h:53
pid running data
Definition: hpm_mcl_control.h:66
hpm_mcl_type_t integral
Definition: hpm_mcl_control.h:68
mcl_control_pid_cfg_t cfg
Definition: hpm_mcl_control.h:67
Sensorless smc configuration.
Definition: hpm_mcl_control.h:103
float inductor
Definition: hpm_mcl_control.h:106
float res
Definition: hpm_mcl_control.h:105
mcl_control_pid_t pll
Definition: hpm_mcl_control.h:118
float ksmc
Definition: hpm_mcl_control.h:114
float theta0
Definition: hpm_mcl_control.h:117
float smc_f
Definition: hpm_mcl_control.h:111
float sample_ts
Definition: hpm_mcl_control.h:107
float smc_g
Definition: hpm_mcl_control.h:112
float filter_coeff
Definition: hpm_mcl_control.h:115
float loop_ts
Definition: hpm_mcl_control.h:108
float zero
Definition: hpm_mcl_control.h:113
Sensorless smc structure.
Definition: hpm_mcl_control.h:125
float zalpha_cal
Definition: hpm_mcl_control.h:130
float zbeta_cal
Definition: hpm_mcl_control.h:132
mcl_control_smc_cfg_t cfg
Definition: hpm_mcl_control.h:126
float ubeta
Definition: hpm_mcl_control.h:136
float theta_mem
Definition: hpm_mcl_control.h:133
float ibeta_mem
Definition: hpm_mcl_control.h:128
float ualpha
Definition: hpm_mcl_control.h:135
float theta
Definition: hpm_mcl_control.h:134
float beta_cal
Definition: hpm_mcl_control.h:131
float ialpha_mem
Definition: hpm_mcl_control.h:127
float alpha_cal
Definition: hpm_mcl_control.h:129
pwm duty cycle
Definition: hpm_mcl_control.h:180
hpm_mcl_type_t b
Definition: hpm_mcl_control.h:182
hpm_mcl_type_t a1
Definition: hpm_mcl_control.h:189
hpm_mcl_type_t b1
Definition: hpm_mcl_control.h:191
hpm_mcl_type_t b0
Definition: hpm_mcl_control.h:190
hpm_mcl_type_t a
Definition: hpm_mcl_control.h:181
hpm_mcl_type_t a0
step motor pwm
Definition: hpm_mcl_control.h:188
hpm_mcl_type_t c
Definition: hpm_mcl_control.h:183
Control function running data.
Definition: hpm_mcl_control.h:257
mcl_control_cfg_t * cfg
Definition: hpm_mcl_control.h:258
mcl_control_method_t method
Definition: hpm_mcl_control.h:259
Results of offline parameter testing.
Definition: hpm_mcl_control.h:40
float rs
Definition: hpm_mcl_control.h:41
float ld
Definition: hpm_mcl_control.h:42
float ls
Definition: hpm_mcl_control.h:44
float flux
Definition: hpm_mcl_control.h:45
float lq
Definition: hpm_mcl_control.h:43