MAL4X Научно-технический форум разработчиков симуляторов и автоматики


Симуляторы перегрузок. DIY электроника. ЭВМ. Компьютерные сети.
Up

Данные: что передавать и как регулировать

Строим реалистичный симулятор перегрузок своими руками. Рекомендации. Советы.

Модераторы: Death_Morozz, null, Ale

Re: Данные: что передавать и как регулировать

Сообщение kuzevan » 29 ноя 2012, 18:58

То, что работает, меня совсем не удивило. Ты, лучше, напиши, что за двигатель и какие коэффициенты ты получил.
Аватара пользователя
kuzevan
Парторг
 
Сообщения: 60
Зарегистрирован: 25 окт 2011, 17:17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: -6

Re: Данные: что передавать и как регулировать

Сообщение AlexVr » 29 ноя 2012, 19:37

Движки пока не подключал.
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Re: Данные: что передавать и как регулировать

Сообщение kuzevan » 29 ноя 2012, 19:46

Так что же у тебя работает?
Аватара пользователя
kuzevan
Парторг
 
Сообщения: 60
Зарегистрирован: 25 окт 2011, 17:17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: -6

Re: Данные: что передавать и как регулировать

Сообщение AlexVr » 29 ноя 2012, 19:48

Ардуинка с прогой Ale и с резистором.
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Re: Данные: что передавать и как регулировать

Сообщение AlexVr » 29 ноя 2012, 22:40

Полностью все подключил - резистор, мост, частотник, двигатель.
Программа Ale, после выставления компорта 3 на галочках прием, передача зависает и не отвечает.
При повторном запуске все хорошо, график от датчика рисует.
Диод только 1 из 2 на мосту при перемещении ползунка в программе помигивает, на индикаторе частотника направление только в одну сторону и не меняется, хотя задание в обе стороны рисуется на графике.
При нажатии "Пуск" на частотнике программа повисает. При дальнейшем перезапуске пишет, что порт не отвечает.
Резет на Ардуинке не помогает, лечится только переподключением по USB.
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Re: Данные: что передавать и как регулировать

Сообщение taran_ob » 30 ноя 2012, 11:44

kuzevan

Появилось минутка на домашнее задание :) . Но проверить пока не на чем, Ардуино у меня нет, а над макетом я работаю. Просьба. Не мог бы ты потестить, если время будет? Нужно в твой код вставить одну функцию и по ней вычислять pwm по флагу приема новой координаты. Модуль функции - значение шима, знак - направление. От задания до задания - движение с постоянной скоростью, с компенсацией (медленной) внешнего воздействия. Для настройки, нужно подобрать Kp (начать можно с 0.1) при Ki=0, затем Kp откатить на пару шагов назад, и постепенно увеличивать Ki (начать от Ki=0.0001), процесс не много творческий :) .

Как то так pwm = модуль PI(dest, pos, 0.1, 0.001)

Код: Выделить всё
#define MINACTION -1023
#define MAXACTION 1023
//функция возвращает значение, от MINACTION до MAXACTION, необходимого воздействия по ПИ закону,
//где setItem-заданное значение, getItem-текущее значение, Kp-пропорциональный коэффициент, Ki-интегральный коэффициент
signed int PI(signed char setItem, signed char getItem, float Kp, float Ki)
{
static float Action;
static signed int deltaItem, tempsetItem, Error, sumError, tempError;
deltaItem=setItem-getItem;                                                              //необходимое изменение
Error=tempsetItem-getItem;                                                              //ошибка воздействия
tempsetItem=setItem;                                                                    //новое задание стало прошлым
if ((Action>MINACTION)&(Action<MAXACTION)) sumError=sumError+Error;                     //сумма ошибок, если придел регулирования не достигнут
tempError=Error;                                                                        //текущая ошибка воздействия стала прошлой
Action=(Kp*deltaItem)+(Ki*sumError);                                                    //расчет воздействия
if ((Action>MINACTION)&(Action<MAXACTION)) return (signed int)Action;                   //возвращает воздействие, если придел регулирования не достигнут
else {if (Action<MINACTION) return MINACTION; if (Action>MAXACTION) return MAXACTION;}; //если воздействие за приделами, возвращает придельные значения
}
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Re: Данные: что передавать и как регулировать

Сообщение taran_ob » 30 ноя 2012, 12:14

kuzevan писал(а):Введена защита от дергания мотора в состоянии покоя.


Побороть дергание можно, подавая на каждое плече моста одинаковый шим но с инверсией. Это немного уменьшит максимальную скорость, но привод будет, как бы, будет поджат с двух сторон - уменьшается инерционность.
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Re: Данные: что передавать и как регулировать

Сообщение Ale » 30 ноя 2012, 12:31

taran_ob писал(а):Побороть дергание можно, подавая на каждое плече моста одинаковый шим но с инверсией. Это немного уменьшит максимальную скорость, но привод будет, как бы, будет поджат с двух сторон - уменьшается инерционность.

Не понял ? Пожалуйста подробней. Я использую полумост (как и большинство) - т.е пока первое плечо активно (ШИМ), второе в нуле. Смена полярности - первое плечо в нуль, на второе - ШИМ. Схемотехнический на каждое плечо моего полумоста ШИМ подать нельзя.

А дерганье в состоянии покоя рождается из шумов, выводящих схему из состояния покоя, ИМХО
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Данные: что передавать и как регулировать

Сообщение taran_ob » 30 ноя 2012, 12:53

В таком режиме, при 50% шим - двигатель не вращается, так как 50 на плече А и 50 на плече Б в противофазе, при 95% - 95 на плече А , 5 на Б - вращение вправо, при 5% - 5 на А, 95 на Б - вращение влево. Я такой режим еще не пользовал, но так работает новый сервоконтроллер чена.

