|
Перевести аналоговый PID в цифровой, Какими инструментами? |
|
|
|
Apr 13 2016, 18:08
|
Гуру
     
Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613

|
Привет Всем! Есть отлаженные аналоговые PID. Хочется попробовать перевести их в цифровую форму, т.е. в Си код для МК, ARM например? Схема подобно используемой на рисунке. Это из an-1162.pdf (International Rectifier).
Работа разовая, а вариант исполнения регулятора достаточно редкий, поэтому хочется минимизировать затраты. С помощью каких программ это можно получить начальный код? Например, с помощью LabView + Embedded Module for ARM?
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 35)
|
Apr 14 2016, 13:22
|
Гуру
     
Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613

|
Цитата(Tanya @ Apr 14 2016, 15:30)  Скорее всего. Это обычный ПИД-регулятор на одном ОУ. Если лень самостоятельно выводить формулы, можно их подсмотреть у Титце с Шенком. Увы, подсмотреть не удастся (внимательно посмотрите на схему), а времени всегда не хватает. То же и с вариантом "отдать на сторону". Проверку и отладку все равно надо делать сразу. Вариант подобный LabView + Embedded Module for ARM интересен тем, что исходный вариант можно проверить в симуляторе и работу растянуть по времени, так как проблема не первой срочности. Цитата(Herz @ Apr 14 2016, 15:20)  Не соглашусь. Что такого необычного в этом варианте? Тем, что математика на данный регулятор не описана в литературе, придется во всем разбираться.
|
|
|
|
|
Apr 14 2016, 15:31
|
Гуру
     
Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613

|
Цитата(wim @ Apr 14 2016, 18:17)  Математика как раз описана: http://www.ti.com/download/trng/docs/semin...pic_7_Hagen.pdfНо там, видимо, "многобукаф", а хочется как онлайн-калькулятор закона Ома.  Конечно хочется  , но я реалист. Спасибо за подсказку, это в любом случае облегчит задачу. P.S. По поводу калькулятора. Наверняка в controlSUITE есть. Но букв не мало. Цитата(Tanya @ Apr 14 2016, 18:18)  Скажите, что я проглядела. Ничего, если схему привести к двум сопротивления. Один на входе, один в обратной связи ОУ.
|
|
|
|
|
Apr 15 2016, 02:10
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602

|
Цитата(gte @ Apr 14 2016, 16:22)  Тем, что математика на данный регулятор не описана в литературе, придется во всем разбираться. Этой математике вчера в обед было лет 45-46 точно(с 1970 года), а так и все 100.
|
|
|
|
|
Apr 15 2016, 16:22
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 25-09-13
Пользователь №: 78 472

|
Без проблем. 10т.р. цена вопроса. Но как калькулятор не получится. Даете значение L , С и Rнагрузка получаете настроенную цифровую систему управления в виде разностного уравнения для конкретного случая (для управления по току) еще 10т.р. и получаете еще одно разностное уравнение для двухконтурной подчиненной системы управления. Забиваете эти уравнения в контроллер (очень просто) например в ARM и будет вам счастье. Получите полноценный buc-конвертер. Если добавить еще 10т.р. то достаточно дать Uin, Uout, Rнагрузки;
Сообщение отредактировал enshtein - Apr 15 2016, 16:27
|
|
|
|
|
Apr 17 2016, 10:41
|
Гуру
     
Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613

|
Цитата(iosifk @ Apr 16 2016, 12:57)  А взять готовые цифровые стабилизаторы от Exar или от ADI слабо? И вроде еще у кого-то есть точно не помню... Можно чуть подробнее? Цитата(enshtein @ Apr 15 2016, 20:22)  Без проблем. 10т.р. цена вопроса. Но как калькулятор не получится. Даете значение L , С и Rнагрузка получаете настроенную цифровую систему управления в виде разностного уравнения для конкретного случая Судя по личной почте и топику видимо я не точно выразил свою проблему. Мне надо на основе уже отлаженного регулятора его цифровой аналог, в смысле регулировочной характеристики. Т.е. сначала строится модель регулятора которая затем используется для построения программы цифрового регулятора. Основой для синтеза является не указанная мной аналоговая схема, а модель регулятора построенная на основе аналоговой схемы. В этом смысле я не зря упоминал как пример LabView + Embedded Module for ARM которая генерирует Си код на основе графического представления (блок схемы).
Регулятора другой, взят как приме из статьи. Где он будет использован это дело десятое.
|
|
|
|
|
Apr 17 2016, 11:39
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 29-03-10
Пользователь №: 56 269

