Sanes 0 16 сентября, 2017 Опубликовано 16 сентября, 2017 · Жалоба Добрый вечер! Возникла проблема с компинсацией 300 Гц состовляющей на выходе ИП. Таймер генерирует ШИМ (который компенсирует 300 Гц синус) с запаздованием на 1/4 периода . Т.е. запаздывание от момента начала преобразования АЦП до момента выдачи таймером ШИМ с компенсацией состовляет 0.5мс. Алгоритм преобразования - таймер генерит прерывание АЦП, в обработчике прерывания происходят расчеты ,которые передаются на таймер. Частота ШИМ 200кГц. Длительность прерывания 3 мкс при периоде ШИМ 5 мкс. Попробовал АЦП запускать без прерывания, а прерывание делать от таймера - величена задержки не изменилась. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1113 5 17 сентября, 2017 Опубликовано 17 сентября, 2017 · Жалоба расшифруйте все свои сокращения и опишите систему целиком, откуда появляется то, что надо компенсировать, стабильность параметров и тп - ничего не понятно. P.S. Sanes, сколько вам лет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanes 0 17 сентября, 2017 Опубликовано 17 сентября, 2017 · Жалоба Имеется источник питания с входом 3/380 В и выходом 48 В (постоянный ток). Управление осуществляется с помощью микроконтроллера STM32F334. После выпрямления и фильтрации входного переменного тока, в цепи постоянного тока (540 В) остается переменная составляющая около 40 В при 300 Гц. Далее стоят 2 транзистора по топологии «полумост», понижающий трансформатор и выходной фильтр. Проблема в том , что система управления на основе микроконтроллера не компенсирует (не сглаживает) переменную составляющую цепи постоянного тока. Происходит это из-за того , что огибающая ШИМ сигнала, которая должна компенсировать (сгладить) переменную составляющую, опаздывает от от этой переменной составляющей на ¼ периода. И вместо того чтобы её компенсировать , она наоборот её увеличивает. В идеале огибающая ШИМ должна находится в противофазе с переменой составляющей. По примерным расчетом запаздывание составляет 0.5 мс, частота ШИМ 200кГц. Обработка сигнала происходит следующим образом. По таймеру запускается прерывание по АЦП. Далее в обработчике прерывания происходят расчёты скважности ШИМ в зависимости от ошибки выходного сигнала относительного опорного. Потом полученный результат подается на таймер для формирования ШИМ. Длительность прерывания составляет 3 мкс при периоде ШИМ 5 мкс. У меня вызывает затруднение понять, почему происходит такая большая задержка ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1113 5 17 сентября, 2017 Опубликовано 17 сентября, 2017 · Жалоба АЦП схему обратной связи покажите Далее в обработчике прерывания происходят расчёты скважности ШИМ в зависимости от ошибки выходного сигнала относительного опорного. и это тоже покажите Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 18 сентября, 2017 Опубликовано 18 сентября, 2017 · Жалоба Далее в обработчике прерывания происходят расчёты скважности ШИМ Длительность прерывания составляет 3 мкс при периоде ШИМ 5 мкс. У меня вызывает затруднение понять, почему происходит такая большая задержка ? Как вариант: "расчёты скважности" производятся на программно-эмулируемой плавучке. PS: А вообще - отладчик позволяет посмотреть количество тактов, затрачиваемое на каждую инструкцию или группу инструкций. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 18 сентября, 2017 Опубликовано 18 сентября, 2017 · Жалоба У меня вызывает затруднение понять, почему происходит такая большая задержка ? Есть смысл смоделировать мат. модель в соотв. среде (матлабе например) и уже потом запихивать ее в контроллер. Можно пойти другим путем: упрощать программу (расчеты), чтобы локализовать источник задержки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
khach 33 19 сентября, 2017 Опубликовано 19 сентября, 2017 · Жалоба Просчитайте таблицу коррекций для одного периода сетевого напряжения и в следующем периоде выдавайте табличные данные без задержки. В это же врямя готовьте таблицу для следующего периода на основании ошибок текущего. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanes 0 1 ноября, 2017 Опубликовано 1 ноября, 2017 (изменено) · Жалоба Извиняюсь за долгий ответ. Частично вопрос разрешился. В RC цепочки (для определения огбающей ШИМ) стоял конденсатор с слишком большой ёмкостью . Вот часть кода позаимствованного и переделанного из примеров STM. 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) - синусоида компенсируется плохо см. на фото , нижняя осциллограмма. Изменено 1 ноября, 2017 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 1 ноября, 2017 Опубликовано 1 ноября, 2017 · Жалоба Извиняюсь за долгий ответ. Частично вопрос разрешился. На самом деле не все упирается в прерывания. Чтобы при помощи ОС подавлять пульсации, нужно чтобы эти пульсации попадали в полосу пропускания ОС. А для этого, надо понимать то, как пройдет ЛАХ. В ОС у Вас сначала RC фильтрик, потом АЦП и Микроконтроллер. Так вот, надо понимать, кто задает первую постоянную времени. Либо эта RC цепочка, либо интегратор в МК, либо силовой фильтр. Если хотите, могу по скайпу показать, что примерно у Вас может быть... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 2 ноября, 2017 Опубликовано 2 ноября, 2017 · Жалоба На самом деле не все упирается в прерывания. Чтобы при помощи ОС подавлять пульсации, нужно чтобы эти пульсации попадали в полосу пропускания ОС. А для этого, надо понимать то, как пройдет ЛАХ. В ОС у Вас сначала RC фильтрик, потом АЦП и Микроконтроллер. Так вот, надо понимать, кто задает первую постоянную времени. Либо эта RC цепочка, либо интегратор в МК, либо силовой фильтр. Если хотите, могу по скайпу показать, что примерно у Вас может быть... А для всех запись можно выложить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 2 ноября, 2017 Опубликовано 2 ноября, 2017 · Жалоба А для всех запись можно выложить? Попробую сделать... Но общая идея такая. Есть 3 "золотые точки". Я вместо "круговой" буду просто говорить "частота". Крайне-правая - это частота коммутации транзисторов. Это по "горизонтали". А по "вертикали" откладываем вниз 60-80 Дб в соответствии с тем, насколько хотим подавить пульсации на частоте квантования силовым фильтром. И через эту точку ЛАХ пройдет под углом, как минимум соотв. степени силового фильтра. Правда туда могут добавиться еще -20Дб/дек от цепи коррекции... Крайне-правая - это там где 0 частота. А по "вертикали" берем вверх столько, сколько хотит получить точность в статике. Т.е. например при подавлении ошибки в 100 раз это будет 40 Дб. При статическом регуляторе ЛАХ через эту почку пройдет горизонтально. И третья точка - это где ЛАХ пересекает 0 Дб. Там его наклон должен быть не более -20Дб/дек, иначе будет колебательность. По горизонтали этот кусок ЛАХа должен иметь запасы, чтобы был запас по фазе. А еще надо учесть добротность силового фильтра, потому как он при хорошей добротности в точке излома имеет подъем, который может привести к неустойчивости... Вот попробуйте хотя бы грубо нарисовать эти куски и увидите счастье... А чтобы его "услышать" я когда-то вместо нагрузки включил колонки. В ОС, на самом входе вешается огромный конденсатор, чтобы стабилизировать только "постоянку", а вот сразу после него в ОС подается сигнал от генератора. И снимается полоса пропускания ОС и силового тракта... И тогда уже видно сигналы каких частот и амплитуд через них могут пройти... А ТС давал показания "частота ШИМ 200кГц". Только чую я, что это не частота ШИМ, на которой работает счетчик периода ШИМ. И если счетчик считает хотя бы до 100, то это значит, что ШИМ может реализовать изменение сигнала не более чем в 20 кгц... А это очень мало... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanes 0 6 ноября, 2017 Опубликовано 6 ноября, 2017 · Жалоба Так как я в теории ТАУ плохо ориентируюсь, было бы хорошо если выложете наглядное видео или картинки. Частота обновления ШИМ 100 КГц . Частота импуьсов 200 КГц. Именно с такой частотой оцифровыется сигнал и запускаеться прерывание. Это всё проверялось. Счётчик таймера считает до 5760. Вопрос модераторам. Можно ли переместить тему в другой раздел? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 6 ноября, 2017 Опубликовано 6 ноября, 2017 · Жалоба Так как я в теории ТАУ плохо ориентируюсь, было бы хорошо если выложете наглядное видео или картинки. Частота обновления ШИМ 100 КГц . Частота импуьсов 200 КГц. Именно с такой частотой оцифровыется сигнал и запускаеться прерывание. Это всё проверялось. Счётчик таймера считает до 5760. Вопрос модераторам. Можно ли переместить тему в другой раздел? Достаточно ориентироваться немного в физике, немного в математике. Стоит напомнить, и неплохо проверить, что если обновляете относительную длительность ШИМ с частотой 100кГц, то у Вас на всю обработку 10мкс. Т.е. чтобы алгоритм управление хоть как то работал, нужно, чтобы время обработки прерывания не превышало 70-80% от этого времени, т.е. не более 7-8мкс. Проверяли это? Далее: Вас спрашивали про таймер, который Вы используете для формирования PWM. У STM32 таймера достаточно тупенькие и не могут работать на частотах выше тактовой ядра. Если у Вас частота ШИМ 200кГц и при этом таймер считает до 5760. Это должно бы было означать, что частота ядра равна 5760 * 200000 = 1152 МГц. Такого быть не может, поэтому следует уточнить Ваши ответы. А вообще при проектировании ШИМ контроллеров на базе МК нужно чётко представлять длительности и частоты всех процессов. А особенно работу критичных по времени модулей, таки как PWM и ADC. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sanes 0 6 ноября, 2017 Опубликовано 6 ноября, 2017 · Жалоба Длительность прерывания проверял - 3 мкс. В расчёт надо принимать частоту таймера а не ядра. В таймере есть модуль умножения частоты. "fHRTIM x 8U = 1.152 GHz - Resolution: 868 ps - Min PWM frequency: 17.6 kHz (fHRTIM=144MHz)" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
amiller 2 7 ноября, 2017 Опубликовано 7 ноября, 2017 · Жалоба Длительность прерывания проверял - 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 или что-то подобное. Проверьте ещё раз код, чудес не бывает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться