<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>AVR221: цифровой PID-контроллер на AVR</title>
		<description>Обсуждение AVR221: цифровой PID-контроллер на AVR</description>
		<link>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html</link>
		<lastBuildDate>Sun, 12 Jul 2026 03:21:00 +0300</lastBuildDate>
		<generator>JComments</generator>
		<atom:link href="https://microsin.ru/component/option,com_jcomments/format,raw/limit,10/object_group,com_content/object_id,1587/task,rss/" rel="self" type="application/rss+xml" />
		<item>
			<title>Макс написал:</title>
			<link>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-21428</link>
			<description><![CDATA[Я решил попробовать использовать этот алгоритм. Хочу регулировать температуру паяльника. Но, на выходе с регулятора имею -32768 - +32768 значение. Для моего 8 битного ШИМ это не годится. Как правильно было бы его использовать в моем случае? И ещё, он сильно скачет от минимального порога -32768 до максимального 32768. microsin: значение у Вас 16-битное. Для того, чтобы превратить в 8-битное, нужно просто его поделить на 256. А скачет либо потому что помехи ловите, либо неправильно датчик температуры опрашиваете.]]></description>
			<dc:creator>Макс</dc:creator>
			<pubDate>Sat, 08 Feb 2020 13:40:48 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-21428</guid>
		</item>
		<item>
			<title>trengtor написал:</title>
			<link>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-3170</link>
			<description><![CDATA[Я верно понимаю, что на входе этого PID нужно масштабировать не только коэффициенты, но и контролируемый параметр с уставкой?]]></description>
			<dc:creator>trengtor</dc:creator>
			<pubDate>Sat, 09 Jan 2016 16:53:41 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-3170</guid>
		</item>
		<item>
			<title>xsmirnov написал:</title>
			<link>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2567</link>
			<description><![CDATA[ Ошибки в реализации (файл pid.c) - нет (я об этом писал). Ошибка допущена в описании реализации - текст на данном сайте и исходный pdf на английском. Вы совершенно правы, что de(t)/dt = d(SP - y(t))/dt = -dy(t)/dt. Но dy(t)/dt = y(n)-y(n-1), т.е. от значения на текущем шаге надо отнять значение с предыдущего шага. А -dy(t)/dt = y(n-1)-y(n), следовательно: de(t)/dt = y(n-1)-y(n). Именно эта формула использована в реализации (pid.c) - я об этом писал раньше. Но вот в тексте описания реализации в последней формуле в разделе 2.5.1 формула отличается от приведенной. Если, все-таки, непонятно, посмотрите внимательно мои комментарии #3 и #4.]]></description>
			<dc:creator>xsmirnov</dc:creator>
			<pubDate>Fri, 09 Jan 2015 22:43:33 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2567</guid>
		</item>
		<item>
			<title>Станислав написал:</title>
			<link>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2558</link>
			<description><![CDATA[ Ошибки нет. Тот, кто писал реализацию, хорошо разбирается в теории автоматического регулирования. e(t)=SP-y(t), SP, как правило, = const. Таким образом, de(t)/dt = d(SP - y(t))/dt = -dy(t)/dt. Этот изящный приём используется для устранения "дифференциально го всплеска" при изменении задания SP (setpoint).]]></description>
			<dc:creator>Станислав</dc:creator>
			<pubDate>Wed, 31 Dec 2014 13:12:05 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2558</guid>
		</item>
		<item>
			<title>xsmirnov написал:</title>
			<link>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2461</link>
			<description><![CDATA[Теперь посмотрим исходник pid.c на 93 строке: // Calculate Dterm d_term = pid_st->D_Factor * (pid_st->lastProcessValu e - processValue); processValue - это текущее значение выходной переменной, т.е. y(n); pid_st->lastProcessValu e - это значение выходной переменной на предыдущем шаге, т.е. y(n-1). Отсюда следует, что дифференциально е слагаемое в коде вычисляется по формуле Kd*(y(n-1) - y(n)), следовательно в последней формуле в разделе 2.5.1 допущена ошибка в оригинальной документации.]]></description>
			<dc:creator>xsmirnov</dc:creator>
			<pubDate>Tue, 04 Nov 2014 12:50:02 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2461</guid>
		</item>
		<item>
			<title>xsmirnov написал:</title>
			<link>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2460</link>
			<description><![CDATA[Цитирую: Ошибка - это разность между y0(t) и y(t), т.е. e(t)=y0(t)-y(t) (см. схему на рис. 2-1). В алгоритме для того, чтобы избежать изменение управляющего воздействия u(t) при быстром изменении задающего воздействия y0(t), предлагается проводить дифференцирован ие не сигнала ошибки e(t), а выходного сигнала y(t) (т.е. полагается, что y0(t)=const). Поэтому: de(t)/dt = d/dt(y0(t) - y(t)) ~= -dy(t)/dt = -(y(n) - y(n-1)) = y(n-1) - y(n).]]></description>
			<dc:creator>xsmirnov</dc:creator>
			<pubDate>Tue, 04 Nov 2014 12:48:56 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2460</guid>
		</item>
		<item>
			<title>Alex написал:</title>
			<link>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2435</link>
			<description><![CDATA[ Если y(n) это ошибка, то написано верно всё, Вы не правы. А если y(n) это не ошибка, то вообще непонятно что там выражается в формуле.]]></description>
			<dc:creator>Alex</dc:creator>
			<pubDate>Sun, 12 Oct 2014 21:13:24 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2435</guid>
		</item>
		<item>
			<title>xsmirnov написал:</title>
			<link>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2417</link>
			<description><![CDATA[В разделе 2.5.1 в последней формуле допущена ошибка (в том числе, в оригинальной документации pdf). Последним слагаемым должно быть Kd*(y(n-1) - y(n)). Так требует теория, так реализовано в самом алгоритме (файл pid.c из архива AVR221.zip)]]></description>
			<dc:creator>xsmirnov</dc:creator>
			<pubDate>Sun, 28 Sep 2014 18:18:43 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr/avr221-discrete-pid-controller-on-avr.html#comment-2417</guid>
		</item>
	</channel>
</rss>
