Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
02.03.2011, 13:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
ПИД регулятор на С
Добрый всем день.
Вобщем дела такие,
есть результат АЦП 8 бит диапазон изменения 0-255 точность 1 единица
есть ШИМ 8 бит точность установки 1 единица.
ШИМ определяет измеряемую величину.
Как красиво организовать обратную связь.
Вообще то ПИД и не обязательно, но нужно чтоб стабильность была.
Вобщем может кто поделится информацией, лучше готовой формулой. А то интернет уже фактически сутки ковыряю и форум ковыряю,а понимания чего то нет.
|
|
|
|
02.03.2011, 14:50
|
|
Гуру портала
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,591
Сказал спасибо: 181
Сказали Спасибо 3,165 раз(а) в 2,049 сообщении(ях)
|
Re: ПИД регулятор на С
интересный вопрос
разные процессы по разному должны регулироваться, с разной тау
большинство процессов имхо без пида не нарегулируешь.
и самое главное надо довольно точно задавать время интегрирования и диференцирования. иначе вместо ровной линии получишь вечные качели с максимальной амплитудой
|
|
|
|
02.03.2011, 14:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: ПИД регулятор на С
Цитата:
|
разные процессы по разному должны регулироваться
|
Процес измерения тока в сварочном инверторе. Измеряемая величина весьма динамичная. Амплитуда возможных изменений весь диапазон.
|
|
|
|
02.03.2011, 16:49
|
|
Гражданин KAZUS.RU
Регистрация: 12.10.2009
Сообщений: 576
Сказал спасибо: 30
Сказали Спасибо 138 раз(а) в 110 сообщении(ях)
|
Re: ПИД регулятор на С
7Fantomas7,
Читай на тему Z-transfrom. Если у тебя есть аналоговая модель регулятора, то с помощью Z-transform переводишь ее в Z-домен. Коэффиценты полученной передаточной функции будут коэфициентами фильтра, который надо использовать.
Простейший вариант - чисто интегральный регулятор, без пропорционального звена. Алгоритм его работы такой:
e[1] = (v_ref - adc)‹‹8;
control += k * (e[1] + e[0]);
e[0] = e[1];
pwm = control››8;
Коэфициент усиления k - единственный регулировочный парметр. Уменьшай его до тех пор пока не пропадет самовозбуждение. Сдвиги в формуле нужны для реализации вычислений с фиксированной запятой, иначе будет потеря точности. Понятно, что нужно следить за отсутствие переолнения. Используя 32 битные числа все ОК, но на 8-битном МК лучше бы вписать диаппазон в 16 бит.
|
|
|
Эти 3 пользователя(ей) сказали Спасибо tanq за это сообщение:
|
|
|
02.03.2011, 17:22
|
|
Вид на жительство
Регистрация: 07.03.2005
Сообщений: 300
Сказал спасибо: 13
Сказали Спасибо 117 раз(а) в 62 сообщении(ях)
|
Re: ПИД регулятор на С
На основе этого делал.
Вложения:
|
PID.ZIP (366.0 Кб, 1041 просмотров) |
|
|
|
Эти 12 пользователя(ей) сказали Спасибо mironov за это сообщение:
|
|
|
02.03.2011, 17:59
|
|
Временная регистрация
Регистрация: 13.05.2005
Сообщений: 52
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: ПИД регулятор на С
Отлично расписано ! Нечто подобное я делал
для управления двигателями.
|
|
|
|
02.03.2011, 18:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: ПИД регулятор на С
tanq,
Оно то все хорошо, только не смогли бы конкретизировать что такое Z-transfrom и что такое Z-домен. А то чет в сети рускоязычного на эту тему гулькин нос.
И значение элементов формулы не подскажете ли.
|
|
|
|
02.03.2011, 18:43
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: ПИД регулятор на С
Я рекомендую другой способ. По прерыванию таймера сравниваем заданный результат и реальный. Если меньше, прибавляем 1. Если больше - вычитаем. Это очень быстрое действие. Далее запускаем АДС и пишем в таймер значение контанты К, которая будет определять коэффициент. Прерывание АДС записывает значение АЦП в переменную, которая будет использоваться в прерывании таймера. Таким образом два прерывания и очень короткое выполнение.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
02.03.2011, 19:16
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Сообщений: 1,437
Сказал спасибо: 287
Сказали Спасибо 339 раз(а) в 202 сообщении(ях)
|
Re: ПИД регулятор на С
Easyrider83,
Не поверите так и делаю. Только без прерываний. В качестве теста.
Только для регулировки тока сварочной дуги здается мало приемлемо. Нагрузка очень динамичная и непредсказуемаемая. И покуда мы будем 1 плюсовать или минусовать, 8 раз короткое случится и пропадет. Вобшем попробую такой вариант, но наверняка ничего не выйдет.
mironov,
Отлично расписано. Большое спасибо. Есть несколько вопросов.
Я не анализировал частоту прерываний таймера 0 но судя по всему 1 раз в 0.1 секунду.
С какой частотой должна выполнятся функция? И какая зависимость точности регулирования от частоты запуска функции?
Последний раз редактировалось 7Fantomas7; 02.03.2011 в 19:32.
|
|
|
Сказали "Спасибо" 7Fantomas7
|
|
|
02.03.2011, 19:38
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: ПИД регулятор на С
7Fantomas7, извините, но для короткого АЦП не подходит. Тут компаратор нужен и опять же - прерывание. Но можно попробовать и на АЦП короткое выловить, хоть это и не правильно. Просто добавить сравнение текущего значения с крайним. При превышении там же в прерывании отключать ток. А без прерываний это все реализовать сложно. Только в основном цикле. Но тогда и контроллер не нужен. Надо сразу все собирать на 494 - это вам и шим с пидом и компаратор ошибки.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:22.
|
|