-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathdrive_phase_sync.h
More file actions
218 lines (180 loc) · 7.55 KB
/
drive_phase_sync.h
File metadata and controls
218 lines (180 loc) · 7.55 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
/**
* @file drive_phase_sync.h Библиотека синхронизации с сетевым напряжением.
*/
#ifndef DRIVE_PHASE_SYNC_H
#define DRIVE_PHASE_SYNC_H
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include "errors/errors.h"
#include "fixed/fixed32.h"
#include "drive_phase_state.h"
//! Фаза для синхронизации.
#define DRIVE_PHASE_SYNC_PHASE PHASE_A
//! Тип каллбэка получения начального угла.
typedef fixed32_t (*drive_phase_sync_angle_callback_t)(void);
/**
* Инициализирует синхронизацию с фазами.
* @return Код ошибки.
*/
extern err_t drive_phase_sync_init(void);
/**
* Сбрасывает состояние синхронизации с фазами.
*/
extern void drive_phase_sync_reset(void);
/**
* Устанавливает каллбэк получения угла текущего значения АЦП.
* @param callback Каллбэк.
*/
extern void drive_phase_sync_set_angle_callback(drive_phase_sync_angle_callback_t callback);
/**
* Добавляет текущие мгновенные значения питания в буфер FFT.
*/
extern void drive_phase_sync_append_data(void);
/**
* Получает флаг заполненности буферов записи.
* @return Флаг заполненности буферов записи.
*/
bool drive_phase_sync_put_buffers_full(void);
/**
* Получает флаг заполненности буферов чтения.
* @return Флаг заполненности буферов чтения.
*/
bool drive_phase_sync_get_buffers_full(void);
/**
* Сбрасываент буферы записи.
*/
extern void drive_phase_sync_reset_put_buffers(void);
/**
* Переключает буферы чтения и записи.
*/
extern void drive_phase_sync_swap_buffers(void);
/**
* Переключает буферы чтения и записи при необходимости.
*/
extern void drive_phase_sync_swap_buffers_if_needed(void);
/**
* Производит вычисления для заданной фазы.
* @param phase Фаза.
* @return Код ошибки.
*/
extern err_t drive_phase_sync_calc(phase_t phase);
/**
* Получает угол заданной фазы на момент начала записи буфера FFT.
* Угол возвращается в интервале
* от -180 (фаза опережает буфер)
* до +180 (фаза отстаёт от буфера).
* @param phase Фаза.
* @param angle Угол от -180 до +180 градусов.
* @return Код ошибки.
*/
extern err_t drive_phase_sync_angle(phase_t phase, fixed32_t* angle);
/**
* Получает смещение (опережение) фазы, мкс.
* @param phase Фаза.
* @return Смещение (опережение) фазы.
*/
extern int16_t drive_phase_sync_offset(phase_t phase);
/**
* Получает угол смещения (опережения) фазы, мкс.
* @param phase Фаза.
* @return Угол смещения (опережения) фазы.
*/
extern fixed32_t drive_phase_sync_offset_angle(phase_t phase);
/**
* Получает смещение (опережение) фазы относительно предыдущей фазы
* согласно направлению чередования фаз, мкс.
* @param phase Фаза.
* @return Смещение (опережение) фазы относительно предыдущей фазы.
*/
extern int16_t drive_phase_sync_delta(phase_t phase);
/**
* Получает угол фазы относительно предыдущей фазы
* согласно направлению чередования фаз.
* @param phase Фаза.
* @return Угол фазы относительно предыдущей фазы.
*/
extern fixed32_t drive_phase_sync_delta_angle(phase_t phase);
/**
* Получает отклонение угла между фазой и предыдущей фазой
* согласно направлению чередования фаз по сравнению
* с нормальным углом между фазами.
* @param phase Фаза.
* @return Отклонение угла.
*/
extern fixed32_t drive_phase_sync_diff_delta_angle(phase_t phase);
/**
* Вычисляет угол очередной фазы.
* @return Код ошибки.
*/
extern err_t drive_phase_sync_process_calc(void);
/**
* Получает наличие данных углов фаз.
* @return Флаг доступности данных углов фаз.
*/
extern bool drive_phase_sync_data_avail(void);
/**
* Устанавливает коэффициенты ПИД-регулятора синхронизации с фазами.
* @param kp Коэффициент пропорционального звена.
* @param ki Коэффициент интегрального звена.
* @param kd Коэффициент дифференциального звена.
*/
extern void drive_phase_sync_set_pll_pid(fixed32_t kp, fixed32_t ki, fixed32_t kd);
/**
* Устанавливает пределы значений ПИД-регулятора синхронизации с фазами.
* @param pid_min Минимальное значение ПИД.
* @param pid_max Максимальное значение ПИД.
*/
extern void drive_phase_sync_pll_pid_clamp(fixed32_t pid_min, fixed32_t pid_max);
/**
* Получает значение ПИД-регулятора синхронизации с фазами.
* @return Значение ПИД-регулятора синхронизации с фазами.
*/
extern fixed32_t drive_phase_sync_pll_pid_value(void);
/**
* Выполняет ПИД-регулирование синхронизации с фазами.
* @return Флаг регулировки.
*/
extern bool drive_phase_sync_pll_regulate(void);
/**
* Устанавливает точность синхронизации.
* @param angle Допустимый угол отклонения от фазы.
*/
extern void drive_phase_sync_set_accuracy(fixed32_t angle);
/**
* Получает флаг синхронизированности с сетью.
* @return Флаг синхронизированности с сетью.
*/
extern bool drive_phase_sync_synchronized(void);
/**
* Получает текущее направление чередования фаз.
* @return Текущее направление чередования фаз.
*/
extern drive_dir_t drive_phase_sync_current_dir(void);
/**
* Получает текущую фазу.
* @return Текущая фаза.
*/
extern phase_t drive_phase_sync_current_phase(void);
/**
* Получает следующую фазу.
* @return следующую фаза.
*/
extern phase_t drive_phase_sync_next_phase(void);
/**
* Вычисляет смещение фаз относительно синхронизации.
* @return Флаг расчёта.
*/
extern bool drive_phase_sync_calc_offsets(void);
/**
* Вычисляет смещение фаз относительно предыдущих.
* @return Флаг расчёта.
*/
extern bool drive_phase_sync_calc_deltas(void);
/**
* Выполняет вычисления и регулирование
* синхронизации с фазами.
* @return Флаг разрешения регулирования.
*/
extern bool drive_phase_sync_process(void);
#endif /* DRIVE_PHASE_SYNC_H */