Страница 1 из 1

Практическое использование регулятора.

Добавлено: 29 дек 2016, 16:39
БлудныйКот
Добрый день!
Наконец то я нашёл сайт где хоть немного описана пракитческая реализация П И Д контроллера.
Так как новичок в теме мк, тяжеловато это всё понимать.
Хотел бы задать вопросы практикам.

Делаю систему систему регулирования током. Обычный шим который с высокой частотой качает заданное значение тока на нагрузке. Т.к. сопротивление нагрузки может меняться, то хотелось бы написать такой регулятор, который бы автоматически подстраивал значение ШИМ.
Наверное это обычный ПИ регулятор. Так как не требуется высокой скорости регулирования, Д составляющая не нужна.
Использую датчик тока на эффекте холла, он работает отлично(уже тестил) показания тока с него снимаю с помощью АЦП. Показания довольно точные.
Теперь остаётся только написать регулятор.

Вопросы следующего характера:
1.Какую частоту обсчёта системы выбрать? Хотелось бы конечно около 10мс, боюсь что если выберу 1мс то функции обновления экрана и др. которые выполняются в loop будут притормаживать из за того что в прерываниях будет считаться другой код. И насколько важно обновлять данные регулятора с постоянной частотой? Могу ли я это делать в главном цикле loop.

2. Как считаются коэффициенты регулятора. Начать думаю стоит с П регулятора. И хотелось бы использовать только целочисленные типы.


Например у меня есть задание тока от 0 до 100 на выходе я хочу формировать ШИМ от 0 до 2047 и сигнал с датчика тока я получаю в формате от 0 - 1024.

Re: Практическое использование регулятора.

Добавлено: 29 дек 2016, 17:21
Эдуард
Здравствуйте!
Я так понял, Вы делаете стабилизатор тока. Мне кажется, Вам надо внимательно перечитать уроки 39 и 40. На многие вопросы там ответы есть.

Частота пересчета данных регулятора должна быть постоянной. Постоянная времени работы интегрального регулятора определяется временной дискретностью работы регулятора и интегральным коэффициентом. Плавать частота не должна.
Интегральное звено – обязательно. Без него будет большая погрешность регулирования. Скорее можно обойтись без пропорционального звена.

Только о целочисленном вычислении речи идти не может. При расчете интегральной составляющей - обязательно формат с дробной частью. Другое дело, что целочисленное вычисление может быть преобразовано в вычисление с фиксированной запятой. Т.е. без плавающей запятой обойтись можно, но числа должны быть дробными. Так я сделал математику контроллера элемента Пельтье на PIC контроллере. Она написана на Ассемблере без использования плавающей запятой. Но это отдельная тема.

Числа должны быть дробными. Ошибка меньше 0 должна накапливаться в интеграторе, не допустимо, чтобы она терялась. Например, при коэффициенте 0,1 и ошибке рассогласования 1, единица в целой части появится через 10 временных дискретин регулятора и отразится на ШИМ. Т.е. коэффициентом можно менять динамические параметры интегрального регулятора.

По поводу частоты пересчета данных регулятора. Она во многом определяет быстродействие регулятора. Вы должны отталкиваться от характера возмущающих воздействий, от скорости влияния их на выход, от требований к скорости регулирования.

Напишите подробнее о Вашем устройстве. Что подключаете к выходу. Как меняется нагрузка. Насколько страшно, что на короткое время значение тока превысит заданное.

Re: Практическое использование регулятора.

Добавлено: 29 дек 2016, 17:26
БлудныйКот
Выкладываю фото как я представляю структурную схему моей системы:
Изображение

Где:
Iзад - ток задания
Ioc - ток обратной связи.
deltaI - Ошибка по току
ДТ - Датчик тока
-512 - Вычитаю среднюю точку уже внутри МК из показаний датчика тока
Р - Регулятор что будет внутри него не знаю , на выходе точно ШИМ.
ОУ - Объект управления (Мой шим драйвер с нагрузкой).

Re: Практическое использование регулятора.

Добавлено: 29 дек 2016, 17:30
Эдуард
Что будете подключать к выходу.

Re: Практическое использование регулятора.

Добавлено: 29 дек 2016, 17:31
Эдуард
Какая частота ШИМ? Есть ли фильтр? Какая нагрузка?

Re: Практическое использование регулятора.

Добавлено: 29 дек 2016, 17:40
БлудныйКот
Вы меня немного опередили пока писал второе сообщение. Если возможно на этом форуме, включите пожалуйста пользователям возможность редактирования своих сообщений.
Хотел добавить пост выше к сообщению в шапке темы, не получилось поэтому пришлось добавить еще одно сообщение.

