Как стать автором
Обновить

Комментарии 45

Что-то, по-моему, не очень хорошая идея в качестве элементарного ПИД-регулятора микроконтроллер использовать. Ведь здесь можно элементарной аналоговой схемой обойтись. См. Титце и Шенк.
А элементарная аналоговая схема позволит настраивать параметры удалённо по последовательному порту?
А элементарная аналоговая схема позволит менять параметры на лету?
А элементарная аналоговая схема позволит реализовать автонастройку?
> А элементарная аналоговая схема позволит настраивать параметры удалённо по последовательному порту?

При помощи телефона: звоните уборщице, она накручивает нужные ручки ☺

> А элементарная аналоговая схема позволит менять параметры на лету?

Ручки можно крутить когда угодно.

> А элементарная аналоговая схема позволит реализовать автонастройку?

Схема будет малость посложней.
В былые времена наладчики очень громко вспоминали родословную создателей до десятого колена, крутя отвертками потенциометры регуляторов. А потом настала эпоха цифровых схем.
Мы пользуемся аналоговыми регуляторами, для поддержания статичной температуры — например, линии подогрева газа. 1 раз настроил — и забыл про него, там использование управляемого регулятора просто не оправдано. Максимум — доп. термопара с него на ADAM-4018 для контроля и всё.
Если честно, промышленных, относительно серийных решений на аналоговой электронике встречал только выпуска середины 90ых, и те сносим постепенно, заменяя ПЛК. В единичных экземплярах это может быть и оправдано.
Не очень хорошая идея использовать аналоговую схему, если можно сделать цифровую.
Все зависит от требуемых скоростей и надежности. Я сомневаюсь, что при необходимости реакции в килогерцы вы будете лепить цифровую схему (скорее всего, не успеете посчитать: у вас АЦП будет дольше выполняться).
Мсье троллит не по теме. Рассуждаем о терморегуляторе — откуда там килогерцы?
кто знает, как на хабре формулы вставлять? никак? пишу в 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 и все замечательно на Си удалось написать.
ADuC847. Асм по причине того, что весь остальной костяк приложения уже есть на асме — мы работаем с 51м семейством давно и тесно, а стандартное 12титактное ядро довольно плотно нагружено.
Хардкорно… А какой термодатчик использовался, если не секрет?
Термосопротивление и термопары ХА и ХК.
А вот еще вопросик: я так понял, показания вы снимаете при помощи АЦП, а как изменяете мощность нагрева? «Цифровыми вариаторами», ШИМом или еще как?
В статье написано же — регулируется время поджига симистора.
Ну по-сути, вы тот же ШИМ сделали, как я понял…
Да, только обычный шим имеет линейную зависимость время=мощность, при привязке к синусоиде — зависимость нелинейная.
Кстати, мне немного стыдно, но я никак не пойму о какой синусоиде вы все время говорите. Что у вас по синусу изменяется?
Термонагреватель подключен в обычную сеть 220В. Он питается синусоидой. И именно объёмом прохождения этой синусоиды до нагревателя и регулируется.
А разве не проще было сделать импульсный блок питания нагревателя? Питать его прямоугольными импульсами — так ведь легче вычислять потребляемую им мощность…
Сделайте импульсник киловатт так на 50 :)
Синус он и есть синус, а «прямоугольник» как получится
В этом случае наверное 220 как-то фильтровать все-таки хорошо нужно будет. Для синхронизации на эти 220 также нужен АЦП, как я понимаю
что фильтровать-то? зачем фильтровать? при прохождении через 0 (когда уровень снижается ниже 12V) — получаем сигнал, выжидаем время прохождение 12V и поджигаем.
Ну если у вас в лабораторных условиях синусоида из розетки получается красивая и ровная(и то я сомневаюсь в постоянстве этого явления), то в о многих городах нашей родины — это просто из ряда фантастики. Там могут быть и всплески и провалы, и в этом случае такой примитивный алгоритм вряд ли сработает
Нагреватель — слишком инерционная штука, чтобы реагировать на всякие всплески и провалы. А если среднее значение напряжения плавает, то можно его периодически замерять и производить коррекцию, а можно просто забить на это: ПИД-регулятор будет достаточно хорошо работать даже при небольших изменениях мощности нагревателя.
Я имел ввиду момент начала отсчета (прохождение через 0). Если в процессе работы ПИД-а можно «забить» на негдадкость синуса, то при старте системы она очень сильно критична к таким всплескам. Согласитесь, что существует отличная от нуля вероятность некоего фальстарта. И мне интересно, как этот момент отрабатывается. В принципе нехитрый фильтр на 220 решил бы эту проблему.
Не понимаю вас.
Период всегда один и тот же (он физически не может измениться в электросети), мелкие всплески и провалы — по барабану, даже если стартанёт в каком-то периоде не там — это ровныи счётом ни на что не повлияет.
прохождение через ноль — весьма стабильная штука. «шилья» в ноль в сети НЕ бывают по среди синусоиды. если вы где-то это видели — это проблема электропроводки, коя на заводах/в лабораториях немного лучше сделана, чем в домах 40х годов, где на 1мм алюминия вешают микроволновку в 2 киловата + чайник 2 киловата.
вот как раз частота сети — вещь _очень_ стабильная по всей стране.
форма синуса — тоже, как ни странно, это просто следствие схемы работы генератора.

