Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перевести аналоговый PID в цифровой
Форум разработчиков электроники ELECTRONIX.ru > Силовая Электроника - Power Electronics > Обратная Связь, Стабилизация, Регулирование, Компенсация
gte
Привет Всем!

Есть отлаженные аналоговые PID. Хочется попробовать перевести их в цифровую форму, т.е. в Си код для МК, ARM например?
Схема подобно используемой на рисунке. Это из an-1162.pdf (International Rectifier).
Нажмите для просмотра прикрепленного файла
Работа разовая, а вариант исполнения регулятора достаточно редкий, поэтому хочется минимизировать затраты. С помощью каких программ это можно получить начальный код?
Например, с помощью LabView + Embedded Module for ARM?

Herz
Стоит только погуглить... Вот, например. Или ещё. Это только первые два результата поиска.
gte
Цитата(Herz @ Apr 14 2016, 00:32) *
Стоит только погуглить...

Это строго ручками. Хотелось вы несколько облегчить задачу.
Herz
Цитата(gte @ Apr 13 2016, 22:48) *
Это строго ручками. Хотелось вы несколько облегчить задачу.

А каким образом? Получить готовый код? Так железо всё равно создавать ручками. А под него и программу писать. Не вижу здесь особых сложностей.
gte
Цитата(Herz @ Apr 14 2016, 00:59) *
А каким образом? Получить готовый код? Так железо всё равно создавать ручками. А под него и программу писать. Не вижу здесь особых сложностей.

Не готовый код, заготовку. Вариант регулятора показанного на рисунке очень мало используется и очень мало описан. Я понимаю, что сгенерированный код регулятора будет мало неэффективен, но с ним можно поиграться и возможно это сэкономит время. Возможно я не прав.
Herz
Цитата(gte @ Apr 14 2016, 00:51) *
Не готовый код, заготовку. Вариант регулятора показанного на рисунке очень мало используется и очень мало описан. Я понимаю, что сгенерированный код регулятора будет мало неэффективен, но с ним можно поиграться и возможно это сэкономит время. Возможно я не прав.

Не соглашусь. Что такого необычного в этом варианте? Принципы всё те же. Начинать можно с простого: реализации релейного регулирования на конкретном макете железа. Затем совершенствовать. Я бы так действовал. Гораздо понятнее будет самому и легче исправлять именно свой код.
Tanya
Цитата(gte @ Apr 14 2016, 00:51) *
Возможно я не прав.

Скорее всего. Это обычный ПИД-регулятор на одном ОУ. Если лень самостоятельно выводить формулы, можно их подсмотреть у Титце с Шенком. Только если быстродействие нужно, придется соответствующий контроллер ставить. Вот на STM32F303 ПИД может работать несколько быстрее микросекунды. Раза в два. Правда там ЦАП тихоходный. С внешним будет лучше. Стоит ли такая овчинка выделки - Вам судить.
gte
Цитата(Tanya @ Apr 14 2016, 15:30) *
Скорее всего. Это обычный ПИД-регулятор на одном ОУ. Если лень самостоятельно выводить формулы, можно их подсмотреть у Титце с Шенком.

Увы, подсмотреть не удастся (внимательно посмотрите на схему), а времени всегда не хватает. То же и с вариантом "отдать на сторону". Проверку и отладку все равно надо делать сразу.
Вариант подобный LabView + Embedded Module for ARM интересен тем, что исходный вариант можно проверить в симуляторе и работу растянуть по времени, так как проблема не первой срочности.

Цитата(Herz @ Apr 14 2016, 15:20) *
Не соглашусь. Что такого необычного в этом варианте?

Тем, что математика на данный регулятор не описана в литературе, придется во всем разбираться.
wim
Цитата(gte @ Apr 14 2016, 16:22) *
математика на данный регулятор не описана в литературе, придется во всем разбираться.
Математика как раз описана: http://www.ti.com/download/trng/docs/semin...pic_7_Hagen.pdf
Но там, видимо, "многобукаф", а хочется как онлайн-калькулятор закона Ома. biggrin.gif
Tanya
Цитата(gte @ Apr 14 2016, 16:22) *
Увы, подсмотреть не удастся (внимательно посмотрите на схему),

Скажите, что я проглядела.
gte
Цитата(wim @ Apr 14 2016, 18:17) *
Математика как раз описана: http://www.ti.com/download/trng/docs/semin...pic_7_Hagen.pdf
Но там, видимо, "многобукаф", а хочется как онлайн-калькулятор закона Ома. biggrin.gif