В целочисленном виде я имел ввиду флоат к инту: 1.00(float) в инте 100(int). т.е. число в формате 0.01(float) = 1 (int).

Эдуард писал(а):Что будете подключать к выходу.

К выходу буду подключать два электрода опущенные в хромовый раствор.

Эдуард писал(а):Какая частота ШИМ? Есть ли фильтр? Какая нагрузка?

Частота ШИМ 40кГц (отдельный модуль управляемый по УАРТ с током до 100А).
Фильтр есть только по выходу датчика тока.
Нагрузка наверное чисто активная.

Re: Практическое использование регулятора.

Добавлено: 29 дек 2016, 17:52
БлудныйКот
Спасибо за ответы, читаю уроки 39, 40.

Re: Практическое использование регулятора.

Добавлено: 29 дек 2016, 17:56
Эдуард
Напишите 5 сообщений, и у Вас автоматически появится возможность редактировать сообщения.

Насколько я понял. Быстродействие высокое Вам не требуется, важна точность и устойчивость. Также не страшны короткие перерегулирования. Я бы рекомендовал сделать следующее:

Создать скелет программы, цикл регулятора с постоянной частотой и регулирующий элемент. В Вашем случае это ШИМ. Должна быть переменная, которая перегружается с определенным периодом в ШИМ через UART.

Дальше проверить вход регулирующего элемента на реальном объекте. Задавать в программе разные значения и убедиться, что все отрабатывается, меняется реальный ток, мощность…

Реализовать измерение выходного тока. Подключить датчик, считать, усреднить. В результате должна появиться переменная, содержащая выходной ток. Ее надо проверить на реальном объекте. Задавать в программе разные значения ШИМ измерять реальный ток, переменную выводить в монитор последовательного порта и убедиться, что все измеряется правильно.

Только после этого можно делать регулятор. Теперь Вы будете работать только с двумя переменными регулирующий элемент (ШИМ) и измеренное значение тока. Можете для начала сделать простой регулятор – ток больше заданного минус 1 от ШИМ, ток меньше заданного + 1 к ШИМ. И посмотреть как все будет работать. А дальше делать нормальный регулятор. Я думаю, Вам хватит интегрального.

Посмотрите внимательно как я разрабатываю Ардуино-контроллер для элемента Пельтье. У Вас должна быть примерно такая последовательность.

Re: Практическое использование регулятора.

Добавлено: 29 дек 2016, 18:00
Эдуард
На счет целочисленного, плавающего форматов потом спросите. Лучше в отдельной теме. Я объясню.

Re: Практическое использование регулятора.

Добавлено: 29 дек 2016, 18:11
БлудныйКот
Спасибо за ответы. 39 урок прочитал и показалось всё также просто как в теории. Пошёл писать, может чуть позже вечерком отпишусь. Постараюсь успеть.

Re: Практическое использование регулятора.

Добавлено: 30 дек 2016, 13:42
БлудныйКот
Можете меня поздравить, запилил просто И-регулятор, по вашему туториалу. Написал простенькую прошивку. Работает, я и не ожидал что всё настолько просто, первый мой регулятор и заработал сразу. Вот, что значит когда хорошо объяснено.
Период обсчёта выбрал 20мс. У меня максимальное значение скважности +-2047. Коэф И составляющей взял 1.0.
Так скорость выхода тока на установившееся значение около 2-4 секунд. И значение тока держит при изменении нагрузки.
Пока только тестил при токе задания в пределах 10А.
Чуть позже еще проверю на устойчивость и может быть выложу видео работы.

Спасибо Эдуарду(админу) за помощь и наставления.
Буду допиливать дальше. Есть еще много вопросов, не касающихся этой темы, но всё попорядку.

Re: Практическое использование регулятора.

Добавлено: 30 дек 2016, 15:21
Эдуард
Рад, что помог. Но Вы не обольщайтесь. Регуляторы для подобных устройств делать проще всего. Не важна скорость, не страшны перерегулирования, нагрузка никогда резко не меняется.
Обычно для гальванических процессов требуется еще измерять напряжение на выходе, как показатель состояния электродов и раствора. Иногда вычисляют сопротивление нагрузки для той же цели.

Re: Практическое использование регулятора.

Добавлено: 30 дек 2016, 16:49
БлудныйКот
Пробовал коэф. И-составляющей ставить 10 и 50. Не смотрел какое перерегулирование, но система работает также четко и быстрее во много раз и ее не качает.


