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


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

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

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

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

Сообщение kuzevan » 21 ноя 2012, 23:48

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

Сообщение CraCk » 21 ноя 2012, 23:58

Ale писал(а):Я бы себе вот такую штуку прикупил быhttp://motiondynamics.com.au...rs/12v-180w.html

Или эти
http://ebay.com/itm/DC-Motor...h=item58913c7a02

http://ebay.com/itm/25-1-MCP...h=item19c9478c8f

С редуктором можно по комбинировать. Уменьшит передаточное число и увеличить крутной момент.
Аватара пользователя
CraCk
SIMER
 
Сообщения: 371
Зарегистрирован: 31 мар 2010, 21:25
Откуда: Made in Ukraine
Благодарил (а): 67 раз.
Поблагодарили: 104 раз.
Баллы репутации: 112
ТехнарьТехнарь

Сообщение Ale » 22 ноя 2012, 00:02

kuzevan писал(а):О шаговиках я не отзывался пренебрежительно, напротив, я их люблю. Просто сомневаюсь, что они тянут эти скорости.

Давай прикинем. Из опыта общения на форумах я для себя выяснил, что перемещение от нижней точки оси до верхней должно занимать порядка 1 секнды на максимальной скорости. Пусть я ошибся и мы усложним задачу - 0.5 секунды. Для движителей с "замедляющими" редукторами это перемещение равно половине оборота вала редуктора - 180 градусов. Редукторы применяются обычно с передаточным числом 25. Итого - Один оборот редуктора в секунду = 25 оборотов в секунду для вала шаговика. Ну а дальше надо смотреть - сколько шагов на оборот. Если 200, то максимальная частота следования импульсов на обмотки составляет 5000 Гц (25*200). Цифра не выглядит фантастической. Мы мостом качаем 20 кГц. Насколько я помню, есть шаговики и с меньшим кол-вом шагов на оборот.
Если я ошибаюсь, поправь меня.
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение CraCk » 22 ноя 2012, 00:12

Ale писал(а):Я бы себе вот такую штуку прикупил быhttp://motiondynamics.com.au...rs/12v-180w.html

Или эти
http://ebay.com/itm/DC-Motor...h=item58913c7a02

http://ebay.com/itm/25-1-MCP...h=item19c9478c8f

С редуктором можно по комбинировать. Уменьшит передаточное число и увеличить крутной момент.
Аватара пользователя
CraCk
SIMER
 
Сообщения: 371
Зарегистрирован: 31 мар 2010, 21:25
Откуда: Made in Ukraine
Благодарил (а): 67 раз.
Поблагодарили: 104 раз.
Баллы репутации: 112
ТехнарьТехнарь

Сообщение taran_ob » 22 ноя 2012, 00:23

Ale писал(а):Я предлагаю следующую схему - при получении новой координаты рассчитывать скорость перемещения = (X(n) - X(n-1)) /T и заставлять двигатель перемещаться к новому заданию с заданной скоростью.

Блин, так мы говорим об одном и том же!!! (X(n) - X(n-1))-это рассогласование (мгновенная скорость). Только на Т делить не надо так как это константа-период интегрирования (или период расчета шим, в идеале должно быть и периодом приема данных, в общем называйте как хотите), входит в коэффициент пропорциональности, который тоже константа при постоянной массе игрока. А это и есть наш Kp, который "обеспечивает" пропорциональность мгновенной скорости и величины ШИМа для обеспечения этой скорости.



(Добавление)
Ale писал(а): если мы ХОТИМ в точности повторять профиль трассы (а мне кажется как раз к этому надо стремиться)


ну скорей не профиль трассы, а положение авто в пространстве

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


А этого ни кто и не требует, да это и не возможно ввиду инерционности системы и малого периода приема координат. Мы всегда будем опаздывать, если не будет перерегулирования. А вот чтоб не было перерегулирования, при максимальной динамике нужно добавить интегральную составляющую, увеличивать быстродействие всей системы. Ты сам себе противоречишь, говоря, что нужно повторить профиль трассы и при этом не делать этого быстро. Зачем нам профиль потом, когда мы его уже проехали?

Ale писал(а):В результате на быстые изменения позиции система не может отреагировать в силу инерционности, а на медленные - доезжает и останавливается... Оно нам надо?


Думаю что это сейчас происходит из-за того, что период расчета ШИМ на много меньше приема координат, и медленного регулятора (без интеграла и дифференциала).