Конечно хочется rolleyes.gif , но я реалист. Спасибо за подсказку, это в любом случае облегчит задачу.

P.S. По поводу калькулятора. Наверняка в controlSUITE есть. Но букв не мало.

Цитата(Tanya @ Apr 14 2016, 18:18) *
Скажите, что я проглядела.

Ничего, если схему привести к двум сопротивления. Один на входе, один в обратной связи ОУ.
mcheb
Цитата(gte @ Apr 14 2016, 16:22) *
Тем, что математика на данный регулятор не описана в литературе, придется во всем разбираться.

Этой математике вчера в обед было лет 45-46 точно(с 1970 года), а так и все 100.
gte
Цитата(mcheb @ Apr 15 2016, 06:10) *
Этой математике вчера в обед было лет 45-46 точно(с 1970 года), а так и все 100.

А что не 200?
Не на данный регулятор, а его разновидность. Редко используемую, но работает великолепно. Есть что по делу? Многие вещи можно сделать с листочком и карандашом, но почему то существуют много различных программ заменяющих карандаш и листок.
Baser
Цитата(gte @ Apr 15 2016, 07:56) *
А что не 200?
Не на данный регулятор, а его разновидность. Редко используемую,

Не поленился залезть в Титце и Шенк - гл. 26 Электронные регуляторы, стр.485
Нажмите для просмотра прикрепленного файла
Ничего не напоминает на вашей схеме из первого поста?
Tanya
Цитата(Baser @ Apr 15 2016, 14:06) *
Не поленился залезть в Титце и Шенк
Ничего не напоминает на вашей схеме из первого поста?

А ТС поленился. Его смущает лишний конденсатор, наверное. Это просто для среза дифференциальной компоненты на высоких частотах.
gte
Цитата(Tanya @ Apr 15 2016, 16:31) *
А ТС поленился. Его смущает лишний конденсатор, наверное. Это просто для среза дифференциальной компоненты на высоких частотах.

Что зачем понятно. А вот садится за учебники времени нет, так как не тот профиль да и не интересно.
Любопытно будет посмотреть на ценовые предложения желающих делать эту очень простую работу.
Приглашаю.
enshtein
Без проблем. 10т.р. цена вопроса. Но как калькулятор не получится. Даете значение L , С и Rнагрузка получаете настроенную цифровую систему управления в виде разностного уравнения для конкретного случая (для управления по току) еще 10т.р. и получаете еще одно разностное уравнение для двухконтурной подчиненной системы управления. Забиваете эти уравнения в контроллер (очень просто) например в ARM и будет вам счастье. Получите полноценный buc-конвертер. Если добавить еще 10т.р. то достаточно дать Uin, Uout, Rнагрузки;
AnatolyT
Делал когда то в своем изделии источник вторичного питания с управлением от контроллера на мощность примерно 2 Вт, правда повышающий, что не суть важно, диод вместо синхронного ключа. По сути тот же регулятор. Если такое нужно могу сделать. skb66@mail.ru
iosifk
Цитата(gte @ Apr 15 2016, 18:40) *
Что зачем понятно. А вот садится за учебники времени нет, так как не тот профиль да и не интересно.
Любопытно будет посмотреть на ценовые предложения желающих делать эту очень простую работу.

А взять готовые цифровые стабилизаторы от Exar или от ADI слабо? И вроде еще у кого-то есть точно не помню...
gte
Цитата(iosifk @ Apr 16 2016, 12:57) *
А взять готовые цифровые стабилизаторы от Exar или от ADI слабо? И вроде еще у кого-то есть точно не помню...

Можно чуть подробнее?


Цитата(enshtein @ Apr 15 2016, 20:22) *
Без проблем. 10т.р. цена вопроса. Но как калькулятор не получится. Даете значение L , С и Rнагрузка получаете настроенную цифровую систему управления в виде разностного уравнения для конкретного случая