дальше, в промышленности от этой сети запитано много чего — и оно всё прекрасно работает, именно на таком примитивном алгоритме :)

разовые всплески мало на что влияют, так как его интеграл всплеска крайне мал — это «шило», там где это критично — срезается фильтрами (но тут сам нагреватель — тот еще фильтр).

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

Поясню, для тех кто не понял: контроллер считает период управления как 100 периодов сети. Первые 20 он держит нагрузку включенной, остальные 80 — выключенной, имеем 20% мощности, и.т.д.
только лучше всё-таки не полупериодов, а целых периодов — чтобы на реактивной нагрузке сумма + и — уходила таки в 0.
Для детектирования нуля АЦП не нужен, достаточно простого компаратора.
Как раз нужен ПИД-регулятор, увидев статью обрадовался, зашел-разочаровался из-за отсутствия описания изделия, которое можно пощупать…
а какое именно изделие? кроме самого пид регулятора, там внутре еще (и это только программно):
1. неонка
2. измеритель термосопротивления
3. измеритель термопары
4. отработка профиля температуры
5. сохранение параметров во флеш
6. поддержание протокола связи с ПК
7. периодическая передача измерения на ПК
8. код подготовки параметров для вычислений (я пропустил его в портянкевыше, если кому-то захочется посмотреть — выложу)
9. код формирования значений на экран
10. код изменения параметров с кнопок

аппаратно же:
1. датчик температуры холодного спая (накристальный врёт так как сам кристалл греется)
2. усилитель сигнала с термопары
3. опторазвязка к симистору
4. схема запитки аналоговой и цифровой части от 220 (отдельные 220 от силы)
5. развязка канала к ПК
6. экран + кнопки управления
Я совершенно не понял как постоянные времени выбирать, они ведь, насколько я понимаю, согласно характеристикам объекта управления выбираются?
И откуда взялся диапазон постоянных времени «от 0 до ~2000 сек»?
Настройка коэффициентов ПИД регулятора под объект — это отдельная наука.
Вот тут неплохо и с графиками.
Вот тут вроде неплохо про вычисление параметров по единичному скачку.
Если честно, у меня сейчас на низком приоритете стоит реализация автонастройки по скачку — но руки-ноги всё не доходят до реализации.

От «0» это понятно — при 0 коэффициент не работает вообще :)
«До 2000» — так как у нас коэффициенты привязаны к общей сетке работы времени 1/25 сек, одного байта явно мало (10.2 секунды предельное время), значит коэффициент 16битный. А 65535/25=2 621,4 сек. Ставить полный диапазон мне показалось не красивым, и 2000 сек это уже как-то дофига :)
Понятно что 2000с диапазон значительный, но из каких соображений 10,2с мало для постоянных времени?
Спасибо за ссылки, возможно, после освоения материала, вопрос отпадет сам собой :)
10.2сек мало по причине того, что для медленного объекта интегральная должна так же быть большой, сопоставимой со временем перехода
Поглядел, у меня в коде вообще 1800 сек ограничение. 30 минут чтоб.
Так как час не получился. округлил до ближайшего ровного времени.
Отличная статья, спасибо!
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.