Ale писал(а):Кстати, сейчас вся ситема именно на это и заточена, как впрочем и классический ПИД

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


И не нужно упрощать задачу, хуже все равно получится...
Изображение

(Добавление)
CraCk писал(а):Только скажу что все зависит от мощности двигателей.

Это не панацея, хороший контроллер все равно нужен.

CraCk писал(а):Если решите проблему с настройкой МК тогда вылезут проблемы с реакцией симулятора.

Пытаемся доказать обратное.

CraCk писал(а):За четыре года поездок в автобусе на работу не замечал такого.

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

Сообщение taran_ob » 22 ноя 2012, 02:50

Ale писал(а):Давай прикинем. Из опыта общения на форумах я для себя выяснил, что перемещение от нижней точки оси до верхней должно занимать порядка 1 секнды на максимальной скорости. Пусть я ошибся и мы усложним задачу - 0.5 секунды. Для движителей с "замедляющими" редукторами это перемещение равно половине оборота вала редуктора - 180 градусов. Редукторы применяются обычно с передаточным числом 25. Итого - Один оборот редуктора в секунду = 25 оборотов в секунду для вала шаговика. Ну а дальше надо смотреть - сколько шагов на оборот. Если 200, то максимальная частота следования импульсов на обмотки составляет 5000 Гц (25*200). Цифра не выглядит фантастической. Мы мостом качаем 20 кГц. Насколько я помню, есть шаговики и с меньшим кол-вом шагов на оборот.Если я ошибаюсь, поправь меня.


Если возвращаться к степдиру. Я почему сразу на него подумал, потому что системы очень похожи. В симе координата дискретная - это шаг. В чпу главное повторить заданную траекторию и в симе тоже. И степдир ПИД сервоконтроллер в чпу - яркий пример того, что ПИД регулятор хорошо справляется с задачей позиционирования. Просто для понимания ПИД, рассматривать систему сима и чпу нужно не в глобальном масштабе времени, а за период получения нового задания (расчета ШИМ).
Но вот на шаговик, я бы сильно не рассчитывал. Повторю главные недостатки. Шум. Потеря момента на резонансной скорости. Сложное управление - очень чувствительное к помехам. Два Н моста на движок. Скачкообразное вращение на малых скоростях в полношаговом режиме. Положительная стороны. Есть полно готовых решений драйверов. Можно обойтись без редуктора. Максимальная частота шага с приличным моментом около 800 - 1000Гц в полном шаге. При 200 шагах на оборот - 300об/мин.
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

Сообщение taran_ob » 22 ноя 2012, 10:33

Ale писал(а):


Посмотрел твои исходники, таки ты не любитель... Изображение Признаюсь, по началу я тебе недооценил, и предложил использовать готовое решение пид сервоконтроллера совместно с простым контроллером сима. Но теперь уверен что ты бы смог реализовать, предложенную ранее несколькими участниками форума, конфигурацию: на каждый двигатель по контроллеру (интеллектуальному) прямо к компу. В качестве интерфейса взять rs485. Протокол - практически у тебя уже есть свой (нужно только дописать адресацию в режиме конфигурирования, а в рабочем режиме- широковещание, каждый контроллер забирает свою координату), судя по названым цифрам - шустрый. Кто не знает, 485 интерфейс - это два провода (витая пара с синфазными сигналами) на котором запараллелины все устройства(слейвы) вместе с компом(мастер), интерфейс промышленный - помехозащищенный. Микросхема преобразователь rs232-rs485 и обратно стоит менее 1$ и имеет 8 ног. Контроллер типа мега8 или 88, ну или какой то с аппаратным декодированием энкодера, так как на обработку сигналов с него уходи довольно много процессорного времени. В таком варианте все аппаратные ресурсы микроконтроллера будут предоставлены одному двигателю, что в свою очередь должно повысить быстродействие и расширить возможности - быть универсальным!

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

Сообщение kuzevan » 22 ноя 2012, 11:17

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

Сообщение taran_ob » 22 ноя 2012, 13:35

Набросал график для понимания П регулятора.
https://skydrive.live.com/redir?resid=B557CEBDD9406F6D!123

(Добавление)
kuzevan писал(а):По шаговикам. Они великолепны в ЧПУ, где требуется точное позиционирование, для этого и созданы. Но в динамических задачах, где мы моделируем действительность, мне кажется, обычные двигатели лучше.


