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


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

Новейшая прошивка для Arduino.

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

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

Новейшая прошивка для Arduino.

Сообщение Ale » 22 июн 2015, 16:30

Дабы не растекаться по разным темам открываю еще один топик. Будет посвящен очередной "реинкарнации" прошивки контроллера.

Первый вопрос - ЗАЧЕМ? :lol:
Ответ простой - меня все еще не удовлетворяет работа разных версий... А поскольку и мой сим ( о Боже!!!) вроде как уже на подходе, и много новых мыслей в голове, таки решил...

Второй вопрос - ДЛЯ ЧЕГО? (в смысле - для какого железа).
Ответ - платформа Arduino. Более того, решил отказаться от CVAvr и попробовать собрать прошивку непосредственно в IDE Arduino, дабы облегчить ее переносимость внутри семейства, а так же отдать пользователю на растерзание. И что бы не тянуть совершенно ненужный шлейф настроек через интерфейс.

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

Ну и само собой будут охвачены все возможные мосты, начиная с совместимости по пинам с MonsterMotor Shield.

Третий вопрос - В ЧЕМ ОТЛИЧИЕ ОТ ПРЕДЫДУЩИЙ ВЕРСИЙ?
Мы тут довольно долго в ветке "Чем и как управлять" обсуждали всякие алгоритмы управления. В предыдущей версии (которая так и осталась на стадии ранней "альфа") я надеялся реализовать полный PID контроллер, но что-то толку особого не получилось.
Потом стремился увеличить скорость обработки (период цикла PID-регулирования). Только это не привело к улучшению работы.
И вот примерно с год назад наткнулся на статью, в которой вполне аргументировано показывалось, что выгоднее нашими моторами управлять "импульсно" - давать полный газ на некоторое время, а потом паузу. Утверждалось, что в таком режиме динамика мотора гораздо меньше зависит от переменной нагрузки. И вот эту идею я и хочу реализовать (после обсуждения с электриком и SimAl)

В общем - в этой ветке следите за прогрессом и давайте обсуждать...

В следующем посте напишу еще про то - чем собственно будем управлять... Хочу управлять СКОРОСТЬЮ мотора, а не его положением...
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Новая прошивка для Arduino.

Сообщение Death_Morozz » 23 июн 2015, 00:08

Ale писал(а):В общем - в этой ветке следите за прогрессом и давайте обсуждать...


Что мне нравится, - что разработчик сам себе тех.задание нарисовал. ;)
Хочешь сделать хорошо - сделай это сам.
Изображение
Аватара пользователя
Death_Morozz
Фраерок
 
Сообщения: 2660
Зарегистрирован: 11 янв 2007, 23:35
Откуда: Ростов-на-Дону
Благодарил (а): 767 раз.
Поблагодарили: 291 раз.
Баллы репутации: 200
ТехнарьТехнарьТехнарь

Re: Новая прошивка для Arduino.

Сообщение SimAl » 23 июн 2015, 00:37

Ale писал(а):Второй вопрос - ДЛЯ ЧЕГО? (в смысле - для какого железа).
Ответ - платформа Arduino. Более того, решил отказаться от CVAvr и попробовать собрать прошивку непосредственно в IDE Arduino, дабы облегчить ее переносимость внутри семейства, а так же отдать пользователю на растерзание. И что бы не тянуть совершенно ненужный шлейф настроек через интерфейс.
Есть такая штука Visual Мicro. Она, вроде, позволяет редактировать ардуиновские скетчи в нормальной IDE - Amtel Studio или Visual Studio. У меня, правда не взлетела, но я и хотел от нее немного другого - скомпилировать адруиновский скетч без ардуиновского загрузчика.
Аватара пользователя
SimAl
SIMER
 
Сообщения: 347
Зарегистрирован: 22 ноя 2013, 20:03
Откуда: Кропивницкий
Благодарил (а): 56 раз.
Поблагодарили: 235 раз.
Баллы репутации: 108
ТехнарьТехнарь

Re: Новая прошивка для Arduino.

Сообщение Ale » 23 июн 2015, 08:32

SimAl писал(а):
Ale писал(а):Второй вопрос - ДЛЯ ЧЕГО? (в смысле - для какого железа).
Ответ - платформа Arduino. Более того, решил отказаться от CVAvr и попробовать собрать прошивку непосредственно в IDE Arduino, дабы облегчить ее переносимость внутри семейства, а так же отдать пользователю на растерзание. И что бы не тянуть совершенно ненужный шлейф настроек через интерфейс.
Есть такая штука Visual Мicro. Она, вроде, позволяет редактировать ардуиновские скетчи в нормальной IDE - Amtel Studio или Visual Studio. У меня, правда не взлетела, но я и хотел от нее немного другого - скомпилировать адруиновский скетч без ардуиновского загрузчика.

