Телеметрия (часть 2)
A esli za samolem kilometr idti? Vsio choziaistvo ostavliaes?
В смысле?
Это не кит, это значит, что автопилот может работать как самоcтоятельно, так и на пару с телеметрией.
Новости по телеметрии:
- Кордик для расчета высоты по давлению почти закончен. За ним - универсальная прошивка под 1гц/5гц GPS модули.
- MPXA4115A снимаются с производства. Временная замена - перехожу на MPXAZ61115A6U
- После этого MPXAZ61115A6U меняется на (в 4 раза!) более компактный, легкий и не такой дорогой MP3H6115A6U/T1, с переразводкой платы под новый корпус датчика и с учетом накопленного опыта эксплуатации - доработки по части обработки видео и захвата PPM с приемников.
Жаль, что нет более компактных аналогов MPXV5010DP/GP.
Esli cestno skazat, to neponravilos.
Staraja versija lucse bila (informativnei) hot karta i naiznanku bila.
Seicias glavnie parametri nahodiatsia na fone neba i ih nevidno.
Krasivie vesci nevsegda udobni v ispolzovanii.😃
“Привычка свыше нам дана, замена счастию она.”
А.С.Пушкин, “Евгений Онегин”
Полетаешь на новой, привыкнешь, а потом, при переходе на более новую версию, будешь говорить, что старая была лучше. 😃
>Kogda signal propadaet nenadolgo, telemetrija dumaet cto ja rucku diorgaju i perekliciaet rezimi sama.
Это мой глючок - когда ручка не в максимуме, я не обнуляю “таймер нахождения ручки в максимуме”.
Сегодня поправлено, в следующей прошивке будет вместе со всем остальным.
Ура, окончательно победил кордиковый логарифм.
Первоначальный вариант как-то причудливо себя вел - не сходился во всем нужном мне диапазоне. И был в 2 раза тяжелее.
Поскольку нормального кордика для логарифма хрен где достанешь (формулы я отрыл в книжке хрен знает какого года в Google Books), привожу сишный код, который у меня вышел. Вдруг кому пригодится.
В табличке хранятся значения log10(1+2^-i) для i от 1 до 16, умноженные на 32768.
Сменой размера таблички меняется точность - хоть до 64-битных чисел. Сменой основания логарифма в табличке меняется основание искомого логарифма - того, что ищет цикл.
В цикле прилично сдвигов и сложений, но всего на 16-битное число нужно 16 оборотов цикла.
Код на Си выглядит так:
void cordic_log10(long lx, long * ll)
{
int i,j;
// initialization
long x,z;
long xd;
z=0;
x=32768;
for (i=0;i<16;i++) // CORDIC cycle
{
xd=x;
for(j=0;j<i+1;j++)
{
xd>>=1;
}
if(x+xd<=lx)
{
x+=xd;
z+=log_table1[i];
}
}
*ll=z;
}
Это фиксированная точка с 15 разрядами после запятой (1.0 = 32768)
Точность - лучше сотой доли процента:
program started
log_table1[ 0]= 5770
log_table1[ 1]= 3176
log_table1[ 2]= 1676
log_table1[ 3]= 863
log_table1[ 4]= 438
log_table1[ 5]= 221
log_table1[ 6]= 111
log_table1[ 7]= 55
log_table1[ 8]= 28
log_table1[ 9]= 14
log_table1[10]= 7
log_table1[11]= 3
log_table1[12]= 2
log_table1[13]= 1
log_table1[14]= 0
log_table1[15]= 0
x= 1.00000, cordic_log10(x) = 0.00000, log10(x) = 0.00000
x= 1.01000, cordic_log10(x) = 0.00433, log10(x) = 0.00432
x= 1.02000, cordic_log10(x) = 0.00858, log10(x) = 0.00860
x= 1.03000, cordic_log10(x) = 0.01285, log10(x) = 0.01284
x= 1.04000, cordic_log10(x) = 0.01706, log10(x) = 0.01703
x= 1.05000, cordic_log10(x) = 0.02121, log10(x) = 0.02119
x= 1.06000, cordic_log10(x) = 0.02530, log10(x) = 0.02531
x= 1.07000, cordic_log10(x) = 0.02939, log10(x) = 0.02938
x= 1.08000, cordic_log10(x) = 0.03345, log10(x) = 0.03342
x= 1.09000, cordic_log10(x) = 0.03748, log10(x) = 0.03743
x= 1.10000, cordic_log10(x) = 0.04138, log10(x) = 0.04139
x= 1.11000, cordic_log10(x) = 0.04535, log10(x) = 0.04532
x= 1.12000, cordic_log10(x) = 0.04926, log10(x) = 0.04922
x= 1.13000, cordic_log10(x) = 0.05304, log10(x) = 0.05308
x= 1.14000, cordic_log10(x) = 0.05692, log10(x) = 0.05690
x= 1.15000, cordic_log10(x) = 0.06073, log10(x) = 0.06070
x= 1.16000, cordic_log10(x) = 0.06448, log10(x) = 0.06446
x= 1.17000, cordic_log10(x) = 0.06821, log10(x) = 0.06819
x= 1.18000, cordic_log10(x) = 0.07190, log10(x) = 0.07188
x= 1.19000, cordic_log10(x) = 0.07559, log10(x) = 0.07555
x= 1.20000, cordic_log10(x) = 0.07916, log10(x) = 0.07918
x= 1.21000, cordic_log10(x) = 0.08279, log10(x) = 0.08279
x= 1.22000, cordic_log10(x) = 0.08636, log10(x) = 0.08636
x= 1.23000, cordic_log10(x) = 0.08994, log10(x) = 0.08991
x= 1.24000, cordic_log10(x) = 0.09344, log10(x) = 0.09342
x= 1.25000, cordic_log10(x) = 0.09692, log10(x) = 0.09691
x= 1.26000, cordic_log10(x) = 0.10040, log10(x) = 0.10037
x= 1.27000, cordic_log10(x) = 0.10382, log10(x) = 0.10380
x= 1.28000, cordic_log10(x) = 0.10724, log10(x) = 0.10721
x= 1.29000, cordic_log10(x) = 0.11060, log10(x) = 0.11059
x= 1.30000, cordic_log10(x) = 0.11398, log10(x) = 0.11394
x= 1.31000, cordic_log10(x) = 0.11731, log10(x) = 0.11727
x= 1.32000, cordic_log10(x) = 0.12061, log10(x) = 0.12057
x= 1.33000, cordic_log10(x) = 0.12387, log10(x) = 0.12385
x= 1.34000, cordic_log10(x) = 0.12717, log10(x) = 0.12710
x= 1.35000, cordic_log10(x) = 0.13037, log10(x) = 0.13033
x= 1.36000, cordic_log10(x) = 0.13358, log10(x) = 0.13354
x= 1.37000, cordic_log10(x) = 0.13675, log10(x) = 0.13672
x= 1.38000, cordic_log10(x) = 0.13989, log10(x) = 0.13988
x= 1.39000, cordic_log10(x) = 0.14307, log10(x) = 0.14301
x= 1.40000, cordic_log10(x) = 0.14618, log10(x) = 0.14613
x= 1.41000, cordic_log10(x) = 0.14923, log10(x) = 0.14922
x= 1.42000, cordic_log10(x) = 0.15231, log10(x) = 0.15229
x= 1.43000, cordic_log10(x) = 0.15536, log10(x) = 0.15534
x= 1.44000, cordic_log10(x) = 0.15839, log10(x) = 0.15836
x= 1.45000, cordic_log10(x) = 0.16141, log10(x) = 0.16137
x= 1.46000, cordic_log10(x) = 0.16437, log10(x) = 0.16435
x= 1.47000, cordic_log10(x) = 0.16733, log10(x) = 0.16732
x= 1.48000, cordic_log10(x) = 0.17026, log10(x) = 0.17026
x= 1.49000, cordic_log10(x) = 0.17325, log10(x) = 0.17319
x= 1.50000, cordic_log10(x) = 0.17609, log10(x) = 0.17609
x= 1.51000, cordic_log10(x) = 0.17896, log10(x) = 0.17898
x= 1.52000, cordic_log10(x) = 0.18185, log10(x) = 0.18184
x= 1.53000, cordic_log10(x) = 0.18466, log10(x) = 0.18469
x= 1.54000, cordic_log10(x) = 0.18753, log10(x) = 0.18752
x= 1.55000, cordic_log10(x) = 0.19034, log10(x) = 0.19033
x= 1.56000, cordic_log10(x) = 0.19315, log10(x) = 0.19312
x= 1.57000, cordic_log10(x) = 0.19589, log10(x) = 0.19590
x= 1.58000, cordic_log10(x) = 0.19864, log10(x) = 0.19866
x= 1.59000, cordic_log10(x) = 0.20139, log10(x) = 0.20140
x= 1.60000, cordic_log10(x) = 0.20410, log10(x) = 0.20412
x= 1.61000, cordic_log10(x) = 0.20685, log10(x) = 0.20683
x= 1.62000, cordic_log10(x) = 0.20953, log10(x) = 0.20952
x= 1.63000, cordic_log10(x) = 0.21222, log10(x) = 0.21219
x= 1.64000, cordic_log10(x) = 0.21484, log10(x) = 0.21484
x= 1.65000, cordic_log10(x) = 0.21747, log10(x) = 0.21748
x= 1.66000, cordic_log10(x) = 0.22012, log10(x) = 0.22011
x= 1.67000, cordic_log10(x) = 0.22272, log10(x) = 0.22272
x= 1.68000, cordic_log10(x) = 0.22534, log10(x) = 0.22531
x= 1.69000, cordic_log10(x) = 0.22787, log10(x) = 0.22789
x= 1.70000, cordic_log10(x) = 0.23044, log10(x) = 0.23045
x= 1.71000, cordic_log10(x) = 0.23300, log10(x) = 0.23300
x= 1.72000, cordic_log10(x) = 0.23557, log10(x) = 0.23553
x= 1.73000, cordic_log10(x) = 0.23807, log10(x) = 0.23805
x= 1.74000, cordic_log10(x) = 0.24057, log10(x) = 0.24055
x= 1.75000, cordic_log10(x) = 0.24304, log10(x) = 0.24304
x= 1.76000, cordic_log10(x) = 0.24551, log10(x) = 0.24551
x= 1.77000, cordic_log10(x) = 0.24799, log10(x) = 0.24797
x= 1.78000, cordic_log10(x) = 0.25043, log10(x) = 0.25042
x= 1.79000, cordic_log10(x) = 0.25287, log10(x) = 0.25285
x= 1.80000, cordic_log10(x) = 0.25525, log10(x) = 0.25527
x= 1.81000, cordic_log10(x) = 0.25769, log10(x) = 0.25768
x= 1.82000, cordic_log10(x) = 0.26007, log10(x) = 0.26007
x= 1.83000, cordic_log10(x) = 0.26245, log10(x) = 0.26245
x= 1.84000, cordic_log10(x) = 0.26486, log10(x) = 0.26482
x= 1.85000, cordic_log10(x) = 0.26718, log10(x) = 0.26717
x= 1.86000, cordic_log10(x) = 0.26950, log10(x) = 0.26951
x= 1.87000, cordic_log10(x) = 0.27188, log10(x) = 0.27184
x= 1.88000, cordic_log10(x) = 0.27417, log10(x) = 0.27416
x= 1.89000, cordic_log10(x) = 0.27649, log10(x) = 0.27646
x= 1.90000, cordic_log10(x) = 0.27878, log10(x) = 0.27875
x= 1.91000, cordic_log10(x) = 0.28107, log10(x) = 0.28103
x= 1.92000, cordic_log10(x) = 0.28333, log10(x) = 0.28330
x= 1.93000, cordic_log10(x) = 0.28558, log10(x) = 0.28556
x= 1.94000, cordic_log10(x) = 0.28784, log10(x) = 0.28780
x= 1.95000, cordic_log10(x) = 0.29007, log10(x) = 0.29003
x= 1.96000, cordic_log10(x) = 0.29227, log10(x) = 0.29226
x= 1.97000, cordic_log10(x) = 0.29449, log10(x) = 0.29447
x= 1.98000, cordic_log10(x) = 0.29669, log10(x) = 0.29667
x= 1.99000, cordic_log10(x) = 0.29889, log10(x) = 0.29885
Вопрос по бародатчику. Плата стоит в фюзеляже, который достаточно плотно закрыт. Через вентиляционные окна мотор гонит поток воздуха мимо телеметрии. Скажется ли это на точности отображения баро ?
Лучше сделать так, чтобы мимо непосредственно датчика ничего не дуло.
Достаточно плотно закрыт - этот не страшно до тех пор, пока “плотно” не превращается в “герметично” 😃
А я вот сегодня отрабатывал полёт по кругу… Жадность фраера сгубила… 😦
Погода была отличная, тихо. А когда приехал на поле поднялся ветер. Ну, думаю, не зря же я 25 км сюда пилил?
Запустил аэроплан.
Ветром его стало сносить, эффективности руля направления по прежнему не хватает. Вообще, для разворота блинчиком руль должен быть аки весло.
Короче, дабы не потерять модель, переключил на ручное и на пределе видимости прижал к земле… Оторвало крыло, поломало кабину. Потерь в оборудовании нет.
В снег плюхаться было приятнее… 😦
Сижу, воняю клеем…
Короче, дабы не потерять модель, переключил на ручное и на пределе видимости прижал к земле…
А что случилось с видео ? Пошли такие помехи, что дальше нельзя было лететь вообще ?
… Просто - из моего личного опыта - если начинаются какие-то проблемы (включая и проблемы с видео; - до тех пор, пока они не переходят в полное отсутствие картинки), то не стоит бросать очки и пытаться садиться по “виду с боку”. - Уже на двух-трех сотнях метров удаления ориентация самолета не читается, а время, которое уходит только на то, чтобы найти аппарат в небе, лучше потратить на борьбу с ветром/помехами/тяготением/etc.
Я в результате для себя вывел такой закон: “Начал летать по камере - по камере и продолжай, пока в очках хоть что-нибудь видно”.
А что случилось с видео ? Пошли такие помехи, что дальше нельзя было лететь вообще ?
У меня нет видео 😃 У меня свой собственный автопилот, облётываемый с перерывами аж с января. Я хотел отработать повороты на автомате, поднял самолёт в воздух, а т.к. летел он плоско, то ветер (а он на высоте 5м уже был значителен) стал резво его сносить. Метрах на 100 я и решил его уронить.
Вообще, можно было бы побороться и посадить, но я последний раз летал ещё в феврале, опыт с тех пор пропился, а FMS почему-то очень плохо работает через мою новую ПРОФЕССИОНАЛЬНУЮ аудиокарту - при калибровке столбики колбасит на 2/3 шкалы просто так (на ноуте с AC97 всё ОК). И потренироваться не получилось… Вот и результат 😦 Просто потерялась моторика движений, из-за этого такой жёсткий краш. Хорошо хоть автопилот удержал его в горизонте и он вошёл полого, а не морковкой.
FMS почему-то очень плохо работает через мою новую ПРОФЕССИОНАЛЬНУЮ аудиокарту
Соберите USB-шнурок, делов на 20 минут, а пользы на пол жизни 😃
У меня нет видео 😃
А, тогда прошу пардону.
… Просто я как-то не сообразил, что телеметрия может быть и в отрыве от видео. - Стереотипы - великая сила… 😁
А я вот заметил что на rс-cam.ru телеметриями Тимофея приторговывают…
Лицензионные отчисления-то есть? 😃
Ага.
Так же как и Жирной Акуле. 😃
Соберите USB-шнурок, делов на 20 минут, а пользы на пол жизни
А это как? Насколько понимаю, там на выходе обычный ППМ сигнал, и всё…
ПС. Всё забываю спросить, как у местных обитателей устрона трубка ПНВД (заборник)? Есть ли темки по этому вопросу, фотки, линки?
А это как? Насколько понимаю, там на выходе обычный ППМ сигнал, и всё…
Именно ppm и нужен - www.rcdesign.ru/articles/electronics/rcusb
мега8, регулятор и транзистор… работает как часы
>Всё забываю спросить, как у местных обитателей устрона трубка ПНВД (заборник)? Есть ли темки по этому вопросу, фотки, линки?
У меня - тонкостенная трубка произвольного диаметра, смотрящая в набегающий поток воздуха.
>Всё забываю спросить, как у местных обитателей устрона трубка ПНВД (заборник)? Есть ли темки по этому вопросу, фотки, линки?
У меня - тонкостенная трубка произвольного диаметра, смотрящая в набегающий поток воздуха.
Хороший способ - антенну от ненужного передатчика разобрать и подобрать подходящую по диаметру к трубке часть
Ура, окончательно победил кордиковый логарифм.
Первоначальный вариант как-то причудливо себя вел - не сходился во всем нужном мне диапазоне. И был в 2 раза тяжелее.
Поскольку нормального кордика для логарифма хрен где достанешь (формулы я отрыл в книжке хрен знает какого года в Google Books), привожу сишный код, который у меня вышел. Вдруг кому пригодится.
Как-то помнится, слышал, что есть библиотека с фиксированной точкой для AVR под IAR. Библиотека вроде называется “Q-математика” или “IQ-математика”.
Подобной библиотекой пользуюсь для TMS320. Классная вещь. 😉 Все шустренько считается, и синусы и логорифмы и корни… только к “Q” формату надо все приводить, ну и привыкнуть к нему. А суть одна, все считается целочисленно со сдвигами.
мега8, регулятор и транзистор… работает как часы
А вот RC цепь на ресет они зря не повесили…
Работает лучше, чем через аудиокарту? FMS его поймёт?
У меня - тонкостенная трубка произвольного диаметра, смотрящая в набегающий поток воздуха.
И как работает?..
Просто у меня целая книжка есть (в библиотеке без права выноса) по конструкциям ПНВД, страниц 300. Большая часть по сверхзвуковым, конечно, но есть и старьё.
Так вот самой удачной конструкцией там называют два цилиндра с отношением диаметров 1/10. Больший цилиндр на входе занимает 2/3 длины. Меньший на выходе, имеет сквозное отверстие назад и от середины перпендикулярно отведена трубка с давлением. То есть такая сквознвая подзорная труба с боковым соском. Никто не пробовал что-то подобное использовать?
Я сейчас использую трубу от игрушечного теплохода 😃 Пластиковая в форме буквы Г имеет заборник бОльшего диаметра, чем основание. По диаметру - как раз к трубке от капельницы. Стоит на верху кабины.