Судя по личной почте и топику видимо я не точно выразил свою проблему.
Мне надо на основе уже отлаженного регулятора его цифровой аналог, в смысле регулировочной характеристики. Т.е. сначала строится модель регулятора которая затем используется для построения программы цифрового регулятора. Основой для синтеза является не указанная мной аналоговая схема, а модель регулятора построенная на основе аналоговой схемы. В этом смысле я не зря упоминал как пример LabView + Embedded Module for ARM которая генерирует Си код на основе графического представления (блок схемы).
Нажмите для просмотра прикрепленного файла
Регулятора другой, взят как приме из статьи.
Где он будет использован это дело десятое.
AnatolyT
Попробую навскидку сформулировать, применить МК в вашей схеме. Берете контроллер с АЦП и ШИМ формирователем, заводите один выход ШИМ формирователя на ключ (требуется преобразовать уровни на транзисторах), второй выход ШИМ формирователя на синхронный ключ, выходы ШИМа запрограммированы в противофазе. Если диапазон регулирования выходного напряжения не от нуля то синхронный ключ не требуется и можно ограничиться диодом. Если не требуется ПИД регулирование заводите выходное напряжение вашего регулятора через резистивный делитель на вход АЦП контроллера, получится регулятор релейного типа или П-регулятор. Если требуется именно ПИД, используете в цепи обратной связи схему из Тицце Шенка на ОУ, требуется рассчитать постоянные интегрирования и дифференцирования. Программа по прерываниям от ШИМ формирователя запускает АЦП и изменяет параметр ШИМа в ту или другую стороны в зависимости от уставки, вот собственно и все. Можно построить ПИД регулятор численным методами программно, то есть без ОУ, сигнал с выхода регулятора подается на вход АЦП через делитель, отводите в области памяти кольцевой буфер и пишите туда отсчеты при каждом прерывании, одновременно в прерывании изменяете параметр ШИМа с учетом накопленных значений в буфере, то есть по сути то же интегрирование и дифференцирование.
wim
Цитата(gte @ Apr 19 2016, 14:52) *
мне надо не приводить к виду Kp+Ki/s+Kd*s, а надо получить цифровой регулятор с характеристикой близкой к характеристике аналогового PID, если это возможно.
Объясняю еще раз. Передаточная характеристика ПИД-регулятора (в общепринятой терминологии) имеет вид Kp+Ki/s+Kd*s. Ваша схема - это не ПИД-регулятор, это схема, условно говоря, с двумя нулями и тремя полюсами. Порядок передаточной характеристики более высокий. Поэтому просто так ее к "ПИД-регулятору" не привести.
gte
Цитата(wim @ Apr 19 2016, 16:09) *
Объясняю еще раз. Передаточная характеристика ПИД-регулятора (в общепринятой терминологии) имеет вид Kp+Ki/s+Kd*s. Ваша схема - это не ПИД-регулятор, это схема, условно говоря, с двумя нулями и тремя полюсами. Порядок передаточной характеристики более высокий. Поэтому просто так ее к "ПИД-регулятору" не привести.

Вы с Татьяной пока поспорьте про контенсатор С3
Нажмите для просмотра прикрепленного файла
который отличает схему от той схемы, что названа у Титце и Шенк как ПИД регулятор.


Если не договоритесь, я его вынесу в отдельное звено.

Какая разница классический он или нет. Меня интересует смогу я с моими минимальными затратами времени получить его цифровой аналог или нет.
wim
Цитата(gte @ Apr 19 2016, 17:15) *
смогу я с моими минимальными затратами времени получить его цифровой аналог или нет.
Сможете.
Tanya
Цитата(gte @ Apr 19 2016, 17:15) *
Вы с Татьяной пока поспорьте про контенсатор С3

Он у Вас сам собой получится из-за конечного быстродействия цифрового регулятора. Я его иногда ставлю для уменьшения высокочастотных шумов.
gte
Цитата(Tanya @ Apr 19 2016, 19:12) *
Он у Вас сам собой получится из-за конечного быстродействия цифрового регулятора. Я его иногда ставлю для уменьшения высокочастотных шумов.

Без этого конденсатора в моей схеме завал характеристики (после полки) начинается при частоте за 200 кГц с ним где-то от 8 кГц.
MikeSchir
Цитата(Tanya @ Apr 19 2016, 18:12) *
Я его иногда ставлю для уменьшения высокочастотных шумов.

И не только Вы rolleyes.gif Поскольку наличие пульсации на входе ШИМ компаратора с амплитудой, соизмеримой с амплитудой "пилы", приводит к самовозбуждению регулятора.
А делаете Вы это иногда Только потому, что полоса усилителя уже сильно "зарезана".
somebody111
Цитата(gte @ Apr 13 2016, 21:08) *
Привет Всем!

Есть отлаженные аналоговые PID. Хочется попробовать перевести их в цифровую форму, т.е. в Си код для МК, ARM например?
Схема подобно используемой на рисунке. Это из an-1162.pdf (International Rectifier).
Нажмите для просмотра прикрепленного файла
Работа разовая, а вариант исполнения регулятора достаточно редкий, поэтому хочется минимизировать затраты. С помощью каких программ это можно получить начальный код?
Например, с помощью LabView + Embedded Module for ARM?

