Отвлекитесь, эмбеддеры! Отвлеченные темы - обсудить проблемы тепловой смерти вселенной, или просто пиво. Этот раздел - для отдыха. |
20.12.2017, 17:02
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от Alex9797
|
Я начинал на 580-м, и 48-й после него казался просто чудом техники!
|
А я начинал с педального трехколесного велосипеда. Когда пересел на "Школьник", он мне тоже показался чудом техники!
|
|
|
|
20.12.2017, 21:12
|
|
Временная регистрация
Регистрация: 23.06.2017
Сообщений: 47
Сказал спасибо: 15
Сказали Спасибо 35 раз(а) в 18 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от ALEGYR
|
А я начинал с педального трехколесного велосипеда. Когда пересел на "Школьник", он мне тоже показался чудом техники!
|
И было тебе всего-то 40 лет...
|
|
|
|
20.12.2017, 22:41
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от Haha
|
И было тебе всего-то 40 лет...
|
В 40 лет (в 1997 году) я перестал работать К580 и пересел на пик-контроллеры, чтобы сделать сервисный пуль для тестирования и ремонта видеокамер SONY!
|
|
|
|
20.12.2017, 23:00
|
|
Почётный гражданин KAZUS.RU
Регистрация: 02.07.2009
Сообщений: 1,110
Сказал спасибо: 1,246
Сказали Спасибо 2,178 раз(а) в 624 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
ALEGYR, реально нет времени переключится чисто на контроллерный паскаль. но идею я думаю поймешь.
Писать полностью нет времемени поэтому будет псевдо код. мега8.
timer 1
тамер шим конфигурируем в приращение.
прирывание по совпадению активно.
прирывание по переполнению активно.
пределитель определяется по частоте пусть будет 8 Мгц
8
64
256
1024
мах период регулирования при пред 256.
(1/(8000000/256))*65535 = 2,1 сек.
1 тик и так понятен.
timer 0
прерывание по перепелнению.
интервал вычесляем какой нам необходим.
грузим настройки например из еепром
типа
Kp = 1
Ki = 1
Kd = 1
Treg = 1
Timer0 := 0;
Timer1 := 0;
start Timer0;
start Timer1;
Interrupt enable;
Interrapt Timer0_overflov;
меряем АЦР. заносим в В TempADC;
Если надо заносим нужное значение в тимер0
гуляем на х из прерывания.
Interrupt Timer1_Compare;
PinOut := 0;
Interrupt Timer1_overflov;
PinOut := 1;
Timer1 stop;
Считаем пид.
получаем своих попугаев
Теперь приводим попугаев к периоду регулирования.
if Pout › 100 then Pout := 100
else
begin
if Pout ‹ 0 Then Pout := 0
else begin
TSHIM := (TReg * Pout) div 100;
end
end;
если период регулирования равен 2,1 с то выглядит так TSHIM := (65535 * POut) div 100;
если меньше то TSHIM := ((65535 - X) * POut) div 100;
где X значение чтобы по переполнению было необходимое нам время.
плюем в регистр сравнения значение 65535 - X + TSHIM.
Timer1 start;
гуляем из прерывания. а дальше курим или занимаемся своими делами.
|
|
|
|
20.12.2017, 23:24
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
А где пример кода расчета пид-регулятора?
Насколько я понимаю, строка
Сообщение от stalkernet
|
Считаем пид.
|
даже в псевдо коде. мега8 не является кодом расчета пид-регулятора!
|
|
|
|
21.12.2017, 01:30
|
|
Почётный гражданин KAZUS.RU
Регистрация: 02.07.2009
Сообщений: 1,110
Сказал спасибо: 1,246
Сказали Спасибо 2,178 раз(а) в 624 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Блин ну прям как пыонеры. все роскаж, покажи, дай попробывать.
Perr := tust - TempAdc;
P := Kp * Perr;
I := integrator + (Ki * Perr);
D := Kd * (Perr - PerrOld);
Pout := P + I + D;
Integrator := I;
PerrOld := Perr;
КЛАСИКА
Значения АЦП не пересчитываются. работаем в шагах АЦП. я об этом уже расказывал.
|
|
|
|
21.12.2017, 01:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Вопрос №1: - Нафига нужны
Сообщение от stalkernet
|
PinOut := 0;
...
PinOut := 1;
|
если компаратор имеет выход наружу?
Вопрос №2: - Нафига отключать
Сообщение от stalkernet
|
Timer1
|
?
upd
Вопрос №3: - Нафига нужен
Сообщение от stalkernet
|
Timer0
|
Последний раз редактировалось omercury; 21.12.2017 в 01:55.
|
|
|
|
21.12.2017, 02:07
|
|
Почётный гражданин KAZUS.RU
Регистрация: 02.07.2009
Сообщений: 1,110
Сказал спасибо: 1,246
Сказали Спасибо 2,178 раз(а) в 624 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от omercury
|
если компаратор имеет выход наружу
|
на тот случай если он уже задействован под другое.
Сообщение от omercury
|
Нафига отключать
|
привычка. работая в прирывании его отключать.
Timer0 тактовый генератор импульсов определенной длительности.
по ним идет циклический опрос АЦП и усреднение значений. вывод на деспюй. уварт. и т.д. и т.п.
Последний раз редактировалось stalkernet; 21.12.2017 в 02:11.
|
|
|
|
21.12.2017, 02:34
|
|
Вид на жительство
Регистрация: 10.06.2005
Сообщений: 325
Сказал спасибо: 43
Сказали Спасибо 360 раз(а) в 194 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от stalkernet
|
Блин ну прям как пыонеры.
|
Правильно ли я понимаю, что твоя фраза
Сообщение от stalkernet
|
А мне не тот не тот не нравится.
|
была сказана лишь только для того, чтобы ты вместо вот этого
Сообщение от ALEGYR
|
double error = Setpoint - Input;
errSum += error;
double dInput = (Input - lastInput);
Output = kp * error + ki * errSum - kd * dInput;
lastInput = Input;
lastTime = now;
|
, написал вот это
Сообщение от stalkernet
|
Perr := tust - TempAdc;
P := Kp * Perr;
I := integrator + (Ki * Perr);
D := Kd * (Perr - PerrOld);
Pout := P + I + D;
Integrator := I;
PerrOld := Perr;
|
то есть
буквы error заменил своими буквами Perr
буквы Setpoint заменил своими буквами tust
буквы Input заменил своими буквами TempAdc
буквы errSum заменил своими буквами Integrator
и вместо одной строки
Output = kp * error + ki * errSum - kd * dInput;
написать свои четыре
P := Kp * Perr;
I := integrator + (Ki * Perr);
D := Kd * (Perr - PerrOld);
Pout := P + I + D;
?!
Последний раз редактировалось ALEGYR; 21.12.2017 в 02:36.
|
|
|
|
21.12.2017, 02:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 02.07.2009
Сообщений: 1,110
Сказал спасибо: 1,246
Сказали Спасибо 2,178 раз(а) в 624 сообщении(ях)
|
Re: Мои ответы на вопросы [b]AR_Favorit[/b]
Сообщение от ALEGYR
|
Output = kp * error + ki * errSum - kd * dInput
|
Сообщение от ALEGYR
|
Pout := P + I + D;
|
найди разницу в двух строчках. кроме названий.
Сообщение от ALEGYR
|
Правильно ли я понимаю
|
нет не правильно. и то что мне ненравилось я уже приводил несколько раз. особенно подробно расписано в последнем посте.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:05.
|
|