Эдуард писал(а):Рад, что помог. Но Вы не обольщайтесь. Регуляторы для подобных устройств делать проще всего. Не важна скорость, не страшны перерегулирования, нагрузка никогда резко не меняется.
Обычно для гальванических процессов требуется еще измерять напряжение на выходе, как показатель состояния электродов и раствора. Иногда вычисляют сопротивление нагрузки для той же цели.


Вы правы, именно это мне и нужно.
Потому,что со временем они вроде как могут покрываться "налётом" и системе нужно будет это определить.
Могли бы вы поделиться информацией как мне реализовать эти функции?

Также есть мечта сделать DC/DC преобразователь buck/boost полностью управляемый от МК.

Кстати с наступающими праздниками! Всех благ и успехов в новом году!

Re: Практическое использование регулятора.

Добавлено: 30 дек 2016, 20:27
Эдуард
Спасибо! И Вам счастливого Нового года!

Напряжение надо как-то подать на аналоговый вход. Если земля платы Ардуино подключена к минусу преобразователя, то через резисторный делитель. Если нет, то через датчик с гальванической развязкой.

Как измерить напряжение возьмите из урока 38. Только в вашей системе оно относительно земли измеряется. Не надо вычитать из напряжения питания.

Код: Выделить всё

// вычисление напряжения
    measureU = (float)(averageU / MEASURE_PERIOD) * koeffU;

Конечно резисторный делитель пересчитать и изменить koeffU.

На счет коэффициентов регулятора. Главный критерий устойчивости - ШИМ. Выведите его значение на компьютер. В устойчивом состоянии в идеальном случае он должен меняться на 1.

Re: Практическое использование регулятора.

Добавлено: 30 дек 2016, 20:39
БлудныйКот
Эдуард писал(а):Спасибо! И Вам счастливого Нового года!

Напряжение надо как-то подать на аналоговый вход. Если земля платы Ардуино подключена к минусу преобразователя, то через резисторный делитель. Если нет, то через датчик с гальванической развязкой.

Как измерить напряжение возьмите из урока 38. Только в вашей системе оно относительно земли измеряется. Не надо вычитать из напряжения питания.

Код: Выделить всё

// вычисление напряжения
    measureU = (float)(averageU / MEASURE_PERIOD) * koeffU;

Конечно резисторный делитель пересчитать и изменить koeffU.

На счет коэффициентов регулятора. Главный критерий устойчивости - ШИМ. Выведите его значение на компьютер. В устойчивом состоянии в идеальном случае он должен меняться на 1.


Спасибо. Как мне распознать то, что мои электроды обросли накипью? Только если ток, при определённом напряжении не будет достигать нужного значения?

Еще вопрос. Как изменить регулятор, если у меня 2 канала шима и один датчик тока? Хотелось бы чтобы регулятор распределял ток между каналами равномерно, а сумма по обеим каналам давала ток задания.
Датчик тока стоит по питанию драйвера.
Например задание тока 10А и следовательно на каждом канале по 5А.

Предыдущий пример работает с одним каналом шима.

Re: Практическое использование регулятора.

Добавлено: 30 дек 2016, 23:37
Эдуард
Если ток не будет достигать заданного значения при максимальном напряжении, то это называется перегрузка стабилизатора тока и надо ее отображать миганием светодиода. Но это уже крайний случай, когда система не работоспособна.

      - Перегрузка стабилизатора напряжения это когда сопротивление нагрузки слишком маленькое, и он не может обеспечить ток.
      - Перегрузка стабилизатора тока – когда сопротивление слишком большое, и он не может обеспечить напряжение.

Для того, чтобы предсказать этот случай необходимо измерять выходное напряжение. При том же токе напряжение будет повышаться по мере зарастания электродов. Зная, максимальное напряжение, которое способен выдать стабилизатор тока можно предсказать, какой остался ресурс электродов. Лучше вывести и напряжение, и относительный показатель в процентах от максимального напряжения. Надо только понимать, что по мере износа электродов они зарастают быстрее и зависимость оставшегося ресурса и выходного напряжения не линейна. Можно определить зависимость на практике и, если она стабильна, то скорректировать.

Можно еще вычислять сопротивление нагрузки. Но на практике, используют напряжение. К нему все привыкли, оно легко измеряется стрелочными приборами. Например, в катодной защите критерием состояния анодных электродов по ГОСТ является напряжение.

По поводу датчика тока я не понял. Выходы ШИМов объединяются? Нагрузка общая? Если да, то датчик ставится в цепь общей нагрузки. Ведь надо стабилизировать ток через нагрузку.