Вам нужно составить передаточную функцию регулятора.Вспомните как она считается у инвертирующего усилителя:
Код
H(jw)=-R2/R1
.
R2-активное сопротивление в обратной связи. Это частный случай. В общем случае:
Код
H(jw)=-X2(jw)/X1(jw)

X2-комплексное сопротивление в обратной связи.
==
Приведу простой пример.В обратной связи кондёр. Его комплексное сопротивление X2(jw)=1/(jwC). Чтобы получить передаточную функцию, надо выполнить преобразование Лапласа. В нашем случае - это просто замена: s=jw. Отсюда передаточная функция:
Код
H(s)=-(1/sC)/R2=-1/(R2*C*s)=-1/(T*s)
.
Развернем формулу:
Код
Uвых/Uвх=-1/T*s
T*s*Uвых=-Uвх

Далее, надо перейти к диф.уру. Для этого надо вспомнить свойство обратного преобразования Лапласа. Конкретнее: если оператор Лапласа s стоит рядом с переменной, то при обратном преобразовании переменная заменяется на его производную. Например. s*Y(s) при обратном преобразовании превращается в y'(t):
Код
T*dUвых/dt=-Uвх.

Ну а дальше заменяешь производную на конечную разность:
Код
dUвых/dt=(Uвых(k+1)-Uвых(k))/dt
и выводишь Uвых(k+1) - это и есть выход твоего регулятора.Это и есть цифровая реализация интегрального регулятора
Короче говоря, в вашем случае надо посчитать эквивалентное комплексное сопротивление в на входе операционника и эквивалентное комплексное сопротивление в обратной связи. Думаю не имеет смысла разжовывать, как посчитать эквивалентное сопротивление двух последовательно соединенных резисторов
===
Есть другой способ. После того,как вычислил передаточную функцию, нужно применить формулу Тастина (в поиске найдёшь),а потом тоже самое - вывести Uвых(k+1).
gte
Цитата(somebody111 @ Apr 24 2016, 19:30) *
Вам нужно составить передаточную функцию регулятора.Вспомните как она считается у инвертирующего усилителя:
Код
H(jw)=-R2/R1
.
R2-активное сопротивление в обратной связи. Это частный случай. В общем случае:
Код
H(jw)=-X2(jw)/X1(jw)

X2-комплексное сопротивление в обратной связи.

Большое спасибо за помощь, как пройти этот этап в общем виде понятно. Думаю, что понятно как пройти и следующие этапы. Без деталей, в которых, правда, и "кроется дьявол". Со временем, возможно, придется пройти.
Но это будет тема другого топика.
Хотелось бы услышать советы по указанной теме. Какими инструментами?


somebody111
Там есть один единственный большой ньюанс - это преобразование непрерывного диф.уравнения в дискретное. Так же на примере.Нарисуйте на бумаге синусоиду с периодом 1 секунда. Это непрерывный сигнал,с которым работает ваша аналоговая схема. При цифровой реализации время дискретно. Шаг дискретизации не может стремиться к нулю как в теории и представляет какое-то конкретное число. Суть всей теории по выбору этого шага дискретизации сводится к тому,чтобы дискретизированный сигнал мало отличался от реального непрерывного(вспоминайте теорему Найквиста). Из нарисованной синусоиды выбирайте точки с шагом 0.5 секунды. Похоже на синусоиду выбранные точки? Нет, не похожи.Берите 0.25. Похоже - лучше, но не то и.т.п. Короче говоря, чем меньше шаг дискретизации, тем лучше, но частенько при программной реализации меньший шаг дискретизации требует более быстрый процессор. Чтобы решить эту проблему и была придумана формула Тастина. Она, хоть и усложняет, но позволяет немного снизить частоту выборки без потери точности. В вашем случае этот ньюанс исключен и делайте по-простому y'=[y(k+1)-y(k)]/dt Это единственный подводный камень, который к вам не имеет никакого отношения. Можно сделать еще точнее, но не хочу - для достаточно простой задачи забивать голову матлабом - не вариант
А в плане инструментов...что вас интересует? Как написать программу,которая это реализует?Пожалуйста,цифровое интегрирование
Код
double x,y;
void calc(void)
{
   y=y+x*dT;
}

