Телеметрия (часть 2)

pashteton

Народ, как проверить кварц? Осциллографом по нему прошелся никакой частоты не обнаружил. На ноге таймера меги тоже тишина. Кого менять мегу или кварц?

pashteton

Диод заменил никаких изменений. Без видео сигнала на выходе диода ничего.
С видеосигналом там что-то появляется. На ЛМке на выходе что-то есть. Похоже все с ней впорядке. Есть мысль что на “сервисный” разъем попал плюсовой контакт аккума… Тогда наверное снова менять мегу 😦 Кстати на ее ногах тоже тишь гладь… тока питалово приходит.

solderer
pashteton:

Диод заменил никаких изменений. Без видео сигнала на выходе диода ничего.
С видеосигналом там что-то появляется. На ЛМке на выходе что-то есть. Похоже все с ней впорядке. Есть мысль что на “сервисный” разъем попал плюсовой контакт аккума… Тогда наверное снова менять мегу 😦 Кстати на ее ногах тоже тишь гладь… тока питалово приходит.

Ну очень похоже на мегу. А мега программатором читается? Ее можно проверить не выпаивая. Да, и ток потребляемый мегой не мешало бы померять.

pashteton

Нема у меня программатора 😦
Может она просто стерлась?

solderer

Ну прошивка просто так не стирается сама.

serj
pashteton:

Народ, как проверить кварц? Осциллографом по нему прошелся никакой частоты не обнаружил. На ноге таймера меги тоже тишина. Кого менять мегу или кварц?

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

smalltim

Сделал логгинг.
Каждые 0.2/0.5/1/2/5/10 секунд (настраивается с компука) в память сбрасываются следующие параметры:

typedef struct
{
 U32   samplenumber;
 U32   flightnumber;
 U32   gps_UTC_date;
 float gps_UTC_time;
 U8    gps_numsatellites;
 U8    gps_fixmode;
 float gps_startlat;
 float gps_startlon;
 float gps_startalt;
 float gps_curlat;
 float gps_curlon;
 float gps_curalt;
 float gps_curspeed;
 float gps_curheading;
 float compass_curheading;
 float voltage1;
 float voltage2;
 float voltage3;
 float current;
 float mah;
 float temperature;
 float baro_curspeed;
 float baro_curalt;
 float pyro_curroll;
 float pyro_curpitch;
 float pyro_targetroll;
 float pyro_targetpitch;
 float in_ppm_curwidth[5];
 float out_ppm_curwidth[4];
}  dumpsample_type;

Всего в памяти помещается ~15000 таких дампов, этого хватает на
~ 41 час полета при записи дампа 1 раз в 10 секунд
~ 4 часа полета при записи дампа 1 раз в секунду
~ 50 минут полета при записи дампа 5 раз в секунду

При каждом старте/ресете автопилота количество полетов увеличивается на единицу и сохраняется в отдельном месте внешней памяти.

При записи дампов счетчик дампов, лежащий в отдельном месте внешней памяти, читается, увеличивается на единицу и записывается обратно.

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

С компука можно принудительно обнулить счетчик полетов.

С компука можно принудительно обнулить счетчик дампов (“быстрое стирание”), тогда новые дампы начнут записываться с начала памяти, постепенно затирая старые дампы, лежащие в памяти с предыдущих полетов.

С компука можно принудительно обнулить память логов, при этом нужно ждать ооооочень долго, до десятков секунд. При этом память затирается нулями и логи предыдущих полетов теряются безвозвратно.

При скачке логов с платы автопилота в компук качается вся память целиком (2.162.688 байт, 4096 страниц по 528 байт), включая и логи, и настройки, и т.д. (это занимает ~20 сек), далее по номеру дампа, номеру полета и UTC времени из общей каши дампов выделяются все, относящиеся к различным полетам, и собираются логи независимых полетов.

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

Выглядит адекватно?

baychi
Сергей_Вертолетов:

Выглядит шикарно! А данные хранятся в сжатом виде или так как есть?

А Вы когда нибудь сжимали float-ы? Тем более независимые переменные? Обычные алгоритмы (LZW, Хафман) - малоэффективны. Можно конечно брать разности по столбцам и кодировать отклонения, но мороки с этим много. Проще писать как есть.

Сергей_Вертолетов

Просто подумалось что например ГПС координаты меняются не кардинально, есть скажем так фиксированная часть 😃 Хотя времени и так предостаточно, 1 Гц логгинга хватит за глаза.

EXT
smalltim:

Каждый последующий полет не затирает данные предыдущего