|
Попробую навскидку сформулировать, применить МК в вашей схеме. Берете контроллер с АЦП и ШИМ формирователем, заводите один выход ШИМ формирователя на ключ (требуется преобразовать уровни на транзисторах), второй выход ШИМ формирователя на синхронный ключ, выходы ШИМа запрограммированы в противофазе. Если диапазон регулирования выходного напряжения не от нуля то синхронный ключ не требуется и можно ограничиться диодом. Если не требуется ПИД регулирование заводите выходное напряжение вашего регулятора через резистивный делитель на вход АЦП контроллера, получится регулятор релейного типа или П-регулятор. Если требуется именно ПИД, используете в цепи обратной связи схему из Тицце Шенка на ОУ, требуется рассчитать постоянные интегрирования и дифференцирования. Программа по прерываниям от ШИМ формирователя запускает АЦП и изменяет параметр ШИМа в ту или другую стороны в зависимости от уставки, вот собственно и все. Можно построить ПИД регулятор численным методами программно, то есть без ОУ, сигнал с выхода регулятора подается на вход АЦП через делитель, отводите в области памяти кольцевой буфер и пишите туда отсчеты при каждом прерывании, одновременно в прерывании изменяете параметр ШИМа с учетом накопленных значений в буфере, то есть по сути то же интегрирование и дифференцирование.
|
|
|
|
|
Apr 19 2016, 14:15
|
Гуру
     
Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613

|
Цитата(wim @ Apr 19 2016, 16:09)  Объясняю еще раз. Передаточная характеристика ПИД-регулятора (в общепринятой терминологии) имеет вид Kp+Ki/s+Kd*s. Ваша схема - это не ПИД-регулятор, это схема, условно говоря, с двумя нулями и тремя полюсами. Порядок передаточной характеристики более высокий. Поэтому просто так ее к "ПИД-регулятору" не привести. Вы с Татьяной пока поспорьте про контенсатор С3
который отличает схему от той схемы, что названа у Титце и Шенк как ПИД регулятор.  Если не договоритесь, я его вынесу в отдельное звено. Какая разница классический он или нет. Меня интересует смогу я с моими минимальными затратами времени получить его цифровой аналог или нет.
|
|
|
|
|
Apr 19 2016, 18:18
|
и по нечётным радист
   
Группа: Участник
Сообщений: 994
Регистрация: 3-03-09
Из: Москва, Кунцево
Пользователь №: 45 598

|
Цитата(Tanya @ Apr 19 2016, 18:12)  Я его иногда ставлю для уменьшения высокочастотных шумов. И не только Вы  Поскольку наличие пульсации на входе ШИМ компаратора с амплитудой, соизмеримой с амплитудой "пилы", приводит к самовозбуждению регулятора. А делаете Вы это иногда Только потому, что полоса усилителя уже сильно "зарезана".
--------------------
|
|
|
|
|
Apr 24 2016, 16:30
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 2-03-11
Пользователь №: 63 341

|
Цитата(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).
Сообщение отредактировал somebody111 - Apr 24 2016, 16:39
|
|
|
|
|
Apr 24 2016, 17:44
|
Гуру
     
Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613

|
Цитата(somebody111 @ Apr 24 2016, 19:30)  Вам нужно составить передаточную функцию регулятора.Вспомните как она считается у инвертирующего усилителя: Код H(jw)=-R2/R1 . R2-активное сопротивление в обратной связи. Это частный случай. В общем случае: Код H(jw)=-X2(jw)/X1(jw) X2-комплексное сопротивление в обратной связи. Большое спасибо за помощь, как пройти этот этап в общем виде понятно. Думаю, что понятно как пройти и следующие этапы. Без деталей, в которых, правда, и "кроется дьявол". Со временем, возможно, придется пройти. Но это будет тема другого топика. Хотелось бы услышать советы по указанной теме. Какими инструментами?
|
|
|
|
|
Apr 24 2016, 18:53
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 2-03-11
Пользователь №: 63 341