Re: Практическое использование регулятора.

Добавлено: 04 янв 2017, 11:56
БлудныйКот
Эдуард писал(а):По поводу датчика тока я не понял. Выходы ШИМов объединяются? Нагрузка общая? Если да, то датчик ставится в цепь общей нагрузки. Ведь надо стабилизировать ток через нагрузку.


Думаю что запаралеллить 2 выхода у меня врятли получится, боюсь что если две вертикали разных каналов откроются в противофазе то будет КЗ.

Драйвер который я использую имеет два независимых выхода для подключения двигателей. Т.е. к нему можно подключить два двигателя постоянного тока(две нагрузки) и управлять независимо. (В предыдущем тесте-знакомстве с И-регулятором я использовал только один выход и всё заработало)
Т.е. сейчас задача такая используя датчик тока только по питанию управлять 2 каналами драйвера пропорционально.
В лучшем случае мне хотелось бы поставить только один датчик тока только по питанию драйвера. И сделать распределение тока между каналами пропорционально.

Нагрузка раздельная.
Кажется, что вариант который я хочу сделать с одним датчиком тока на 2 канала будет не очень. И не совсем представляю как мне шим распределять между каналами? Просто подавать равное значение ШИМ на оба канала а И-регулятор сам стабилизирует ток питания.

Re: Практическое использование регулятора.

Добавлено: 04 янв 2017, 12:50
Эдуард
Нарисуйте схему подключения нагрузки или нагрузок к 2 ШИМ, укажите как текут токи и где надо стабилизировать ток. Не понятно. Если 2 ШИМ не работают параллельно, то и нагрузка общей не может быть. У вас 2 гальванические ванны?

Re: Практическое использование регулятора.

Добавлено: 06 янв 2017, 10:52
БлудныйКот
Две отдельных ванны, в которых будет погружена симметричная нагрузка. По крайне мере я надеюсь на это. Шим драйвер предназначен для управления 2мя двигателями постоянного тока(ДПТ) независимо. Т.е. ШИМ драйвер имеет 4 конца. Где два конца M1A(+) M1B(-) идут на первую пару електродов, и M2A(+) и M2B(-) идут на вторую пару электродов.

Re: Практическое использование регулятора.

Добавлено: 06 янв 2017, 13:35
Эдуард
Какой ток надо стабилизировать?
Я думаю надо стабилизировать ток для каждой ванны (каждой нагрузки) отдельно. Если стабилизировать общий ток, то токи в ваннах будут разные. Состояние электродов разное, растворы могут быть разные, т.е. разное сопротивление. Токи наверняка перекосит.
Может лучше поставить отдельные датчики тока на каждую ванну.

Re: Практическое использование регулятора.

Добавлено: 06 янв 2017, 14:01
БлудныйКот
Эдуард писал(а):Какой ток надо стабилизировать?
Я думаю надо стабилизировать ток для каждой ванны (каждой нагрузки) отдельно. Если стабилизировать общий ток, то токи в ваннах будут разные. Состояние электродов разное, растворы могут быть разные, т.е. разное сопротивление. Токи наверняка перекосит.
Может лучше поставить отдельные датчики тока на каждую ванну.


Вы правы, я так уже и сделал. Щас тестирую и вроде работает. Добавил П состовляющую. Теперь у меня ПИ-регулятор.
Пришлось добавить на выходные каналы датчиков тока - емкости для того чтобы сгладить пульсации тока и подавать фильтрованные значение тока, а не ловить случайные. Т.к. пока что тестирую на резисторах, и форма тока треугольная с частотой 40кГц. Частота обсчёта системы 0.5кГц, ток мерию с такой же частотой по обоим каналам.

Пока вроде всё хорошо, вчера какие то глюки система ловила, но сегодня всё нормально. Интересно даже, что это было. Смотрю на систему и не верится, что она работает.

Такой вопрос возник. Если у меня есть допустим 2 прерывания. Одно по таймеру другое по событию на ноге. Что будет если на прерывание по таймеру наложится прерывание по событию на ноге или наоборот?
В прерывании по таймеру есть код, и в прерывании по ноге есть код. Допустим, что выполнилось половина кода в прерывании по ноге и в этот момент возникло прерывание по таймеру. Что будет дальше? После выполнения прерывания по таймеру, программа вернется в прерывание по ноге и продолжит ли выполнять код дальше?

Буду продолжать писать пользовательский интерфейс. Вы мне очень сильно помогли, разобраться с регуляторами было жизненно необходимо. Спасибо за ваш труд. Я наверное замучал вас вопросами, и не совсем понятно еще пишу.

