-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdrive_regulator.h
More file actions
328 lines (276 loc) · 11.2 KB
/
drive_regulator.h
File metadata and controls
328 lines (276 loc) · 11.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
/**
* @file drive_regulator.h Библиотека регулирования привода.
*/
#ifndef DRIVE_REGULATOR_H
#define DRIVE_REGULATOR_H
#include <stdbool.h>
#include "errors/errors.h"
#include "fixed/fixed32.h"
#include "pid_controller/pid_controller.h"
#include "ramp.h"
//! Тип состояния регулятора привода.
typedef enum _Drive_Regulator_State {
DRIVE_REGULATOR_STATE_IDLE = 0,
DRIVE_REGULATOR_STATE_START,
DRIVE_REGULATOR_STATE_RUN,
DRIVE_REGULATOR_STATE_STOP
} drive_regulator_state_t;
//! Режим регулятора.
typedef enum _Drive_Regulator_Mode {
DRIVE_REGULATOR_MODE_SPEED = 0, //!< Поддержание скорости (напряжения).
DRIVE_REGULATOR_MODE_TORQUE = 1 //!< Поддержание момента (тока).
} drive_regulator_mode_t;
//! Тип задания.
typedef ramp_reference_t reference_t;
//! Минимальное задание.
//#define REFERENCE_MIN 0
#define REFERENCE_MIN_F 0
//! Максимальное задание.
//#define REFERENCE_MAX 100
#define REFERENCE_MAX_F 0x640000
/**
* Инициализирует регулятор привода.
* @return Код ошибки.
*/
extern err_t drive_regulator_init(void);
/**
* Обновляет настройки регулятора привода.
*/
extern void drive_regulator_update_settings(void);
/**
* Получает ПИД-регулятор скорости.
* Для отладки.
* @return ПИД-регулятор скорости.
*/
extern pid_controller_t* drive_regulator_spd_pid(void);
/**
* Получает ПИД-регулятор тока ротора.
* Для отладки.
* @return ПИД-регулятор тока ротора.
*/
extern pid_controller_t* drive_regulator_rot_pid(void);
/**
* Получает ПИД-регулятор тока возбуждения.
* Для отладки.
* @return ПИД-регулятор тока возбуждения.
*/
extern pid_controller_t* drive_regulator_exc_pid(void);
/**
* Получает состояние регулятора привода.
* @return Состояние регулятора привода.
*/
extern drive_regulator_state_t drive_regulator_state(void);
/**
* Получает режим регулятора.
* @return Режим регулятора.
*/
extern drive_regulator_mode_t drive_regulator_mode(void);
/**
* Устанавливает режим регулятора.
* @param mode Режим регулятора.
*/
extern void drive_regulator_set_mode(drive_regulator_mode_t mode);
/**
* Получает значение задания.
* @return Задание.
*/
extern reference_t drive_regulator_reference(void);
/**
* Получает значение текущего задания (с учётом разгона).
* @return Текущее задание.
*/
extern fixed32_t drive_regulator_current_reference(void);
/**
* Устанавливает значение задания.
* @param reference Задание.
* @return Код ошибки.
*/
extern err_t drive_regulator_set_reference(reference_t reference);
/**
* Увеличивает значение задания.
* @return Флаг изменения задания.
*/
extern void drive_regulator_inc_reference(void);
/**
* Уменьшает значение задания.
* @return Флаг изменения задания.
*/
extern void drive_regulator_dec_reference(void);
/**
* Подстраивает текущее значение разгона
* согласно выходному значению питания.
*/
extern void drive_regulator_adjust_cur_reference(void);
/**
* Выполняет запуск.
*/
extern void drive_regulator_start(void);
/**
* Выполняет останов.
*/
extern void drive_regulator_stop(void);
/**
* Выполняет быстрый останов.
*/
extern void drive_regulator_fast_stop(void);
/**
* Устанавливает время изменения задания от 0 до 100%.
* @param time Время изменения задания.
* @return Код ошибки.
*/
extern err_t drive_regulator_set_reference_time(ramp_time_t time);
/**
* Устанавливает время разгона от 0 до 100%.
* @param time Время разгона.
* @return Код ошибки.
*/
extern err_t drive_regulator_set_start_time(ramp_time_t time);
/**
* Устанавливает время останова от 100 до 0%.
* @param time Время разгона.
* @return Код ошибки.
*/
extern err_t drive_regulator_set_stop_time(ramp_time_t time);
/**
* Устанавливает время быстрого останова от 100 до 0%.
* @param time Время разгона.
* @return Код ошибки.
*/
extern err_t drive_regulator_set_fast_stop_time(ramp_time_t time);
/**
* Получает разрешение регулирования напряжения якоря.
* @return Разрешение регулирования напряжения якоря.
*/
extern bool drive_regulator_rot_enabled(void);
/**
* Устанавливает разрешение регулирования напряжения якоря.
* @param enabled Разрешение регулирования напряжения якоря.
*/
extern void drive_regulator_set_rot_enabled(bool enabled);
/**
* Получает разрешение регулирования тока возбуждения.
* @return Разрешение регулирования тока возбуждения.
*/
extern bool drive_regulator_exc_enabled(void);
/**
* Устанавливает разрешение регулирования тока возбуждения.
* @param enabled Разрешение регулирования тока возбуждения.
*/
extern void drive_regulator_set_exc_enabled(bool enabled);
/**
* Устанавливает коэффициенты ПИД-регулятора скорости.
* @param kp Коэффициент пропорционального звена.
* @param ki Коэффициент интегрального звена.
* @param kd Коэффициент дифференциального звена.
*/
extern void drive_regulator_set_spd_pid(fixed32_t kp, fixed32_t ki, fixed32_t kd);
/**
* Устанавливает коэффициенты ПИД-регулятора тока ротора.
* @param kp Коэффициент пропорционального звена.
* @param ki Коэффициент интегрального звена.
* @param kd Коэффициент дифференциального звена.
*/
extern void drive_regulator_set_rot_pid(fixed32_t kp, fixed32_t ki, fixed32_t kd);
/**
* Устанавливает коэффициенты ПИД-регулятора тока возбуждения.
* @param kp Коэффициент пропорционального звена.
* @param ki Коэффициент интегрального звена.
* @param kd Коэффициент дифференциального звена.
*/
extern void drive_regulator_set_exc_pid(fixed32_t kp, fixed32_t ki, fixed32_t kd);
/**
* Устанавливает максимальный ток якоря.
* @param I_max Максимальный ток якоря.
*/
extern void drive_regulator_set_max_rot_current(fixed32_t I_max);
/**
* Устанавливает пределы углов открытия тиристоров.
* @param angle_min Минимальный угол открытия.
* @param angle_max Максимальный угол открытия.
*/
extern void drive_regulator_set_rot_open_angle_range(fixed32_t angle_min, fixed32_t angle_max);
/**
* Устанавливает пределы углов открытия симистора возбуждения.
* @param angle_min Минимальный угол открытия.
* @param angle_max Максимальный угол открытия.
*/
extern void drive_regulator_set_exc_open_angle_range(fixed32_t angle_min, fixed32_t angle_max);
/**
* Получает значение номинального напряжения якоря.
* @return Номинальное напряжение якоря.
*/
extern fixed32_t drive_regulator_rot_nom_voltage(void);
/**
* Устанавливает значение номинального напряжения якоря.
* @param voltage Номинальное напряжение якоря.
*/
extern void drive_regulator_set_rot_nom_voltage(fixed32_t voltage);
/**
* Получает значение номинального тока якоря.
* @return Номинальный ток якоря.
*/
extern fixed32_t drive_regulator_rot_nom_current(void);
/**
* Устанавливает значение номинального тока якоря.
* @param current Номинальный ток якоря.
*/
extern void drive_regulator_set_rot_nom_current(fixed32_t current);
/**
* Получает значение тока возбуждения.
* @return Ток возбуждения.
*/
extern fixed32_t drive_regulator_exc_current(void);
/**
* Устанавливает значение тока возбуждения.
* @param voltage Ток возбуждения.
*/
extern void drive_regulator_set_exc_current(fixed32_t current);
/**
* Получает значение текущей ЭДС задания (с учётом разгона).
* @return Текущее напряжение задания.
*/
extern fixed32_t drive_regulator_current_rpm_ref(void);
/**
* Получает значение текущего тока задания (с учётом разгона).
* @return Текущий ток задания.
*/
extern fixed32_t drive_regulator_current_i_ref(void);
/**
* Получает задание тока от регулятора скорости.
* @return Задание тока от регулятора скорости.
*/
extern fixed32_t drive_regulator_rot_speed_current_ref(void);
/**
* Получает угол открытия для ротора.
* @return Угол открытия для ротора.
*/
extern fixed32_t drive_regulator_rot_open_angle(void);
/**
* Получает угол открытия для возбуждения.
* @return Угол открытия для возбуждения.
*/
extern fixed32_t drive_regulator_exc_open_angle(void);
/**
* Выполняет ПИД-регулирование скорости.
* @param dt Время.
* @return Флаг регулировки.
*/
extern bool drive_regulator_regulate_speed(fixed32_t dt);
/**
* Выполняет ПИД-регулирование тока.
* @param dt Время.
* @return Флаг регулировки.
*/
extern bool drive_regulator_regulate_current(fixed32_t dt);
/**
* Выполняет ПИД-регулирование возбуждения.
* @param dt Время.
* @return Флаг регулировки.
*/
extern bool drive_regulator_regulate_exc(fixed32_t dt);
/**
* Выполняет ПИД-регулирование.
* @return Флаг регулировки.
*/
extern bool drive_regulator_process(void);
#endif /* DRIVE_REGULATOR_H */