|
Там есть один единственный большой ньюанс - это преобразование непрерывного диф.уравнения в дискретное. Так же на примере.Нарисуйте на бумаге синусоиду с периодом 1 секунда. Это непрерывный сигнал,с которым работает ваша аналоговая схема. При цифровой реализации время дискретно. Шаг дискретизации не может стремиться к нулю как в теории и представляет какое-то конкретное число. Суть всей теории по выбору этого шага дискретизации сводится к тому,чтобы дискретизированный сигнал мало отличался от реального непрерывного(вспоминайте теорему Найквиста). Из нарисованной синусоиды выбирайте точки с шагом 0.5 секунды. Похоже на синусоиду выбранные точки? Нет, не похожи.Берите 0.25. Похоже - лучше, но не то и.т.п. Короче говоря, чем меньше шаг дискретизации, тем лучше, но частенько при программной реализации меньший шаг дискретизации требует более быстрый процессор. Чтобы решить эту проблему и была придумана формула Тастина. Она, хоть и усложняет, но позволяет немного снизить частоту выборки без потери точности. В вашем случае этот ньюанс исключен и делайте по-простому y'=[y(k+1)-y(k)]/dt Это единственный подводный камень, который к вам не имеет никакого отношения. Можно сделать еще точнее, но не хочу - для достаточно простой задачи забивать голову матлабом - не вариант А в плане инструментов...что вас интересует? Как написать программу,которая это реализует?Пожалуйста,цифровое интегрирование Код double x,y; void calc(void) { y=y+x*dT; } Функция calc() вызывается всякий раз, когда ацп,который принимает ваш аналоговый сигнал, завершает аналого-цифровое преобразование. Сам АЦП начинает аналого-цифровое преобразование всякий раз,когда его таймер равен 0 === Если не секрет, то зачем вас переводить нормальную аналоговую схему в цифровую, если при этом ничего не изменится?
Сообщение отредактировал somebody111 - Apr 24 2016, 19:00
|
|
|
|
|
Apr 25 2016, 10:38
|
Гуру
     
Группа: Свой
Сообщений: 2 318
Регистрация: 13-02-05
Из: Липецкая область
Пользователь №: 2 613

|
Цитата(somebody111 @ Apr 24 2016, 21:53)  В вашем случае этот ньюанс исключен и делайте по-простому y'=[y(k+1)-y(k)]/dt Это единственный подводный камень, Исключен, не исключен мне пока трудно судить, да и регуляторов должно быть 2-3 в одном процессоре плюс запас на отработку критических ситуаций. Цитата А в плане инструментов...что вас интересует? Как написать программу,которая это реализует?Пожалуйста,цифровое интегрирование.. Написать, выбрать процессор, оценить время выполнение, скорректировать, сделать или купить "железо" как то отладить, потом вручную снять АЧХ и ФЧХ или начать отлаживать совместно с объектом, убедится что не совсем то и, возможно, пойти по новой. Так? Цитата Если не секрет, то зачем вас переводить нормальную аналоговую схему в цифровую, если при этом ничего не изменится? В каком смысле не изменится? В смысле характеристик регулятора? Да, они и так устраивают. Но есть и другие аспекты.
|
|
|
|
|
Apr 25 2016, 22:29
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 2-03-11
Пользователь №: 63 341

|
Цитата Написать, выбрать процессор, оценить время выполнение, скорректировать, сделать или купить "железо" как то отладить, потом вручную снять АЧХ и ФЧХ или начать отлаживать совместно с объектом, убедится что не совсем то и, возможно, пойти по новой. Так? Ну смотрите, время выполнения оценивается просто в режиме отладки. Перед функцией, которая все это будет считать, запускаете аппаратный таймер в процессоре, а в конце функции ставите точку останова. По кол-ву натиканных значений легко определяется время выполнения. Если делать на ассемблере, то это считается все на бумажке. Забегая вперед могу сразу вам сказать, что если речь идет только о данном регуляторе для ШИМа, время выполнения будет ограничено периодом ШИМа, т.е. функция должна полностью просчитаться до того, как пила ШИМа достигнет максимума или достигнет нуля.Даже могу сказать больше - выбранный вами период ШИМа и будет реальный шагом дискретизации dt Насчёт наладки. Здесь несколько вариантов. 1. Вы зашиваете настройки в процессор только 1 раз при программировании. Соответственно, сторонние наладчики с этим ничего не сделают. При наладке - это проблема, потому что придется либо это учитывать схемотехнически путем введения различного рода перемычек, либо установкой колодки,когда вы можете вынуть процессор- перешить-ткнуть обратно. Я очень давно так делал, но из-за того, что изделие работало в условиях постоянной вибрации приходилось после наладки снимать колодку и уже железно впаивать процессор. 2. Вы предоставляется наладчикам некий интерфейс, который позволяет эти настройки менять и отображать. Традиционно такая задача решается 2-мя способами: либо ставятся кнопочки с LCD -дисплеем, либо через компьютер через разные интерфейсы типа uart-rs232-usb, uart-ethernet, ethernet-ethernet, can-usb и пр. они зашиваются. Библиотеки для работы с дисплеями и интерфейсами, как правило, качаются с сайта-производителя.
Сообщение отредактировал somebody111 - Apr 25 2016, 22:36
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|