Телеметрия (часть 1)
>С чипом справился! Ура мне и памятник.
Как именно?
А у меня тут пара мыслей по поводу оптимизации кода телеметрии появилось, на досуге набросал болванку того, как будет выглядеть экспериментальная прошивка. Авиагоризонта без автопилота, разумеется, не будет. Остально должно бегать на стандартной плате телеметрии.
Пара пояснений:
[H] - иконка базы, вертится вместе с изменением курса
~045 и ~1150 - скорость высота по бародатчикам (если установлены)
085 и 1277 - скорость и высота по GPS
Текущий курс:
–N—NE—
^
Вот эти штучки не плавно вверх-вниз ползают, а прыгают по одной строке (Если памяти хватит, то по полстроки):
|
>1300
|
|
Наклонная линия авиагоризонта рисуется в окошке 5х3 символа псевдографикой.
Ну а остальное и так понятно.
Как именно?
Элементарно! (с)
Бутлодер там, оказывается, с завода идёт. А я не знал…
Фьюзы, в принципе, как надо настроены. Разьве что JTAG я бы отключил, но у меня всё равно эти лапы не используются.
Чип залочен, прошить программатором можно только полностью его сотря, но внутрях бутлодер версии 101, такой же как в последних кеях. И этот бутлодер не слетает со временем (я не заметил), а вот бутлодер 100, который в старых кеях и который лежит на их сайте, имеет свойство к самоубиванию. По этому я не стал перепрошивать чип а оставил всё как есть.
Пока только ПЛЛ перенастроил на 16 МГц, прошивка отзывается (энумерируется). Вечером буду переделывать задержки и т.д. под новый кварц (не вставил дефайнов, лошарик…).
Ну а к программатору скачал последнюю программу, обновил фирмварю и всё заработало.
Сейчас меня больше волнует починка аэроплана. Один добрый самаритянин дал регулятор на пробу, надо будет попробовать завести движок.
Если кому-то интересно, залил текущую версию компукового приложения для автопилота: smalltim.ru/f/smalltim_ap_pc_client.rar
Далеко не всё еще готово, и без самой платы мало что получится проверить, ибо плата существует пока в единственном экземпляре, у меня любимого, но можно полазить по менюшкам, потыкать кнопки и посмотреть как всё будет выглядеть.
Рюшек-плюшек, красивостей да картинок пока нет, да и вряд ли будут.
Всё, что нужно для работы программки - эти 3 файла в архиве и еще нужен будет драйвер для Атмег в DFU режиме.
Просмотровщик полетных логов с клевыми графопостроительными возможностями как бы готов, но еще не прикручен к коду.
Гляньте, может быть, какие-нибудь интересные идеи возникнут. Например, что думаете насчет пресетов для типовых моделей и визарда или “Мастера настроек” для… хм… самых ленивых любителей FPV?
Заодно можно пнуть меня, если вдруг вылезут какие-то глюки. Например, на 64-битных осях это вообще не проверялось. На 32-битных ХР/Vista проверялось, работает.
>И в режиме стабилизации, микс элероны-флапы(тормоза), тоесть поймет ли контролеер такую комбинацию из двух серв сигналов на них?
Это очень-очень критично? В принципе, можно такое приколхозить, ибо помимо 4 входов-выходов РРМ (элероны, РН, РВ, газ) у автопилота есть 5й вход РРМ (только вход!) для управления режимами. Можно этот 5й вход заиспользовать.
Вы только простите меня, грешного, но я моделей с флаперонами никогда в жизни не имел, поэтому не уверен, что на 100% правильно понимаю, как оно построено.
Какая там раскладка сигналов по каналам? Т. е. что как миксуется на передатчике, на модели, сколько серв, как подключены и как стоят? Сами понимаете, если нужно, то замиксовать как угодно какие угодно каналы на плате автопилота - ваще нивапрос.
Как я уже сказал дело даже не в самих флапах-тормозах а в наличии двух каналов для двух машинок. Собственно работает это просто. В крыле две машинки и каждая подключена на свой канал, миксирование происходит в передатчике. Сбственно от стабилизатора требуется пропустить через себя эти два канла в режиме стабилизации выдавать сигналы по двум выходам на каждый элерон отдельно. В режиме тормоза оба элерона идут вверх практически до упора соответственно, стабилизатор работает как и прежде только он не должен превышать эти углы отклонения вверх (или вниз, кто как и зачем использует) что собственно уже заложено как я понимаю. Но как я понял, уже все занято и организовать еще один РРМ вход-выход нельзя.
На самом деле это не критично. Но жаль 😃 Можно через бортовой V микшер можно будет огранизовать эту же функцию, просто больше гемора и “лишних” девайсов на борту .
smalltim, а кварц в Вашем автопилоте на 16?
Кроме PLL что-нибудь перенастраивалось?
У меня странный глюк при переносе прошивки с кея. Энумерация проходит успешно, чип определяется, даже специальный светодиодик загорается. Но первое же сообщение отправавляет чип в аут. Коммуникация падает, но чип не зависает…
Не могу понять в чём фишка. Пока только перенастроил PLL на другой кварц:
PLLCSR = ( ( (1<<PLLP2) | (0<<PLLP1) | (1<<PLLP0) ) | (1<<PLLE) )
Причём если сделать по ДШ, ( (1<<PLLP2) | (1<<PLLP1) | (0<<PLLP0) ), то нихрена не работает.
Может, Вам приходилось с таким сталкиваться?
16 МГЦ.
#define PLLx24 ( (0<<PLLP2) | (0<<PLLP1) | (0<<PLLP0) )
#define PLLx12 ( (0<<PLLP2) | (0<<PLLP1) | (1<<PLLP0) )
#define PLLx08 ( (0<<PLLP2) | (1<<PLLP1) | (0<<PLLP0) )
#define PLLx06 ( (0<<PLLP2) | (1<<PLLP1) | (1<<PLLP0) )
#define PLLx04 ( (1<<PLLP2) | (0<<PLLP1) | (0<<PLLP0) )
#define PLLx03 ( (1<<PLLP2) | (0<<PLLP1) | (1<<PLLP0) )
#define PLLx04_8 ( (1<<PLLP2) | (1<<PLLP1) | (0<<PLLP0) )
#define PLLx02 ( (1<<PLLP2) | (1<<PLLP1) | (1<<PLLP0) )
//! @brief Start the PLL at only 48 MHz, regarding CPU frequency
//! Start the USB PLL with clockfactor
//! clockfactor can be PLLx24, PLLx12, PLLx08
//! PLLx06, PLLx04, PLLx03
#define Start_pll(clockfactor) \
(PLLCSR = ( clockfactor | (1<<PLLE) ))
//! return 1 when PLL locked
#define Is_pll_ready() (PLLCSR & (1<<PLOCK) )
//! Test PLL lock bit and wait until lock is set
#define Wait_pll_ready() while (!(PLLCSR & (1<<PLOCK)))
//! Stop the PLL
#define Stop_pll() (PLLCSR &= (~(1<<PLLE)),PLLCSR=0 )
// Start the PLL in autofactor mode
// regarding FOSC define
#if (FOSC==2000)
//! Start the PLL in autofactor mode
//! regarding FOSC define
#define Pll_start_auto() Start_pll(PLLx24)
#elif (FOSC==4000)
#define Pll_start_auto() Start_pll(PLLx12)
#elif (FOSC==6000)
#define Pll_start_auto() Start_pll(PLLx08)
#elif (FOSC==8000)
//! Start the PLL in autofactor mode
//! regarding FOSC define
#define Pll_start_auto() Start_pll(PLLx06)
#elif (FOSC==12000)
#define Pll_start_auto() Start_pll(PLLx04)
#elif (FOSC==16000)
#define Pll_start_auto() Start_pll(PLLx03)
#elif (FOSC==20000)
#define Pll_start_auto() Start_pll(PLLx04_8)
#elif (FOSC==24000)
#define Pll_start_auto() Start_pll(PLLx02)
#else
#error “FOSC should be defined in config.h”
#endif
Да, это то понятно. Но есть нюанс (с)
Для 128* и 64* PLLx03 имеет разные значения.
#if defined (__AT90USB1287__) || defined (__AT90USB1286__)
#define PLLx03 ( (1<<PLLP2) | (0<<PLLP1) | (1<<PLLP0) )
#else // __AT90USB647__, __AT90USB646__
#define PLLx03 ( (1<<PLLP2) | (1<<PLLP1) | (0<<PLLP0) )
#endif
А в ДШ про это, конечно же, ни слова.
Вот, народ тоже парился: www.avrfreaks.net/index.php?name=PNphpBB2&file=pri…
В общем, победил. Теперь всё работает в моей платке. Завтра буду прерывания писать - каналы газа и направления добавлять.
Сделал давно обещанную прошивку телеметрии версии 233 с поднятыми буковками, строкой GPS и новым переключением между режимами.
Забирать тут: smalltim.ru/tele/firmware/
Сьтатья про то, почему нельзя сделать автопилот на одном акселе: dpla.ru/acclmmer.img/acclmmer.htm
Господа, прощу прощения, что пропал.
Вот, прилагаю фото своих датчиков, чтоб не писать много слов и чтоб не возникло разнотолков. + имеется dpip мега и микросхема, которая с видео работает (не помню как зовут) тоже в dip корпусе.
Вопросов два: как подключить 5010dp ибо ничего общего я у него в датащите не нашел с тем что на фото платы smalltim-а, и нет ли уже готовой разводки проверенной у кого-либо?
smalltim, а вот Вы предлагали готовую плату - это по почте? Блин, согласится что ли 😃 А то опять ведь руки не скоро дойдут т.к. столько всего сделать надо.
tienda.dmd.es/epages/ea0697.sf/en_GB/?ViewObjectID…
подскажите и не бейте
кто нибудь юзал сей девайс
Не юзал ничего.
По Описанию похоже на бета версию. Ну и функционально - вроде смалтим больше уже написал, хотя на атмеле экран конечно меньшего разрешения .
Ну и мысли вслух - всё-таки наверное большинство самодельщиков понимало спустя год-два после начала проекта - что проц слабый, памяти/ног мало, графика на спец микросхемах будет лучше и тд.
Вспоминается призыв Арти перейти на АРМ
Ну и мысли вслух - всё-таки наверное большинство самодельщиков понимало спустя год-два после начала проекта - что проц слабый, памяти/ног мало, графика на спец микросхемах будет лучше и тд.
Вспоминается призыв Арти перейти на АРМ
Воообще говоря, это вопрос диалектиццкий. - В том смысле, что если бы я затевал такую разработку сейчас заново, то совершенно точно выбрал бы какой-нибудь камень помощнее, чуть лучше заточенный под писание на С, под плавучку, и - главное - с более богатой периферией.
И наложение картинки сделал бы полу- или совсем аппаратным (на какой-нибудь ПЛИСине)…
Однако, переход на другую платформу означает потерю большинства уже готовых наработок (не в плане “ноухау”, а вульгарно по количеству уже написанного и отлаженного кода), так что на такой шаг лично меня сейчас может сподвигнуть только какой-то категорический “упор” по производительности, делающий невозможной реализацию некоей очень уж интересной фичи…
В то же время, доводя потихонечку свой исходный проект, я где-то с полгода назад обнаружил в той же меге изрядные “унутренние резервы” 😉 в плане временнЫх ресурсов (даже при полноэкранном OSD), в результате чего упихал в один “отображательный” кристалл (помимо исходного собственно рисования, обсчета всего “электричества”, работы с мультиплексовским приемником, и так далее) - и обработку бародатчиков, и передачу цифровой телеметрии внутри видеосигнала, и вывод отладочной информации по последовательному порту, и разную настройку/калибровку с передатчика)…
Подозреваю, что при желании туда же можно достаточно свободно уместить и всю работу с GPS’ом, но поскольку второй кристалл у меня все равно уже стоит, то заниматься этим ради “чистого искусства” мне просто лень.
PS: Если кому-нибудь будет охота этим заморачиваться, - могу отдать очередную версию сорсов под обещание делиться дальнейшими результатами работы с “широкой общественностью”.
Выложил исходники самой свежей прошивки, v233, для платы телеметрии и сопутствующее добро вот тут: smalltim.ru/tele/source/
Исходный код прошивки v233 для платы телеметрии:
.RAR, 88 kB
Содержимое файла:
- smalltim.asm - главный модуль
- _display.asm - функции формирования текста для отображения
- _math.asm - математические функции
- _gps.asm - функции обработки NMEA строк
- *.inc - файлы, хранящие предрасчитанные данные, включаемые в тело программы
- font_gen2.exe - утилита, позволяющая редактировать файлы со шрифтами для телеметрии
Родная среда программирования - AVR Studio4, программатор и соответствующий софт - AS4/ASISP1120 от Argussoft (www.argussoft.ru).
Ограничений на распространение и использование исходников нет.
Поддержка по использованию исходников не гарантируется.
Выкладывание исходников не означает закрытие проекта телеметрия. Планируемых изменений кода настолько много, что весь код переписывается заново, с нуля, и нет смысла держать всё, что было наработано за год, закрытым.
Интересных идей и по-больше свободного времени тебе, Тимофей, для дальнейших разработок!
Ну а целеустемленности и настойчивости тебе не занимать…
Smalltim огромное спасибо. А куда из архива сбежал “smalltim.asm - главный модуль”? Или это только мне не досталось? (Блин, как обычно 😦( )
Это мой косяк. Перезалил архивчик.
Есть несколько вопросов по телеметрии Smalltim:
-
При питании телеметрии, управления самолета, и видеопередатчика от одной батареи, при включении двигателя 2213, буквы начинают дергатся вверх (аж на пол экрана). Причем чем больше обороты, тем сильнее амплитуда и частота дергания, в плоть до того, что информация становится не читаемая. При этом сама картинка с камеры остается нормальной (камера 191, передатчик 900 мГ, 500 мвт с ренжвидео). Если подключить телеметрию к отдельной батарее, то работа двигателя не влияет на телеметрию вообще. Как лечить?
Попробывал запитать телеметрию от одной и тойже батареи, но не с балансировочного разъема, а от силового (тоесть показывает только общее U батареи). Причем подводящий провод скрутил как витую пару. Помехи остались, но стали меньше. на пол экрана уже буквы не прыгают, но при полном газу всеравно дергаются так, что читать не возможно. Может кондер какой поставить? Или еще что? -
При включении GPS (самоль был на подоконнике) при режиме 3d - ловит 4 спутника, правда не устойчиво, но когда режим 3d - высоту по GPS показывает - минус 295 м (дрейф от -295 до -300 м) это глюк приемника, или неустойчивый сигнал?
- Надо для видео использовать экранированный провод, а провода питания телеметрии пропустить в 3-4 оборота через ферритовое кольцо.
- GPS модуль на вашем балконе ловит спутники плохо, поэтому, пока найдены меньше 4 спутников (режим 2D), телеметрия запоминает исходную высоту над уровнем моря (неправильную) как стартовую высоту. Надо, как только модуль устойчиво найдет 4 и больше спутников, отключить телеметрию на пару секунд от питания и вернуть обратно. После этого модуль найдет все спутники быстро, в режиме “теплого старта”, и телеметрия запомнит уже не 2D, а правильные 3D координаты в качестве стартовых.
В поле таких проблем обычно не бывает, там 8-10 спутников - в порядке вещей.
Про ферритовое кольцо-попробуем.
Офф топ:
Телефон Асус 750 при расположении на подоконнике (там же, где и самоль) тоже ловит 3-4 спутника, чуть с окна уносишь и сигнал пропадает практически сразу. А Митак Мио A702, даже в середине комнаты, если окно чуть приоткрыто, ловит 6 спутников стабильно!!! Интерестно, что у него за приемник GPS стоит
>Про ферритовое кольцо-попробуем.
А экранированный провод? 😃
Надо использовать обычный видеокабель тюльпан-тюльпан для подключения компуков, DVD и т.д. к телевизору.
Кабель раздербанить при необходимости, экран на землю на телеметрическом разъеме, питание камеры - плюс и земля - отдельной парой проводов.
Модуль EM406A, который в комплекте, вообще-то, отличается завидной чувствительностью. Видимо, в КПК у Вас вообще что-то очень крутое стоит.