Полностью поддерживаю.

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

Сообщение taran_ob » 22 ноя 2012, 15:59

Код: Выделить всё
  Вот код одностороннего воздействия. Проверенный в регуляторе оборотов.  Для сима осталось ввести отрицательное воздействие (реверс) и, думаю, в качестве параметра регулирования в диф составляющей нужно задавать [b]ускорение[/b], чтоб не возникало [b]толчка[/b] (третья производная координаты). Для одностороннего воздействия как то так:  
(квадрат времени константа, по этому учитываем ее в KOEFd2)  POWER=(KOEFp*ERROR)+(KOEFi*ERRORsum)+((ERRORdelta-ERRORdeltatemp)*KOEFd2);  
ERRORdeltatemp=ERRORdelta        #define POWERmax 252              // максимальная мощность  #define POWERmin 0                  // минимальная мощность  #define KOEFp 2            //коэффициент P  
#define KOEFi 0.06        //коэффициент I  
#define KOEFd 0.4         //коэффициент D    //функция возвращает значение необходимого воздействия по ПИД  
unsigned char PID(unsigned int ITEMset, unsigned int ITEMget)  {  static signed int  POWER, ERRORsum, ERRORdelta, ERRORtemp, ERROR;    ERROR=ITEMset-ITEMget;                                                              //ошибка регулирования                      if ((POWER>0)&(POWER<POWERmax)) ERRORsum=ERRORsum+ERROR;                            //если предел регулирования не достигнут, рассчитываем сумму ошибок  
ERRORdelta=ERROR-ERRORtemp;                                                         //изменение ошибки  ERRORtemp=ERROR;                                                                    //текущая ошибка стала прошлой  POWER=(KOEFp*ERROR)+(KOEFi*ERRORsum)+(KOEFd*ERRORdelta);                            //расчет воздействия по ПИД закону  
if ((POWER>POWERmin)&(POWER<POWERmax)) return (char)POWER; else {if (POWER<=POWERmin) return POWERmin; if (POWER>=POWERmax) return POWERmax;}; //проверка предела воздействия  }
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

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

Сообщение kuzevan » 24 ноя 2012, 00:16

Извините, коллеги, в первом посте я ошибся. Последние две формулы и текст должны выглядеть так:
При положительной скорости (движение вверх)
ШИМ=57*А+42,
При отрицательной (движение вниз)
ШИМ=57*A-42.
Аватара пользователя
kuzevan
Парторг
 
Сообщения: 60
Зарегистрирован: 25 окт 2011, 17:17
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: -6

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

Сообщение Ale » 24 ноя 2012, 00:21

kuzevan писал(а):Извините, коллеги, в первом посте я ошибся. Последние две формулы и текст должны выглядеть так:
При положительной скорости (движение вверх)
ШИМ=57*А+42,
При отрицательной (движение вниз)
ШИМ=57*A-42.

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

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

Сообщение taran_ob » 24 ноя 2012, 02:15

Бред, нельзя говорить о прямой зависимости ускорения от ШИМа!!! Потому что получится вечный двигатель: ШИМ=константа -> ускорение=константа -> скорость=стремится к бесконечности... Вот зависимость скорости от ШИМ - это да.
kuzevan, ты просто не хочешь понять принцип пропорционального регулирования. Любое движение с ускорением можно разбить во времени на движение с постоянной, мгновенной скоростью, которая зависит от шима пропорционально (в идеале). ШИМ=K*((Х-Х0)/t), так как t=const, K=const, то Kp=K/t, следовательно ШИМ=Kp*(X-X0), где Кр-коэффициент пропорциональности, X0 - текущая координата сима, Х - будущая координата сима через время t=const - период интегрирования. Следовательно, если все правильно, то через время t - X0=Х, то есть траектории будут одинаковыми, но с разницей во времени t=const, а это означает что и ускорения в любой момент времени будут одинаковыми.
taran_ob
Комсорг
 
Сообщения: 137
Зарегистрирован: 27 окт 2012, 22:05
Откуда: Ukraine
Благодарил (а): 5 раз.
Поблагодарили: 11 раз.
Баллы репутации: 19
Новичок

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

Сообщение taran_ob » 24 ноя 2012, 02:17

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

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

Сообщение taran_ob » 24 ноя 2012, 02:28

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

Пред.След.

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

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

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

cron
x

#{title}

#{text}