|
|
  |
Большая задержка при обработки данных от АЦП, STM32F334 |
|
|
|
Sep 16 2017, 20:33
|
Группа: Участник
Сообщений: 10
Регистрация: 18-07-15
Пользователь №: 87 623

|
Добрый вечер! Возникла проблема с компинсацией 300 Гц состовляющей на выходе ИП. Таймер генерирует ШИМ (который компенсирует 300 Гц синус) с запаздованием на 1/4 периода . Т.е. запаздывание от момента начала преобразования АЦП до момента выдачи таймером ШИМ с компенсацией состовляет 0.5мс. Алгоритм преобразования - таймер генерит прерывание АЦП, в обработчике прерывания происходят расчеты ,которые передаются на таймер. Частота ШИМ 200кГц. Длительность прерывания 3 мкс при периоде ШИМ 5 мкс. Попробовал АЦП запускать без прерывания, а прерывание делать от таймера - величена задержки не изменилась.
|
|
|
|
|
Sep 17 2017, 20:19
|
Группа: Участник
Сообщений: 10
Регистрация: 18-07-15
Пользователь №: 87 623

|
Имеется источник питания с входом 3/380 В и выходом 48 В (постоянный ток). Управление осуществляется с помощью микроконтроллера STM32F334. После выпрямления и фильтрации входного переменного тока, в цепи постоянного тока (540 В) остается переменная составляющая около 40 В при 300 Гц. Далее стоят 2 транзистора по топологии «полумост», понижающий трансформатор и выходной фильтр. Проблема в том , что система управления на основе микроконтроллера не компенсирует (не сглаживает) переменную составляющую цепи постоянного тока. Происходит это из-за того , что огибающая ШИМ сигнала, которая должна компенсировать (сгладить) переменную составляющую, опаздывает от от этой переменной составляющей на ¼ периода. И вместо того чтобы её компенсировать , она наоборот её увеличивает. В идеале огибающая ШИМ должна находится в противофазе с переменой составляющей. По примерным расчетом запаздывание составляет 0.5 мс, частота ШИМ 200кГц. Обработка сигнала происходит следующим образом. По таймеру запускается прерывание по АЦП. Далее в обработчике прерывания происходят расчёты скважности ШИМ в зависимости от ошибки выходного сигнала относительного опорного. Потом полученный результат подается на таймер для формирования ШИМ. Длительность прерывания составляет 3 мкс при периоде ШИМ 5 мкс. У меня вызывает затруднение понять, почему происходит такая большая задержка ?
|
|
|
|
|
Sep 17 2017, 21:49
|
Знающий
   
Группа: Свой
Сообщений: 604
Регистрация: 24-02-06
Из: Москва
Пользователь №: 14 658

|
Цитата(Sanes @ Sep 17 2017, 23:19)  АЦП схему обратной связи покажите Цитата(Sanes @ Sep 17 2017, 23:19)  Далее в обработчике прерывания происходят расчёты скважности ШИМ в зависимости от ошибки выходного сигнала относительного опорного. и это тоже покажите
|
|
|
|
|
Sep 18 2017, 05:59
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Sanes @ Sep 18 2017, 03:19)  Далее в обработчике прерывания происходят расчёты скважности ШИМ Цитата(Sanes @ Sep 18 2017, 03:19)  Длительность прерывания составляет 3 мкс при периоде ШИМ 5 мкс. У меня вызывает затруднение понять, почему происходит такая большая задержка ? Как вариант: "расчёты скважности" производятся на программно-эмулируемой плавучке. PS: А вообще - отладчик позволяет посмотреть количество тактов, затрачиваемое на каждую инструкцию или группу инструкций.
|
|
|
|
|
Nov 1 2017, 17:21
|
Группа: Участник
Сообщений: 10
Регистрация: 18-07-15
Пользователь №: 87 623

|
Извиняюсь за долгий ответ. Частично вопрос разрешился. В RC цепочки (для определения огбающей ШИМ) стоял конденсатор с слишком большой ёмкостью . Вот часть кода позаимствованного и переделанного из примеров STM. CODE int32_t seterr, pid_out; int32_t error;
error = Vout - Vref; seterr = (-Kp * error) / 200; term_Volt = term_Volt + ((-Ki * error) / 200); if (term_Volt > SAT_LIMIT)//B40 { term_Volt = SAT_LIMIT; } if (term_Volt < -(SAT_LIMIT)) { term_Volt = -(SAT_LIMIT); } dif = (-Kd*(error-error_old))/200; pid_out = seterr + term_Volt + dif ; pid_out += 5760;//5760 максимальное скважность ШИМ. if (pid_out >= MAX_DUTY_A)//B40 { pid_out = MAX_DUTY_A; } if (pid_out < MIN_DUTY_A)//480 { pid_out = MIN_DUTY_A; } CurrentDutyA = pid_out; __HAL_HRTIM_SETCOMPARE(&hhrtim, HRTIM_TIMERINDEX_TIMER_C, HRTIM_COMPAREUNIT_2, CurrentDutyA);
Схема входной цепи  В данный момент проблема состоит в том что не получается качественно настроить ПИД регулятор. При Кр относитльно большом (30...50) амплитуда колебаний уменьшается в разы ,но появляются треугольники с увеличеной частотой 600...900 Гц Если уменьшить Кр (10...3) - синусоида компенсируется плохо см. на фото , нижняя осциллограмма.
Сообщение отредактировал IgorKossak - Nov 1 2017, 18:26
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
|
|
|
|
|
Nov 1 2017, 20:13
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Sanes @ Nov 1 2017, 20:21)  Извиняюсь за долгий ответ. Частично вопрос разрешился. На самом деле не все упирается в прерывания. Чтобы при помощи ОС подавлять пульсации, нужно чтобы эти пульсации попадали в полосу пропускания ОС. А для этого, надо понимать то, как пройдет ЛАХ. В ОС у Вас сначала RC фильтрик, потом АЦП и Микроконтроллер. Так вот, надо понимать, кто задает первую постоянную времени. Либо эта RC цепочка, либо интегратор в МК, либо силовой фильтр. Если хотите, могу по скайпу показать, что примерно у Вас может быть...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Nov 2 2017, 07:30
|

Знающий
   
Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663

|
Цитата(iosifk @ Nov 2 2017, 00:13)  На самом деле не все упирается в прерывания. Чтобы при помощи ОС подавлять пульсации, нужно чтобы эти пульсации попадали в полосу пропускания ОС. А для этого, надо понимать то, как пройдет ЛАХ. В ОС у Вас сначала RC фильтрик, потом АЦП и Микроконтроллер. Так вот, надо понимать, кто задает первую постоянную времени. Либо эта RC цепочка, либо интегратор в МК, либо силовой фильтр. Если хотите, могу по скайпу показать, что примерно у Вас может быть... А для всех запись можно выложить?
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Nov 2 2017, 08:07
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Obam @ Nov 2 2017, 10:30)  А для всех запись можно выложить? Попробую сделать... Но общая идея такая. Есть 3 "золотые точки". Я вместо "круговой" буду просто говорить "частота". Крайне-правая - это частота коммутации транзисторов. Это по "горизонтали". А по "вертикали" откладываем вниз 60-80 Дб в соответствии с тем, насколько хотим подавить пульсации на частоте квантования силовым фильтром. И через эту точку ЛАХ пройдет под углом, как минимум соотв. степени силового фильтра. Правда туда могут добавиться еще -20Дб/дек от цепи коррекции... Крайне-правая - это там где 0 частота. А по "вертикали" берем вверх столько, сколько хотит получить точность в статике. Т.е. например при подавлении ошибки в 100 раз это будет 40 Дб. При статическом регуляторе ЛАХ через эту почку пройдет горизонтально. И третья точка - это где ЛАХ пересекает 0 Дб. Там его наклон должен быть не более -20Дб/дек, иначе будет колебательность. По горизонтали этот кусок ЛАХа должен иметь запасы, чтобы был запас по фазе. А еще надо учесть добротность силового фильтра, потому как он при хорошей добротности в точке излома имеет подъем, который может привести к неустойчивости... Вот попробуйте хотя бы грубо нарисовать эти куски и увидите счастье... А чтобы его "услышать" я когда-то вместо нагрузки включил колонки. В ОС, на самом входе вешается огромный конденсатор, чтобы стабилизировать только "постоянку", а вот сразу после него в ОС подается сигнал от генератора. И снимается полоса пропускания ОС и силового тракта... И тогда уже видно сигналы каких частот и амплитуд через них могут пройти... А ТС давал показания "частота ШИМ 200кГц". Только чую я, что это не частота ШИМ, на которой работает счетчик периода ШИМ. И если счетчик считает хотя бы до 100, то это значит, что ШИМ может реализовать изменение сигнала не более чем в 20 кгц... А это очень мало...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Nov 6 2017, 14:56
|
Группа: Участник
Сообщений: 10
Регистрация: 18-07-15
Пользователь №: 87 623

