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


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

Тестирование прошивки для АМС1.5

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

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

Сообщение Pavel155 » 26 апр 2012, 21:21

Pavel155 - отпишись, а то пропал в приватах, IMHO..

Мне писать то и нечего, все написал Ale.
Почти каждый день редактируется прошивка, я ее зашиваю и начинаем тестить. Отработанные варианты выкладываются тут.
Вот только тестеров очень мало (.
Иногда пропадаю. Пишите в личку.
Аватара пользователя
Pavel155
SIMER
 
Сообщения: 172
Зарегистрирован: 06 июл 2011, 10:39
Откуда: Саратов
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Баллы репутации: 20
Новичок

Сообщение Ale » 28 апр 2012, 20:39

Профиксил один небольшой баг (спасибо Crack) - не инициализировался Kp если не поступали данные от компьютера . Выкладываю свежие прошивки...
http://files.mail.ru/ETYW9P
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение Ale » 30 апр 2012, 09:33

Профиксил ЕЩЕ один небольшой баг (опять спасибо CraCk) - при редактировании настройки Sens1(2)Hi в терминале показывалась текущая настройка Sens1(2)Lo.

Кроме того появилась еще одна "фича" - с помощью дип-переключателя №2 (который идет на порт B5 контроллера) можно установить режим инициализации движков сима при включении контроллера. Если на порт B5 подан лог "0" - то при включении контроллера оси будут устанавливаться в среднее положение ( 127 ). В противном случае, положение осей при включении контроллера не будет меняться.

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

Сообщение Ale » 05 май 2012, 00:09

Хочу предупредить всех, кто уже скачал прошивки, о потенциальной опасности, котрую помог выявить CraCk. К сожалению я забыл настроить на выход одну из ножек контроллера - PC7. Это сигнал MOTOR1 IN2 кажется. В результате с вероятностью 50% может вылететь пол моста. Тут уж как повезет.

Проблему уже исправил. Завтра выложу новые прошивки.

И что стоило Таносу припаять еше 4 резистора в свой мост - с ножек motor in на землю? А сейчас его мост без соединения с контроллером просто опасно включать.

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

Сообщение Ale » 05 май 2012, 06:56

Вот новые прошивки, исправленные. Профиксен баг с инициализацией ножки PC7 контроллера (спасибо CraCk). Версия 1.4
Старые прошивки из раздачи будут удалены...

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

Сообщение Ale » 10 май 2012, 15:10

CraCk писал(а):Еще немного придется целую книгу выдавать по настройке контролера.

Решил написАть про то, что есть. Свести, так сказать, воедино

ОПИСАНИЕ НОВОЙ ПРОШИВКИ

* AMC FirmWare (c) AleSOFT+ e-mail: prilad@mail.ru *
* Описание возможностей и настроек альтернативного программного обеспечения *
* контроллера AMC v.1.5 (разработка контроллера - Thanos ) *
* Текущая версия прошивки - 1.4 (от 05.05.2012). *
*******************************************************************************************************

1. Основной задачей при написании данного программного обеспечения (ПО) было устранение недостатков,
свойственных ПО от Thanos, первым из которых являлось сотутсвие исходников и, как следсвие, возможности
модификации "для себя".


2. Текущая версия прошивки полностью работоспособна на стандартной версии контроллера AMC 1.5.
Реализовано: два канала ШИМ (10 бит) с П-регулированием, обратная связь с резисторов или энкодеров, терминальное управление.


3. Основное отличие от прошивки Таноса заключается в ДИНАМИЧЕСКОМ управлении коэффициентом П-регулятора Kp. При получении
контроллером очередной управляющей команды от компьютера с новым положением осей X(n) и Y(n) вычисляется абсолютное отклонение
от предыдущего задания:

dX = X(n) - X(n-1) и dY = Y(n) - Y(n-1)

Если отклонение dX превышает значение порога KpTh, то в дальнейшем регулирование двигателя производится с коэффициентом KpHI.
В противном случае регулирование двигателя производится с коэффициентом KpLO.

По умолчанию в программе стоят KpHi = 10 (для больших перемещений) и KpLo = 20 (для малых).

Алгоритм настройки может быть следующим - если хотим иметь один Kp (как у Таноса) - выставляем одинаковый KpLo и KpHi.
А вот если хотим нового чего - тогда подбираем порог переключения KpTh и выставляем разные Kp для больших и малых перемещений.
Это (теоретически) должно избавить от "перелетов" при резких перемещениях, но в то же время не терять мелкие вибрации.


4. Для предотвращения раскачивания двигателя вокруг заданной точки введена "мертвая" зона. Если отклонение положения оси
(по информации от датчиков обратной связи) от заданного не правышает значения +/- MinD, то регулирование не производится и
ШИМ выключается.


5. Для предотвращения "сворачивания" оси резистора, а так же для удобства использования датчиков Хола, реализовано регулирование
рабочего диапазона датчиков обратной связи. Введены два программных "концевика" - SensLo (нижний) и SensHi (верхний).
Если код АЦП датчика (при движении оси вниз) достигает значения SensLo, двигатель останавливается. И может сдвинуться только вверх.
Так же работает и верхний "концевик", но только при движении оси вверх. Весь оставшийся диапазон входного напряжения пересчитывается в шкалу 0..255.

По умолчанию SensLo и SensHi выставлены так, что бы (для резистора 270 градусов) ограничить зону регулирования в 180 градусов.
Рабочая зона - в центре резистора. При этом на AVREF нужно подавать тот же потенциал, что и на резисторы ОС.


6. Появилась поддержка энкодеров в качестве датчиков обратной связи. Энкодеры присоединяются к ножкам порта B контроллера:
0,1 для первого канала и 2,3 для второго. Кроме энкодеров необходимо подсоединить концевые выключатели ( 0В - если сработал концевик)
к ножкам порта A: 4(низ), 5(верх) для первого канала и 6(низ), 7(верх) для второго.


7. В связи с появлением энкодеров в прошивку включена процедура начальной калибровки, которая запускается по подаче лог.0 (кнопкой)
на ножку 2 порта А. При этом оси опускаются вниз до упора в концевики и программа фиксирует нулевую позицию осей.
Процедура калибровки может вызываться и из софта сима передачей на контроллер сообщения 0x41, 0x42, 0x7F, 0xXX, 0xXX .


8. Настройка всех параметров доступна с компьютера через терминал. Для перевода контроллера в режим "терминала" используется дип-переключатель №1


9. Дип-переключатель №2 задает режим автоматического перемещения осей в центральное положение при включении контроллера.


(Добавление)
FELiS писал(а):Нашим зарубежным друзьям еще не давали прошивку на тест?

А для друзей пока можно такую инструкцию дать (переводчик google + небольшая правка)

* AMC FirmWare (c) AleSOFT + e-mail: prilad@mail.ru *
* Description of features and options for alternative software *
* Controller AMC v.1.5 (development of the controller - Thanos) *
* The current version of firmware - 1.4 (from 05/05/2012). *


1. The current firmware version is fully functional in the standard version of the AMC controller 1.5.
Implemented: two channels of PWM (10 bits) with P-regulation, feedback resistors or encoders, configuring from terminal.


2. The main difference from the Thanos firmware is DYNAMIC Kp adaptation. For every new positions of the
axes X (n) and Y (n) from PC the absolute deviation from previous are calculated:

dX = X (n) - X (n-1)
dY = Y (n) - Y (n-1)

If the deviation exceeds the threshold value KpTh, then Kp = KpHI. Otherwise Kp = KpLO.

By default KpTh = 5, KpHi = 10 (for large displacements) and KpLo = 20 (for small one).

If you want to have ONE Kp (like in Thanos firmware) - set KpLo = KpHi.
But if you want a something new - you may set up different Kp for both large and small displacements.



3. To prevent swinging motion around a seting position, "dead" zone was created. If the deviation of the axis position
from the specified value is less then + / - MinD, PWM is turn off.



4. Two software "limiter" for every axis was created: SensLo (bottom) and SensHi (top).
If the sensor's ADC code (when axis motion direction is down (up)) reaches SensLo (SensHi), the motor stops.

By default, SensLo and SensHi was configured for limiting working area of potentiometer in 180 degrees (if AREF = 5V).
Working area is in the center of the potentiometer.


5. Added support for encoders as feedback sensors. Encoders attached to the PORTB of the controller:
pins B0,B1 for the first channel and B2, B3 for the second. In addition you may to connect limit switches (0 - is active value)
to the PORTA: pins A4 (bottom), A5 (top) for the first channel and A6 (bottom), A7 (top) for the second.


6. Added the encoder initial procedure, which is run by connecting pin A2 to GND level.


7. Dip-switch #1 configure AMC to work in TTY mode.


8. Dip-switch #2 configure AMC to automatically axes moving to the center position when power is turned on.

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

Сообщение Ale » 21 май 2012, 22:04

Вот очередная версия прошивки - 1.5

http://files.mail.ru/8I3CQJ

Вот описание:

В прошивке 1.5 реализованы/исправлены/дополнены следующие функции:

1 - Переделан вывод на LCD дисплей. Теперь основная строка по каналу управления содержит след. информацию - "задание" , "текущая позиция" , "уровень ШИМ" , "текущий Kp".

2 - С помощью дип-переключателя №3 (порт B6) можно переключить LCD в режим вывода информации только для одного канала (номер канала выбирается дип-переключателем №4 (порт B7)). При этом дополнительно на дисплей выводится номер канала и значения параметров KpLo, KpHi, KpTh, minPWM.

3 - Введен новый параметр управления ШИМ - MinPWM (один на оба канала). Теперь величина ШИМ вычисляется по следующей формуле:

PWM = minPWM + Kp* (текущая_позиция - заданная_позиция)

По умолчанию MinPWM = 0. При настройке предлагается определить величину ШИМ, при которой мотор начинает двигаться, и установить MinPWМ (для начала) в половину меньше этой величины. При этом можно существенно уменьшить Kp.

4 - при редактировании в терминале теперь не обязательно вводить параметры, которые не должны изменяться. Достаточно на запрос просто нажать клавишу Enter

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

Сообщение CraCk » 23 май 2012, 13:33

Ale писал(а):содержит след. информацию - "задание" , "текущая позиция" , "уровень ШИМ" , "текущий Kp".

"текущий Kp" - это лишнее. Лучше оставить как было направление двигателя. По направлению можно с первого раза выставить правильное направление двигателя и ОС а также видно мертвую зону командой OFF.
Ale писал(а):С помощью дип-переключателя №3 (порт B6) можно переключить LCD в режим вывода информации только для одного канала (номер канала выбирается дип-переключателем №4 (порт B7)). При этом дополнительно на дисплей выводится номер канала и значения параметров KpLo, KpHi, KpTh, minPWM.

Ale Извини но это мне кажется обще не нужным. То что я буду видеть параметры каналов на дисплее контроллера нечего не дает. Мне все равно придется подключать к компу для их редактирования, а после изменения я их просто могу выписать на карточку или сделать принтскрин для дальнейшего анализа.
Лутше на эти два порта включит функцию инверсии ШИМ, то есть если кртутить потенциометр в правою сторону в нас есть +1022 в левую -1022. Есть момент когда потенциометр невозможно так закрепит чтобы в право было +1022 то есть Up а в лево -1022 DN, и как раз здесь погордиться инверсия в право -1022 DN в лево Up +1022.
Если смисл не понятен, то потом попробую разъяснить, а то сейчас писал на скорою руку. Спешу на роботу.
P.S.
Все выше это мое мнение. Может я в чем та не прав, и не понял смисыл этой затеи не счет дополнительных данных на дисплее. Мы все таки движемся до вывода данных на экран ПК и полной отвязки от дисплея контроллера.
А в остальном все очень даже неплохо. Понравился ввод данных в терминале. А как на счет проверки в лабе нет проблем с портами???? А то снова будет пухИзображение
Аватара пользователя
CraCk
SIMER
 
Сообщения: 371
Зарегистрирован: 31 мар 2010, 21:25
Откуда: Made in Ukraine
Благодарил (а): 67 раз.
Поблагодарили: 104 раз.
Баллы репутации: 112
ТехнарьТехнарь

Сообщение Ale » 23 май 2012, 14:18

CraCk писал(а):
Ale писал(а):С помощью дип-переключателя №3 (порт B6) можно переключить LCD в режим вывода информации только для одного канала (номер канала выбирается дип-переключателем №4 (порт B7)). При этом дополнительно на дисплей выводится номер канала и значения параметров KpLo, KpHi, KpTh, minPWM.

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

Скажем так - мне всегда не хватает информации для анализа. Вот ты присылаешь хорошие видео с тестирования, но как правило не пишешь, при каких параметрах это видео снимал. Вот я и решил, что бы не переспрашивать, сразу вывести все настройки на дисплей. Тогда при получении очередного видео сразу будет информация для мозгонапряженияИзображение . Так что эти "фичи" с изменением вывода на дисплей будем считать чисто "отладочными". Готов в любой момент откатить назад.

CraCk писал(а):
Ale писал(а):содержит след. информацию - "задание" , "текущая позиция" , "уровень ШИМ" , "текущий Kp".

"текущий Kp" - это лишнее. Лучше оставить как было направление двигателя. По направлению можно с первого раза выставить правильное направление двигателя и ОС а также видно мертвую зону командой OFF.

Вот это нововведение мне как раз казалось полезным. Во первых, индикация текущей величины Kp может помочь найти оптимальный уровень порога KpTh, т.к. только так ты можешь увидеть моменты переключения с KpLo на KpHi и обратно непосредственно в игре.
Во вторых - сообщения DN, UP и OFF дублируются показаниями ШИМ. Если шим = 0, значит мотор = "OFF". Соответсвенно положительный ШИМ означает движение вверх (UP), отрицательный - вниз (DN). По крайней мере так я думал до прочтения твоего предложения по дип-переключателям.

CraCk писал(а):Лутше на эти два порта включит функцию инверсии ШИМ

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

CraCk писал(а):P.S.
Все выше это мое мнение. Может я в чем та не прав, и не понял смисыл этой затеи не счет дополнительных данных на дисплее. Мы все таки движемся до вывода данных на экран ПК и полной отвязки от дисплея контроллера.

Твое мнение пока единственное, если не считать моего Изображение . Движемся потихоньку...
CraCk писал(а):
А как на счет проверки в лабе нет проблем с портами???? А то снова будет пух

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

Сообщение CraCk » 24 май 2012, 12:27

Ale писал(а):Готов в любой момент откатить назад.

Обязательно в следующей версии.

Ale писал(а):Вот это нововведение мне как раз казалось полезным. Во первых, индикация текущей величины Kp может помочь найти оптимальный уровень порога KpTh, т.к. только так ты можешь увидеть моменты переключения с KpLo на KpHi и обратно непосредственно в игре.

Тут я не в курил. Как мне индикация поможет найти оптимальный вариант, если это значение дублируется из параметров терминала величина KpLo?

Ale писал(а):Твое мнение пока единственное, если не считать моего

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

Сообщение Ale » 24 май 2012, 13:06

CraCk писал(а):
Ale писал(а):Вот это нововведение мне как раз казалось полезным. Во первых, индикация текущей величины Kp может помочь найти оптимальный уровень порога KpTh, т.к. только так ты можешь увидеть моменты переключения с KpLo на KpHi и обратно непосредственно в игре.

Тут я не в курил. Как мне индикация поможет найти оптимальный вариант, если это значение дублируется из параметров терминала величина KpLo?

Слухай сюды... Значение на LCD НЕ дублирует параметр KpLo. А показывает ТЕКУЩЕЕ значение Kp, которое в зависимости от игровой ситуации может принимать значение либо KpLo, либо KpHi. Как раз меняя KpTh на основе информации о моментах переключения Kp с одного значения на другое и можно подстроить сим на нужную реакцию для малых и больших перемещений оси.Изображение А момент переключения пока на комп никак не вывести. А в игрушке - вообще никак, без "пока".
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение CraCk » 24 май 2012, 13:52

Ale писал(а):Слухай сюды... Значение на LCD НЕ дублирует параметр KpLo. А показывает ТЕКУЩЕЕ значение Kp, которое в зависимости от игровой ситуации может принимать значение либо KpLo, либо KpHi

Но Kp не меняется при задание положения из ПК через тест плагин. Как раз на дисплее отображается значение из терминала.Если нужно будет то выложу видео.

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

Сообщение Ale » 24 май 2012, 14:15

CraCk писал(а):
Ale писал(а):Слухай сюды... Значение на LCD НЕ дублирует параметр KpLo. А показывает ТЕКУЩЕЕ значение Kp, которое в зависимости от игровой ситуации может принимать значение либо KpLo, либо KpHi

Но Kp не меняется при задание положения из ПК через тест плагин. Как раз на дисплее отображается значение из терминала.Если нужно будет то выложу видео.

Пожалуй, ты прав. Ситуация сложная... Видимо, не получится увидеть, видео не нужно. При больших перемещениях Kp меняется (на KpHi), это да. Но вслед за большим перемещением тут-же передается новая координата (как правило, та же) и Kp опять сбрасывается в KpLo. И реально постоянно (почти постоянно, т.к. все таки с Pavel155 нам иногда удавалось засечь моменты переключения) высвечивается KpLo. Поэтому настраивать придется вслепую, пока не изобретем чего нить новенького Изображение

(Добавление)
Единственное, что приходит на ум, включить некий таймер, который бы принудительно в течение секунды удерживал бы на экране значение KpHi, когда оно там появится

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

Сообщение Segriv » 24 май 2012, 14:59

извиняюсь что влез сюда, я пробовал сделать так (получается, что ваш Kp будет меняться пропорционально отклонению от заданного). Kp - настраиватеся таким образом, чтобы при максимальном рассогласовании Kd принимало значение KpHi, а при минимальном Kplo, ну и промежуточные значения пропорционально:

Кd=(текущая_позиция - заданная_позиция)/Kp
PWM = minPWM + Kd* (текущая_позиция - заданная_позиция)



получалось лучше, чем так:
PWM = minPWM + Kp* (текущая_позиция - заданная_позиция)
вЭлкам на rk-stud.ru
Аватара пользователя
Segriv
Парторг
 
Сообщения: 74
Зарегистрирован: 06 окт 2011, 21:43
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Баллы репутации: 0

Сообщение Ale » 25 май 2012, 07:38

Segriv писал(а):
Кd=(текущая_позиция - заданная_позиция)/Kp
PWM = minPWM + Kd* (текущая_позиция - заданная_позиция)

???Изображение
Налицо некоторое недопонимание, по крайней мере с моей стороны. Фактически ты сделал Kp зависимым от ТЕКУЩЕГО РАССОГЛАСОВАНИЯ, т.е. отклонения текущей ПОЗИЦИИ от заданной. А у меня идея заключается в том, что Kp зависит от ЗАДАНИЯ, т.е выбирается исходя из отличия заданной позиции от предыдущей заданной позиции.
В терминах алгоритма это выглядит так
TAG[n] - текущая заданная позиция
TAG[n-1] - предыдущая заданная позиция
в момент прихода по интерфейсу значения TAG[n] производится анализ
If (abs(TAG[n]-TAG[n-1]) > KpTh)
{
Kp = KpHi;
}
else
{
Kp = KpLo;
}

и дальше, до прихода следующего задания от компьютера регулирование по формуле
PWM = minPWM + Kp* (текущая_позиция - заданная_позиция)


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

Пред.След.

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

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 13

x

#{title}

#{text}