тоесть если я просто забыл очистить лог, я остался без них, я так понимаю?
а ведь логи нужны именно последних скажем 2 часов(ну например в случае нештатной ситуации в крайнем полете)а так я должен помнить есть место для записи или нет,
да и зачем мне логи 10 часов назад(тоесть они нужны конечно, но если я их потеряю ничего страшного)а если пропадет последний лог то это очень плохо
а если нельзя сделать перезапись самых старых логов новыми, то логично чтобы при каждом подключении к компу происходила автоматическая архивация и очистка

smalltim
EXT:

тоесть если я просто забыл очистить лог, я остался без них, я так понимаю?
а ведь логи нужны именно последних скажем 2 часов(ну например в случае нештатной ситуации в крайнем полете)а так я должен помнить есть место для записи или нет,
да и зачем мне логи 10 часов назад(тоесть они нужны конечно, но если я их потеряю ничего страшного)а если пропадет последний лог то это очень плохо
а если нельзя сделать перезапись самых старых логов новыми, то логично чтобы при каждом подключении к компу происходила автоматическая архивация и очистка

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

А Вы когда нибудь сжимали float-ы?

Там, если честно, больше половины float’ов (4 байта каждый) можно заменить на 2-байтовые целочисленные, а некоторые вообще на 1-байтовые. Ну кому с точностью float нужно знать угол там тангажа или крена? Или ширину PPM на входе-выходе? Целых градусов и 16, а то и 8 разрядов хватит.
В итоге не в полтора, а в 2 раза точно можно будет дамп утоптать.

Просто это надо, во-первых, вставить перевод в целые, а я ленивый. Во-вторых, пока идет отладка, я пока в логи попишу именно в том формате, что используется во всей математике.

а так я должен помнить есть место для записи или нет

Не надо помнить, консоль покажет:

SGordon

конечно надо старые стирать, по-моему по такой идеологии работают всякие черные ящики …

smalltim

Сделал автоматическое затирание старых логов, т.е., запись в память “по кругу”.

Cделал сохранение логов не в двоичный формат, а в экселе-совместимый формат с разделителем “;”

Сейчас сяду сервопровода нормальные, а не 5 см длиной, паять. Вдруг удастся завтра таки полетать на автопилоте 😒

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

Вот немного фоток старой платы автопилота, новой платы автопилота и новых плат пирометров:


smalltim

И автопилот, и платы пирометров планируется покрывать прозрачным нитро или полиуретановым лаком, от всяких неожиданностей.

blade
smalltim:

И автопилот, и платы пирометров планируется покрывать прозрачным нитро или полиуретановым лаком, от всяких неожиданностей.

Вот нитро- точно не надо!
Гигроскопичен и разрушается от воды.
Из дерева же (в смысле-целлюлозы) сделан.😎
И вообще, с лаками поосторожнее: некоторые- содержат кислотный отвердитель, что для электроники- не очень хорошо.
Обязательно сначала надо пробовать.

smalltim

У меня есть маленькая баночка лака, купленная в “Твоем Доме” под видом лака для сохранения блеска металлов в уличных условиях. Ну, там, модные красивые блестящие ручки дверей, замки, флюгера и пр. Не должен быть лажей, хотя по запаху - нитро.

Естественно, я всё опробую на своем старом автопилоте, если окажется лажа - буду искать полиуретановый, это стопудово сработает. Таким лаком панели солнечных батарей покрывают.

Спаял провода, хотел всё в подоконничных условиях проверить по-быстрому, но модуль, зараза, 3 спутника на окне находит, не больше. А для автопилота я ввел обязательное условие - минимум 4, чтоб 3D фикс был.
Днем собираюсь полетать.

=Женек=

Тимофей, что-то нет на вашем сайте полной схемы и прошивок.

foxtrot

Давно хотел спросить, а как правильно фиксировать фишки проводов на плате, чтобы не болтались и не спадали? Кто-нить может показать фотку нормального решения?

У меня частенько появляются полосы в местах подмеса данных телеметрии (на фото). Подозреваю расхлябанность фишек на штырьках. Ни у кого такого не наблюдается?

Вахтанг
smalltim:

И автопилот, и платы пирометров планируется покрывать прозрачным нитро или полиуретановым лаком, от всяких неожиданностей.

не забудь, только, пирометры защитить при покрытии 😉
Какие тебе нужны удлинители серв? могу подкинуть, не теряй время на это!

Photon

smalltim, надо бы в плате автопилота все свободное место в BOT слое залить полигоном земли, подсоединив его в одной точке. Это улучшит защиту чувствительных цепей от наводок, которых там в избытке.