Комментарии 45
Что-то, по-моему, не очень хорошая идея в качестве элементарного ПИД-регулятора микроконтроллер использовать. Ведь здесь можно элементарной аналоговой схемой обойтись. См. Титце и Шенк.
А элементарная аналоговая схема позволит настраивать параметры удалённо по последовательному порту?
А элементарная аналоговая схема позволит менять параметры на лету?
А элементарная аналоговая схема позволит реализовать автонастройку?
А элементарная аналоговая схема позволит менять параметры на лету?
А элементарная аналоговая схема позволит реализовать автонастройку?
> А элементарная аналоговая схема позволит настраивать параметры удалённо по последовательному порту?
При помощи телефона: звоните уборщице, она накручивает нужные ручки ☺
> А элементарная аналоговая схема позволит менять параметры на лету?
Ручки можно крутить когда угодно.
> А элементарная аналоговая схема позволит реализовать автонастройку?
Схема будет малость посложней.
При помощи телефона: звоните уборщице, она накручивает нужные ручки ☺
> А элементарная аналоговая схема позволит менять параметры на лету?
Ручки можно крутить когда угодно.
> А элементарная аналоговая схема позволит реализовать автонастройку?
Схема будет малость посложней.
В былые времена наладчики очень громко вспоминали родословную создателей до десятого колена, крутя отвертками потенциометры регуляторов. А потом настала эпоха цифровых схем.
Мы пользуемся аналоговыми регуляторами, для поддержания статичной температуры — например, линии подогрева газа. 1 раз настроил — и забыл про него, там использование управляемого регулятора просто не оправдано. Максимум — доп. термопара с него на ADAM-4018 для контроля и всё.
Не очень хорошая идея использовать аналоговую схему, если можно сделать цифровую.
кто знает, как на хабре формулы вставлять? никак? пишу в maple-нотации тогдаUse LaTeX, Luke.
mathurl.com/
Насчет формул:
вводим в командной строке
и получаем:
вводим в командной строке
formulator '$\int\limits_a^b \frac{\sin^2 x - x\cdot\log x}{\tg x+\exp{x}}dx$'
и получаем:
Код скрипта formulator
#!/bin/sh
prefix="tmp_$$"
if [ "$1" = "" ]; then
echo -e "\nUsage: $(basename $0) \"latex string\" [output filename]\n"
exit
fi
[ "$2" != "" ] && output="$2" || output=$(date +%y.%m.%d_%H:%M:%S.png)
tex="$prefix.tex"
cat > $tex << EOF
\documentclass[12pt]{minimal}
\usepackage[koi8-r]{inputenc} % Классическая кодировка
\usepackage[english,russian]{babel} % Правила переноса слов
\usepackage[intlimits]{amsmath} % Мат. команды
\usepackage{amsfonts} % Шрифты
\usepackage{amssymb} % Спец. символы
\usepackage{wasysym} % Для астрономических символов типа знаков зодиака
\pagestyle{empty}
\parindent=0pt
\setbox0=\hbox{
EOF
echo $1 >> $tex
cat >> $tex << EOF
}
\textheight=\ht0
\textwidth=\wd0
\oddsidemargin=-1cm
\topmargin=-1.5cm
\advance\textheight by 1cm
\advance\textwidth by 1cm
\begin{document}
\vbox{\vss\hbox{\hss\copy0\hss}\vss}
\end{document}
EOF
latex $tex
dvipng -D 600 $prefix.dvi -o $output
rm -f $prefix*
А можно по-подробней, что за контроллер использовался? И что за острая необходимость заставила вас использовать ассемблер. Мне однажды тоже пришлось столкнуться с разработкой температурного ПИД-регулятора. МЫ тогда использовали LPC2148 и все замечательно на Си удалось написать.
А вот еще вопросик: я так понял, показания вы снимаете при помощи АЦП, а как изменяете мощность нагрева? «Цифровыми вариаторами», ШИМом или еще как?
В статье написано же — регулируется время поджига симистора.
Ну по-сути, вы тот же ШИМ сделали, как я понял…
Да, только обычный шим имеет линейную зависимость время=мощность, при привязке к синусоиде — зависимость нелинейная.
Кстати, мне немного стыдно, но я никак не пойму о какой синусоиде вы все время говорите. Что у вас по синусу изменяется?
Термонагреватель подключен в обычную сеть 220В. Он питается синусоидой. И именно объёмом прохождения этой синусоиды до нагревателя и регулируется.
А разве не проще было сделать импульсный блок питания нагревателя? Питать его прямоугольными импульсами — так ведь легче вычислять потребляемую им мощность…
В этом случае наверное 220 как-то фильтровать все-таки хорошо нужно будет. Для синхронизации на эти 220 также нужен АЦП, как я понимаю
что фильтровать-то? зачем фильтровать? при прохождении через 0 (когда уровень снижается ниже 12V) — получаем сигнал, выжидаем время прохождение 12V и поджигаем.
Ну если у вас в лабораторных условиях синусоида из розетки получается красивая и ровная(и то я сомневаюсь в постоянстве этого явления), то в о многих городах нашей родины — это просто из ряда фантастики. Там могут быть и всплески и провалы, и в этом случае такой примитивный алгоритм вряд ли сработает
Нагреватель — слишком инерционная штука, чтобы реагировать на всякие всплески и провалы. А если среднее значение напряжения плавает, то можно его периодически замерять и производить коррекцию, а можно просто забить на это: ПИД-регулятор будет достаточно хорошо работать даже при небольших изменениях мощности нагревателя.
Я имел ввиду момент начала отсчета (прохождение через 0). Если в процессе работы ПИД-а можно «забить» на негдадкость синуса, то при старте системы она очень сильно критична к таким всплескам. Согласитесь, что существует отличная от нуля вероятность некоего фальстарта. И мне интересно, как этот момент отрабатывается. В принципе нехитрый фильтр на 220 решил бы эту проблему.
Не понимаю вас.
Период всегда один и тот же (он физически не может измениться в электросети), мелкие всплески и провалы — по барабану, даже если стартанёт в каком-то периоде не там — это ровныи счётом ни на что не повлияет.
Период всегда один и тот же (он физически не может измениться в электросети), мелкие всплески и провалы — по барабану, даже если стартанёт в каком-то периоде не там — это ровныи счётом ни на что не повлияет.
прохождение через ноль — весьма стабильная штука. «шилья» в ноль в сети НЕ бывают по среди синусоиды. если вы где-то это видели — это проблема электропроводки, коя на заводах/в лабораториях немного лучше сделана, чем в домах 40х годов, где на 1мм алюминия вешают микроволновку в 2 киловата + чайник 2 киловата.
вот как раз частота сети — вещь _очень_ стабильная по всей стране.
форма синуса — тоже, как ни странно, это просто следствие схемы работы генератора.
дальше, в промышленности от этой сети запитано много чего — и оно всё прекрасно работает, именно на таком примитивном алгоритме :)
разовые всплески мало на что влияют, так как его интеграл всплеска крайне мал — это «шило», там где это критично — срезается фильтрами (но тут сам нагреватель — тот еще фильтр).
то, что среднее напряжение плавает туда-сюда — это отрабатывает интегральная составляющая ПИД регулятора.
форма синуса — тоже, как ни странно, это просто следствие схемы работы генератора.
дальше, в промышленности от этой сети запитано много чего — и оно всё прекрасно работает, именно на таком примитивном алгоритме :)
разовые всплески мало на что влияют, так как его интеграл всплеска крайне мал — это «шило», там где это критично — срезается фильтрами (но тут сам нагреватель — тот еще фильтр).
то, что среднее напряжение плавает туда-сюда — это отрабатывает интегральная составляющая ПИД регулятора.
Спасибо большое, разобрался
Т.е. фазовое управление.
Для инертных мощных нагрузок можно использовать метод пропуска полупериодов — когда открываем симистор всегда в начале полупериорда, и, подсчитывая их, получаем линейность управления как при ШИМе, и меньше импульсных помех в сеть.
Поясню, для тех кто не понял: контроллер считает период управления как 100 периодов сети. Первые 20 он держит нагрузку включенной, остальные 80 — выключенной, имеем 20% мощности, и.т.д.
Для инертных мощных нагрузок можно использовать метод пропуска полупериодов — когда открываем симистор всегда в начале полупериорда, и, подсчитывая их, получаем линейность управления как при ШИМе, и меньше импульсных помех в сеть.
Поясню, для тех кто не понял: контроллер считает период управления как 100 периодов сети. Первые 20 он держит нагрузку включенной, остальные 80 — выключенной, имеем 20% мощности, и.т.д.
Для детектирования нуля АЦП не нужен, достаточно простого компаратора.
Как раз нужен ПИД-регулятор, увидев статью обрадовался, зашел-разочаровался из-за отсутствия описания изделия, которое можно пощупать…
а какое именно изделие? кроме самого пид регулятора, там внутре еще (и это только программно):
1. неонка
2. измеритель термосопротивления
3. измеритель термопары
4. отработка профиля температуры
5. сохранение параметров во флеш
6. поддержание протокола связи с ПК
7. периодическая передача измерения на ПК
8. код подготовки параметров для вычислений (я пропустил его в портянкевыше, если кому-то захочется посмотреть — выложу)
9. код формирования значений на экран
10. код изменения параметров с кнопок
аппаратно же:
1. датчик температуры холодного спая (накристальный врёт так как сам кристалл греется)
2. усилитель сигнала с термопары
3. опторазвязка к симистору
4. схема запитки аналоговой и цифровой части от 220 (отдельные 220 от силы)
5. развязка канала к ПК
6. экран + кнопки управления
1. неонка
2. измеритель термосопротивления
3. измеритель термопары
4. отработка профиля температуры
5. сохранение параметров во флеш
6. поддержание протокола связи с ПК
7. периодическая передача измерения на ПК
8. код подготовки параметров для вычислений (я пропустил его в портянкевыше, если кому-то захочется посмотреть — выложу)
9. код формирования значений на экран
10. код изменения параметров с кнопок
аппаратно же:
1. датчик температуры холодного спая (накристальный врёт так как сам кристалл греется)
2. усилитель сигнала с термопары
3. опторазвязка к симистору
4. схема запитки аналоговой и цифровой части от 220 (отдельные 220 от силы)
5. развязка канала к ПК
6. экран + кнопки управления
Я совершенно не понял как постоянные времени выбирать, они ведь, насколько я понимаю, согласно характеристикам объекта управления выбираются?
И откуда взялся диапазон постоянных времени «от 0 до ~2000 сек»?
И откуда взялся диапазон постоянных времени «от 0 до ~2000 сек»?
Настройка коэффициентов ПИД регулятора под объект — это отдельная наука.
Вот тут неплохо и с графиками.
Вот тут вроде неплохо про вычисление параметров по единичному скачку.
Если честно, у меня сейчас на низком приоритете стоит реализация автонастройки по скачку — но руки-ноги всё не доходят до реализации.
От «0» это понятно — при 0 коэффициент не работает вообще :)
«До 2000» — так как у нас коэффициенты привязаны к общей сетке работы времени 1/25 сек, одного байта явно мало (10.2 секунды предельное время), значит коэффициент 16битный. А 65535/25=2 621,4 сек. Ставить полный диапазон мне показалось не красивым, и 2000 сек это уже как-то дофига :)
Вот тут неплохо и с графиками.
Вот тут вроде неплохо про вычисление параметров по единичному скачку.
Если честно, у меня сейчас на низком приоритете стоит реализация автонастройки по скачку — но руки-ноги всё не доходят до реализации.
От «0» это понятно — при 0 коэффициент не работает вообще :)
«До 2000» — так как у нас коэффициенты привязаны к общей сетке работы времени 1/25 сек, одного байта явно мало (10.2 секунды предельное время), значит коэффициент 16битный. А 65535/25=2 621,4 сек. Ставить полный диапазон мне показалось не красивым, и 2000 сек это уже как-то дофига :)
Понятно что 2000с диапазон значительный, но из каких соображений 10,2с мало для постоянных времени?
Спасибо за ссылки, возможно, после освоения материала, вопрос отпадет сам собой :)
Спасибо за ссылки, возможно, после освоения материала, вопрос отпадет сам собой :)
Поглядел, у меня в коде вообще 1800 сек ограничение. 30 минут чтоб.
Так как час не получился. округлил до ближайшего ровного времени.
Так как час не получился. округлил до ближайшего ровного времени.
Отличная статья, спасибо!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
ПИД-регулятор своими руками