А зачем скетч Ардуино компилить без ардуино IDE? Я в свое время просто отказался от IDE и писал на CodeVisionAVR C . Мог бы и на ассемблере, да уже обленился. Потому как люблю все держать под контролем (вплоть до такта).
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Новейшая прошивка для Arduino.

Сообщение SimAl » 23 июн 2015, 09:03

Затем, что Arduino IDE какая-то ущербная. В xxx Studio есть вкладки, автозавершение, нормальная навигация по проекту, рефакторинг, системы контроля версий (хотя я ими и не пользуюсь, а надо бы). Удобнее просто. Вот сейчас попробовал, Arduino IDE даже не открывает *c, *.cpp файлы, как можно все исходники прошивки запихнуть в один *.ino файл?
Для конечных пользователей результат будет нормально собраться под Arduino IDE.
В моем случае я вынужденно переползал под Atmel Studio. У меня есть AVRDRAGON, в нем есть дебаг на реальном устройстве, хтелось его заюзать, но он работает только в студии.
Аватара пользователя
SimAl
SIMER
 
Сообщения: 347
Зарегистрирован: 22 ноя 2013, 20:03
Откуда: Кропивницкий
Благодарил (а): 56 раз.
Поблагодарили: 235 раз.
Баллы репутации: 108
ТехнарьТехнарь

Re: Новейшая прошивка для Arduino.

Сообщение Ale » 23 июн 2015, 09:23

SimAl писал(а):Затем, что Arduino IDE какая-то ущербная. В xxx Studio есть вкладки, автозавершение, нормальная навигация по проекту, рефакторинг, системы контроля версий (хотя я ими и не пользуюсь, а надо бы). Удобнее просто. Вот сейчас попробовал, Arduino IDE даже не открывает *c, *.cpp файлы, как можно все исходники прошивки запихнуть в один *.ino файл?
Для конечных пользователей результат будет нормально собраться под Arduino IDE.
В моем случае я вынужденно переползал под Atmel Studio. У меня есть AVRDRAGON, в нем есть дебаг на реальном устройстве, хтелось его заюзать, но он работает только в студии.

Тогда вообще не понятно, зачем тебе скетчи? Пользуй любой тулчейн, который выдает HEX файл на выходе. И прошивай его в ардуину :)
Я же сейчас хочу сделать прогу на 100 строк кода максимум. Надеюсь не запутаться. Отлажу либо в протеусе, либо на контроллере непосредственно.
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Новейшая прошивка для Arduino.

Сообщение Ale » 23 июн 2015, 11:48

От блинство. :evil: Лежал в загашнике шилд от sparcfun. Думал потестить прошивку, так одно плечо в одну сторону не открывается, зарраза :x

В общем - в первом приближении прошивка готова. По осциллографу и в протеусе работает. Можно потестить, а я пока подготовлю софт для графического отображения (адаптирую свой xSimCtrl)

Ale_2DOF_Arduino_code.rar
(3.64 КБ) Скачиваний: 102


Я старался написать комментарии прямо в файле прошивки. Но естественно будем тут описывать тонкости.
Да, сейчас она на схему MonsterMotor Shield по ногам настроена.
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Новейшая прошивка для Arduino.

Сообщение Ale » 23 июн 2015, 12:35

Два слова про то - что и как регулируется прошивке.

Еще раз напомню, что прошивка заточена под медленный ШИМ. Cейчас период ШИМ всего 100 Гц. То есть он сравним со скоростью поступления данных из игры. Раз так, нет возможности (и необходимости) в П-регулировании (в том смысле, что нечего регулировать "постфактум", отрабатывать (так сказать) новое положение мотора).

Отсюда возникла следующая схема регулирования - С частотой 100 Гц вычисляем:

1) - "скорость" мотора на предыдущем шаге (speedOLD) - то есть считываем показание потенциометра и вычитаем из него предыдущее (полученное 10 мс назад). Фактически это изменение позиции мотора за один шаг (за 10 мс), но поскольку время шага фиксированo, то вполне можно говорить о скорости, просто я не делю изменение позиции на время.

2) - необходимую "скорость" для достижения новой заданной позиции (speedCUR) - то есть высчитываем разницу между новой позицией (полученной по интерфейсу из игры) и текущей позицией (показанием потенциометра)

3) - вычисляем разницу этих двух скоростей (speedGAP). И пропорционально этой разнице устанавливаем длительность импульса ШИМ.

4) - Если текущая позиция совпадает с заданной с точностью до ширины мертвой зоны, то импульс ШИМ не формируется.

Вот примерно так сейчас организован алгоритм регулирования.

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

Re: Новейшая прошивка для Arduino.

Сообщение Ale » 23 июн 2015, 15:27

Вот свежий вариант - уже комплект.
Прошивка получает и передает данные программе. Для отладки, короче...
После подсоединения arduino к компу и (затем) запуска программы настройте ком-порт (57600, 8, 1 , без паритета)

ardSimCTRL.rar
(332.65 КБ) Скачиваний: 98


Ale_2DOF_Arduino_code.rar
(3.94 КБ) Скачиваний: 101


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

Re: Новейшая прошивка для Arduino.

Сообщение электрик » 23 июн 2015, 15:49

Але оболдеть какая скорость :shock: :shock: :shock: :shock: Супер Это я про написание софта. :shock:
Аватара пользователя
электрик
Резидент
 
Сообщения: 379
Зарегистрирован: 30 мар 2011, 15:48
Откуда: Москва
Благодарил (а): 68 раз.
Поблагодарили: 145 раз.
Баллы репутации: 66
Технарь

Re: Новейшая прошивка для Arduino.

Сообщение Ale » 23 июн 2015, 16:13

электрик писал(а):Але оболдеть какая скорость :shock: :shock: :shock: :shock: Супер Это я про написание софта. :shock:


Ну да, практически в прямом эфире )) Хотя софт для компа я всего лишь адаптировал под новую прошивку.

Вот с установленным DeadTime (500 мкс) при переключении направления. Проверил по осциллографу. При желании можешь поправить константу.

Ale_2DOF_Arduino_code_deadtime_500us.rar
(4.22 КБ) Скачиваний: 75


В общем, пока притормаживаю. До начала тестирования и обсуждения. ;)
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Новейшая прошивка для Arduino.

Сообщение электрик » 23 июн 2015, 16:17

Ок супер. Завтра поставлю на стенд с мостом ir2104 12v, ir2104 24v, VNH3SP30. Ночером будем разбираться с ардуиной.
Аватара пользователя
электрик
Резидент
 
Сообщения: 379
Зарегистрирован: 30 мар 2011, 15:48
Откуда: Москва
Благодарил (а): 68 раз.
Поблагодарили: 145 раз.
Баллы репутации: 66
Технарь

Re: Новейшая прошивка для Arduino.

Сообщение Ale » 23 июн 2015, 18:50

Собрал в протеусе схему с сервомотором, что-то прошивка не правильно реагирует, разбираюсь

UPD. Опана!!! Не устанавливайте версию 1.6 IDE Arduino. В ней мой скетч не работает, пришлось откатиться на версию 1.5.5
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Новейшая прошивка для Arduino.

Сообщение Ale » 23 июн 2015, 19:48

Ну вот, симулирую в протеусе. Мотор крутится на с перерегулированием. Но это моделирование БЕЗ нагрузки. В этом случае просто нужно уменьшить максимальный ШИМ в прошивке...
В общем - работает, вроде.
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Re: Новейшая прошивка для Arduino.

Сообщение Ale » 23 июн 2015, 20:10

Поигрался с возможностью настройки прошивки. Пока на эмулятора (протеус)

Вот константы, которыми можно настраивать поведение двигателя

#define TIMER_FREQ_HZ 1000 // частота основного таймера (timer2)
#define TIMER_PERIOD 10 // делитель для основного таймера,
#define PWM_MAXW 9 // максимальная скважность ШИМ меньше чем TIMER_PERIOD
#define PWM_MINW 1 // минимальная скважность ШИМ


В общем, поставил 700, 7, 7, 1 - перелеты пропали.
Неплохо работают 1000, 10, 10, 1
Вообще то я в прошивке указал в комментариях, что PWM_MAXW должна быть хотя бы на 1 меньше TIMER_PRIOD. Но видимо округление в процедуре map() позволяет выставлять и одинаковыми эти значения. Хотя лучше все таки предохраняться и не ставить эти величины одинаковыми.
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

След.

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

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

Сейчас этот форум просматривают: Andrey.Lukyanov, Bing [Bot] и гости: 11

x

#{title}

#{text}