Функция calc() вызывается всякий раз, когда ацп,который принимает ваш аналоговый сигнал, завершает аналого-цифровое преобразование. Сам АЦП начинает аналого-цифровое преобразование всякий раз,когда его таймер равен 0
===
Если не секрет, то зачем вас переводить нормальную аналоговую схему в цифровую, если при этом ничего не изменится?
gte
Цитата(somebody111 @ Apr 24 2016, 21:53) *
В вашем случае этот ньюанс исключен и делайте по-простому y'=[y(k+1)-y(k)]/dt Это единственный подводный камень,
Исключен, не исключен мне пока трудно судить, да и регуляторов должно быть 2-3 в одном процессоре плюс запас на отработку критических ситуаций.
Цитата
А в плане инструментов...что вас интересует? Как написать программу,которая это реализует?Пожалуйста,цифровое интегрирование..

Написать, выбрать процессор, оценить время выполнение, скорректировать, сделать или купить "железо" как то отладить, потом вручную снять АЧХ и ФЧХ или начать отлаживать совместно с объектом, убедится что не совсем то и, возможно, пойти по новой. Так?
Цитата
Если не секрет, то зачем вас переводить нормальную аналоговую схему в цифровую, если при этом ничего не изменится?

В каком смысле не изменится? В смысле характеристик регулятора? Да, они и так устраивают. Но есть и другие аспекты.
somebody111
Технически подойдёт любой процессор, у которого есть на борту АЦП. Если лень программно реализовывать ШИМ, то и с ШИМом на борту. Производители - microchip,texas instruments,atmel.
gte
Цитата(somebody111 @ Apr 25 2016, 14:08) *
Технически подойдёт любой процессор, у которого есть на борту АЦП. Если лень программно реализовывать ШИМ, то и с ШИМом на борту. Производители - microchip,texas instruments,atmel.

Понятно, спасибо за полезные советы, как раз ATtyni остались не использованные cranky.gif .
somebody111
Цитата
Написать, выбрать процессор, оценить время выполнение, скорректировать, сделать или купить "железо" как то отладить, потом вручную снять АЧХ и ФЧХ или начать отлаживать совместно с объектом, убедится что не совсем то и, возможно, пойти по новой. Так?

Ну смотрите, время выполнения оценивается просто в режиме отладки. Перед функцией, которая все это будет считать, запускаете аппаратный таймер в процессоре, а в конце функции ставите точку останова. По кол-ву натиканных значений легко определяется время выполнения. Если делать на ассемблере, то это считается все на бумажке. Забегая вперед могу сразу вам сказать, что если речь идет только о данном регуляторе для ШИМа, время выполнения будет ограничено периодом ШИМа, т.е. функция должна полностью просчитаться до того, как пила ШИМа достигнет максимума или достигнет нуля.Даже могу сказать больше - выбранный вами период ШИМа и будет реальный шагом дискретизации dt
Насчёт наладки.
Здесь несколько вариантов.
1. Вы зашиваете настройки в процессор только 1 раз при программировании. Соответственно, сторонние наладчики с этим ничего не сделают. При наладке - это проблема, потому что придется либо это учитывать схемотехнически путем введения различного рода перемычек, либо установкой колодки,когда вы можете вынуть процессор- перешить-ткнуть обратно. Я очень давно так делал, но из-за того, что изделие работало в условиях постоянной вибрации приходилось после наладки снимать колодку и уже железно впаивать процессор.
2. Вы предоставляется наладчикам некий интерфейс, который позволяет эти настройки менять и отображать. Традиционно такая задача решается 2-мя способами: либо ставятся кнопочки с LCD -дисплеем, либо через компьютер через разные интерфейсы типа uart-rs232-usb, uart-ethernet, ethernet-ethernet, can-usb и пр. они зашиваются. Библиотеки для работы с дисплеями и интерфейсами, как правило, качаются с сайта-производителя.
Herz
Цитата(gte @ Apr 25 2016, 17:57) *
Понятно, спасибо за полезные советы, как раз ATtyni остались не использованные cranky.gif .

Странная реакция. Человек Вам изо всех сил помочь пытается, а Вы ему "вигвамы рисуете"...
gte
Цитата(Herz @ Apr 26 2016, 01:43) *
Странная реакция. Человек Вам изо всех сил помочь пытается, а Вы ему "вигвамы рисуете"...

Человек пытается помочь рассказывая про то что главным критерием выбора МК для регулятора с ПИД является наличие ЦАП на борту. Или о том, что схему данного ПИД можно представить в виде инвертирующего усилителя, или как посчитать время выполнения программы в МК. Зачем здесь пересказывать банальности которые, к тому же, не имеют отношения к теме топика? Я уже вежливо просил не продолжать в таком ключе.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.