Re: Практическое использование регулятора.

Добавлено: 06 янв 2017, 15:45
Эдуард
По поводу того, что замучил вопросами, не беспокойся. Я только раскручиваю форум и мне нужен контент.

Хороший стиль - в системе должно быть только одно аппаратное прерывание. Это прерывание от таймера цикла с максимальной частотой. В твоем случае - прерывание с частотой 0,5 кГц (период 2 мс). А в этом цикле надо опрашивать вывод микроконтроллера с фильтрацией, например, моя библиотека Button.h. Использовать аппаратное прерывание для вывода можно только для сигналов со своей платы: другого микроконтроллера, периферийной микросхемы. Дело в том, что прерывание вывода работает с защелкой уровня сигнала. Достаточно короткого импульса и он взведет триггер прерывания, и прерывание будет сформировано. Может даже взвестись от помех на земле собственной платы. Я практически никогда не использую аппаратные прерывания выводов. К тому же на выводах, как правило, медленные сигналы, которые можно опросить программно.

По поводу конфликтов прерываний. Я специализируюсь на PIC контроллерах, ATmega знаю не очень хорошо. Но обычно во всех микроконтроллерах это делается так.
Приходит несколько сигналов аппаратных прерываний. Они запоминаются каждое на своем триггере и поступают на внутреннюю логику контроллера, в которой каждому отведен свой приоритет. Вызывается самое приоритетное прерывание. Автоматически сбрасывается флаг разрешения прерываний, т.е. все прерывания в микроконтроллере запрещаются. Программа переходит на функцию обработки прерываний. После того, как обработчик прерывания закончит свою работу, при выходе из него взводится флаг разрешения прерывания. И выполняется следующее прерывание, если оно есть.
Т.е. как только вызывается прерывание, то остальные запрещаются до тех пор, пока оно не будет обработано. В принципе в программе обработки прерывания можно установить флаг разрешения прерывания и тогда второе прерывание прервет первое. Но стоит ли так запутывать программу.

И еще по поводу измерения тока. Обязательно надо сделать усреднения нескольких значений, например, как в программе контроллера элемента Пельтье урок 38. Период усреднения должен быть кратным периоду сети 50 Гц (20 мс).

Re: Практическое использование регулятора.

Добавлено: 06 янв 2017, 15:55
БлудныйКот
Спасибо, подумаю и может перепишу программу с прерываниями от ног.

Re: Практическое использование регулятора.

Добавлено: 10 янв 2017, 16:56
БлудныйКот
Программу переписал. Работает, постоянно убегает средняя точка датчиков в нуле.

Re: Практическое использование регулятора.

Добавлено: 10 янв 2017, 17:33
Эдуард
Почему? Датчики тока не стабильные?

Re: Практическое использование регулятора.

Добавлено: 12 янв 2017, 12:57
БлудныйКот
Скорей всего 5В шина нестабильна, т.к. я питаю плату arduino mega на данный момент от USB ноутбука и напряжение питания может просаживаться т.к. на плате установлен дисплей, датчики тока и много чего еще. Наверное мне нужен какойнить прецизионный стабилизатор напряжения для платы ардуино и платы датчиков тока.

Такой вопрос. А как делают систему с 2мя регуляторами? На примере системы регулирования двигателем постоянного тока. Где есть два контура. Внутренний контур тока(момета,где обратная связь по току) и контур скорости (внешний контур, гле обратная связь по скорости на валу).

Вроде с этим проектом я разобрался, вчера весь день тестил результат поражает.
Тестил по 12А на каждый канал. Максимум 32А на канал, ток подниму немного позже. Пока нету такого источника.

Сейчас хочу сделать самобалансирующегося робота с ПИД регулятором который должен держать положение в пространстве.
Макет собрал давно. Чуть позже если нужно выложу фотки.
Если можно, то вопросы по новой своей игрушке буду выкладывать в этой теме.

https://www.youtube.com/watch?v=w6VqASRawgg

Re: Практическое использование регулятора.

Добавлено: 12 янв 2017, 16:56
Эдуард
Пример такого регулятора с двумя контурами Ардуино контроллер элемента Пельтье. Там два регулятора. На нижнем уровне регулятор мощности, а выше - регулятор температуры.

Регулятор мощности:
    регулируемый параметр - мощность;
    регулирующий элемент - ШИМ.
Регулятор температуры:
    регулируемый параметр - температура;
    регулирующий элемент - заданная мощность для регулятора мощности.