|
Так как я в теории ТАУ плохо ориентируюсь, было бы хорошо если выложете наглядное видео или картинки.
Частота обновления ШИМ 100 КГц . Частота импуьсов 200 КГц. Именно с такой частотой оцифровыется сигнал и запускаеться прерывание. Это всё проверялось. Счётчик таймера считает до 5760.
Вопрос модераторам. Можно ли переместить тему в другой раздел?
|
|
|
|
|
Nov 6 2017, 15:43
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612

|
Цитата(Sanes @ Nov 6 2017, 17:56)  Так как я в теории ТАУ плохо ориентируюсь, было бы хорошо если выложете наглядное видео или картинки.
Частота обновления ШИМ 100 КГц . Частота импуьсов 200 КГц. Именно с такой частотой оцифровыется сигнал и запускаеться прерывание. Это всё проверялось. Счётчик таймера считает до 5760.
Вопрос модераторам. Можно ли переместить тему в другой раздел? Достаточно ориентироваться немного в физике, немного в математике. Стоит напомнить, и неплохо проверить, что если обновляете относительную длительность ШИМ с частотой 100кГц, то у Вас на всю обработку 10мкс. Т.е. чтобы алгоритм управление хоть как то работал, нужно, чтобы время обработки прерывания не превышало 70-80% от этого времени, т.е. не более 7-8мкс. Проверяли это? Далее: Вас спрашивали про таймер, который Вы используете для формирования PWM. У STM32 таймера достаточно тупенькие и не могут работать на частотах выше тактовой ядра. Если у Вас частота ШИМ 200кГц и при этом таймер считает до 5760. Это должно бы было означать, что частота ядра равна 5760 * 200000 = 1152 МГц. Такого быть не может, поэтому следует уточнить Ваши ответы. А вообще при проектировании ШИМ контроллеров на базе МК нужно чётко представлять длительности и частоты всех процессов. А особенно работу критичных по времени модулей, таки как PWM и ADC.
|
|
|
|
|
Nov 6 2017, 21:30
|
Группа: Участник
Сообщений: 10
Регистрация: 18-07-15
Пользователь №: 87 623

|
Длительность прерывания проверял - 3 мкс. В расчёт надо принимать частоту таймера а не ядра. В таймере есть модуль умножения частоты. "fHRTIM x 8U = 1.152 GHz - Resolution: 868 ps - Min PWM frequency: 17.6 kHz (fHRTIM=144MHz)"
|
|
|
|
|
Nov 7 2017, 02:29
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612

|
Цитата(Sanes @ Nov 7 2017, 00:30)  Длительность прерывания проверял - 3 мкс. В расчёт надо принимать частоту таймера а не ядра. В таймере есть модуль умножения частоты. "fHRTIM x 8U = 1.152 GHz - Resolution: 868 ps - Min PWM frequency: 17.6 kHz (fHRTIM=144MHz)" Ок. Я просто не пытался использовать STM32 для сложных проектов. Там где нужен ШИМ на высокой частоте, мой выбор - Texas. Но если таймер этого семейства STM32 может работать в режиме Hi Resolution, то вопрос по этому поводу снимается. Если у Вас частота обновления ШИМ 100кГц, то вся обработка данных (и все измерения), задействованных для расчётов ШИМ, должна проводится с этой частотой. Если у Вас по факту задержки сравнимы с частотой сети, то вероятно в алгоритм где то затесались параметры, которые рассчитываются с этой частотой. RMS или что-то подобное. Проверьте ещё раз код, чудес не бывает.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|