В твоем мостике можно это реализовать изменив логику микрухи и-не.

Ale писал(а):А дерганье в состоянии покоя рождается из шумов, выводящих схему из состояния покоя, ИМХО

и из-за инерционности и медленного регулятора, имхо
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Re: Данные: что передавать и как регулировать

Сообщение Ale » 30 ноя 2012, 13:18

taran_ob писал(а):В твоем мостике можно это реализовать изменив логику микрухи и-не.


Это уже будет ПОЛНЫЙ мост. Далеко не все могут изменить логику работы на готовых изделиях (на том же Pololu)... Заметь, я не говорю, что полный мост - это плохо :D
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Данные: что передавать и как регулировать

Сообщение taran_ob » 30 ноя 2012, 13:23

:D :D
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Re: Данные: что передавать и как регулировать

Сообщение kuzevan » 30 ноя 2012, 13:26

Про дергание в состоянии покоя. Любая система управления дергается в состоянии покоя. Это связано с инерцией системы, которая перескакивает через цель, и ее приходится возвращать обратно. система входит в колебательный режим. Амплитуда этих дерганий зависит от инерционности системы.
Но иногда, а именно в нашем случае, по причине очень слабого мотора дергания могут быть значительны. объясню смысл коэффициентов К1 и К2, которые вычислются моей сервисной програмой. К2 - минимальный ШИМ (из 255 максимум), на который реагирует двигатель. К1 - это тот прирост ШИМа, который дает двигателю ускорение на 1 единицу (из 255) за период 33 мсек. Поясню это на примере. Допустим, двигатель стоит (а не движется) на позиции 127. Новая цель - 128, сдвинуться ему надо всего на 1 ед. Какой шим подать? S=S0+V0*t+A*t*t/2. В этих условиях A=2. Далее, ШИМ=K1*A+K2. При моих К1=84 и К2=46, ШИМ=214. То есть, чтобы сдвинуть мотор всего на 1 позицию нужен почти полный ШИМ. Да и мотор останавливаться там не собирается, эту позицию он проскочит. Вот он и дергается. Поэтому я поступил просто. если пришедшая новая позиция равна предыдущей - мотор выключаю.
Поэтому я и сильно интересуюсь коэффициентами двигателей и прошу потестивших реальные моторы отписаться, что за мотор, какой вольтаж, мощность и полученные коэффициенты.
AlexVR, ты мотор тестил?
А Тарану отвечу, только после вас. Сначала сам свою программу потесть, потом мне присылай, готовую.
Аватара пользователя
kuzevan
Парторг
 
Сообщения: 60
Зарегистрирован: 25 окт 2011, 17:17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: -6

Re: Данные: что передавать и как регулировать

Сообщение kuzevan » 30 ноя 2012, 14:42

Мой алгоритм не позволяет точно позиционироваться, но появилась одна идея.
Если бы на контроллер поступала бы не только следующая координата, но и скорость в ней, то его работу можно было бы значительно улучшить.
Цикл 33 мсек надо разделить пополам. В первую половину - разгоняемся, во вторую тормозим, так, чтобы достигнуть нужной координаты с нужной скоростью. Параметры разгона и торможения рассчитать легко, но нужно знать скорость. Раз уж Ale строит свою программу, попросим его ввести такую опцию?
Например, вместо AB FF s1 s2 передавать FF s1 s2 v1 v2.
Аватара пользователя
kuzevan
Парторг
 
Сообщения: 60
Зарегистрирован: 25 окт 2011, 17:17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: -6

Re: Данные: что передавать и как регулировать

Сообщение taran_ob » 30 ноя 2012, 15:46

Ну и упрямый же ты...
S=S0+V0*t+a*t*t/2, но так как t у нас условно =1, перепишем:
S-S0=V0+a/2 или dS=V0+a/2
Зная, что скорость двигателя, а следовательно и платформы, пропорциональна действующему напряжению на обмотках, и допуская замкнутость системы, можно утверждать, что ШИМ (далее Р) пропорционален скорости V, P~V, следовательно справедливо равенство P=k*V
Изменение шима во времени dP/dt=k*dV/dt, а так как dV/dt=a , то dP/dt=k*a Умножаем обе части равенства на dt: dP=dt*k*a
Так как dt=const, kx=dt*k. Перепишем изменение момента: dP=kx*a (у тебя там от куда то K2 появилось), или a=dP/kx
Подставим a=dP/kx в уравнение равноускоренного движения dS=V0+a/2:
dS=V0+dP/2*kx, или dP=2*kx*dS-V0
Пусть 2*kx=K1, тогда dP=K1*dS-V0 - ни чего не напоминает? :D
Или P-P0=K1*(S-S0)-V0
Если отбросить P0 и V0 в граничных условиях, то выражение принимает вид пропорциональной составляющей ПИД закона:
P=K1*(S-S0)!!!
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Re: Данные: что передавать и как регулировать

Сообщение taran_ob » 30 ноя 2012, 15:56

kuzevan писал(а):Если бы на контроллер поступала бы не только следующая координата, но и скорость в ней, то его работу можно было бы значительно улучшить.

Конечно, ты же пытаешься строить параболу ;) , а так в системе координат скорости от времени парабола станет прямой, от этого и тебе и легче...
Это на много все усложняет, координаты достаточно, но передвигаться нужно маааленькими шажочками по отрезкам вдоль параболы, никто этого не заметит, чеснослово...
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Пред.След.

Вернуться в X-SIMULATOR и RU-SIMULATOR & SimTools

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 138

x

#{title}

#{text}