Activity

Создание собственной системы стабилизации
Geniok:

Так там же вроде по коду все итак понятно, по фронту запоминаешь значение счетчика таймера, по спаду считаешь разницу между текущим значением и тем, что запомнил до этого…

SergDoc:

спасибо!!!

Создание собственной системы стабилизации

вот к стати, кто-нибудь знает как устроен захват ШИМа в этом китайском контроллере??? там атмега328, в которой тоже только 2 аппаратных прерываний с захватом. а принимает она 4 канала на каждую ножку.

Создание собственной системы стабилизации
Geniok:

Погоди, так PPM приходит же единым пакетом. Все каналы сразу. Значит тебе для его обработки нужна всего 1 ножка. И с помощью этой 1 ножки ты и обрабатываешь все свои 7 каналов. Тебе нужно ловить только переходы из 0 в 1 и из 1 в 0 и все, как написали выше.

да, согласен, РРМ это 1 канал. Но откуда его взять в обычном приемнике? я так понимаю, приемник ловит РРМ и разделяет его на все 7 ножек в отдельности…

Создание собственной системы стабилизации
Sir_Alex:

Я уже писал вам, одного ICP(Input Capture Pin) хватит для обработки PPM(CPPM) сигнала. Для этого достаточно ловить только Rising Edge (из 0 в 1). Если вам надо каждый канал по отдельности обрабатывать, то разумеется вам надо столько ICP пинов, сколько у вас каналов и в этом случае надо его переключать из 0 в 1 и 1 в 0.

в обычном приемнике, от Futaba 7C например, РРМ сигнал ведь разложен по 7 канала, на каждой ножке свой канал…

в Atmega128 есть только 2 прерывания с режимом захвата, это 1 и 3 NIT, т.е. я могу только 2 канала с приемника аппаратно обработать. а что делать с остальными? на них нужно программный захват организовывать с помощью простых INTов?

Я так понял все тут делают на STM32, а у него сколько аппаратных ICP прерываний? Или есть кто делает на атмеге?

коптер в полном автономном режиме
uv3dut:

однолопосная система эффективнее двух лопастной?

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

коптер в полном автономном режиме

vis.asta, скажите, пожалуйста, если не секрет, с какой частотой вы опрашиваете ШИМ с приемника? А то на соседней ветке уж больно много разных мнений, хочется услышать мнение исходя из действующего аппарата…

Создание собственной системы стабилизации
Geniok:

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

это все на практике нужно проверять, но 5Гц точно никак. мне кажется логичным чтобы плата контроллера не тормазила работу машинки как бы быстро я не дергал стик. думаю после 5Гц я переду сразу на 25Гц

Создание собственной системы стабилизации
rual:

АВР я рассматривать не буду

я как раз сейчас делаю на атмеге все это

rual:

ДУС - 380Гц

прошу прощения за тупость. расшифруйте ДУС?

rual:
  1. Петля ДУС, выполняется: чтение ДУС, обновление текущего положения в пространстве, вычисление ошибки положения относительно заданного

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

Создание собственной системы стабилизации
Geniok:

Вы на самолет воздействуете напрямую, или через систему стабилизации ?

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

Создание собственной системы стабилизации
Geniok:

А ШИМ поступает с приемника с частотой 50Гц. Обрабатывать планирую не чаще 5 Гц. Хотя тоже надо пробовать, как будет сказываться на управлении.

я посчитал, с какой скоростью я дергаю стики на 3D самоле, получилось примерно полный размах стика, (от 1мс до 2 мс) проходит где-то за 0,2с. т.е. получается я дергаю стиком с частотой 5Гц в пике. т.е. если опрашивать приемник реже 5 раз в секунду, то можно просто не успеть за стиком. Кароче, сейчас у меня сделано именно опрос приемника с частотой 5Гц, каждые 0.2с, и это очень, очень плохо. машинка вообще не успевает отработать все движения стика.

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

Создание собственной системы стабилизации
Geniok:

Чтение датчиков занимает кучу времени. Делать это в прерывании - не самая хорошая идея, имхо.

А вы с какой частотой опрашиваете ШИМ с приемника? И с какой гиро и аксель?

Создание собственной системы стабилизации
Geniok:

Скорость изменения ШИМ мне кажется физически будет меньше, чем 50 Гц.
Нас ведь интересуют только изменения положения стика управления. Таким образом частоту опроса можно поставить хоть 1 Гц

ничего подобного. например, видели как упраляют 3D вертолетом профессионалы? они стики с такой скоростью дергаю что они их даже не видно становится. и приемники у них выдают частоту шима 70Гц. поэтому про частоту опроса в 1 Гц даже и не думайте, проверено. прием шима - это приоритетная задача, и нужно опрашивать его с той же частотой что и выдается он с приемника. а вот все остальные датчики, баро, компас, джипиэс, можно опрашивать в между делом и то, лучше как минимум в 2Гц.

Создание собственной системы стабилизации
Geniok:

И не факт что сбросить счетчик успеешь до прихода прерывания со второго канала.

действительно, что делать если прерывание следующего канала сработает сразу с завершением фронта предыдущего? как успеть записать значение шима???

коптер в полном автономном режиме
vis_asta:

что на 10 - одна и та же потребляемая мощность…

а если на 50 или на 100м, понять сколько на высоту тратится. к стати на счет сброса аккумулятора, тема известная и в принципе не безнадежная) его же не обязательно сбрасывать где попало и обязательно на голову) можно за ранее подлететь к месту где никого нет, и с высоты 1-2 метра его сбросить, 300 баксов за час полета сбросить)))))

Создание собственной системы стабилизации
Geniok:

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

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

коптер в полном автономном режиме
vis_asta:

ну алгоритм заточен на сближение с искомой точкой… но фактом попадания в точку считается, что достигнуто некое расстояние до неё… по дефолту это 1м. для скоростей до 8 мс такая точность обеспечивается сразу и в ветер даже…
если скорость большая - может промахнуться … и будет уточняться… тратя на это время…

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

Виктор, посмотрел ваши “долгие” полеты, и видно что за этими часами полетов стоит титанический труд и куча потраченного времени. но! думаю нет ни одной такой реальной миссии, которая бы выполнялась на высоте 4 метра в режиме висения. вот интересно было бы увидеть результаты таких полетов на высоте хотя бы 50 метров, маневрируя например по квадрату 20х20 метров…

коптер в полном автономном режиме
vis_asta:

аппарат тратил время на финальную доводку до точки…

т.е. всетаки пока он не попадет в ту точку которая одназначно задана, он не успокоется? и так и должно быть?

vis_asta:

я на видео где 15мс скорость

можно ссылку на видео, а то не найти…

Создание собственной системы стабилизации
Sir_Alex:

Если вам надо каждый канал по отдельности обрабатывать, то разумеется вам надо столько ICP пинов, сколько у вас каналов и в этом случае надо его переключать из 0 в 1 и 1 в 0.

вот на примере приемника Futaba 7C, по идее выход - РРМ сигнал, но опрашивать же нужно каждый канал в отдельности?

коптер в полном автономном режиме
vis_asta:

ну как дело до мануала дойдёт - там будет описано

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

коптер в полном автономном режиме
vis_asta:

что твориццо-то…

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

Создание собственной системы стабилизации
oleg70:

Захват у таймеров 1 и 3 , вход называется “input capture”

спасибо. т.е. их два. а для считываня шимов с каналов достаточно только одного таймера? его просто по событиям переключать, сначало из 0 в 1 , потом из 1 в 0?

Создание собственной системы стабилизации
oleg70:

Должно затикать… (не понятно только как Вы меряете результат работы ? )

спасибо, попробую! результат работы меряю с помощью светодиода. просто в тело таймера записал одну команду вкл/выкл светодиода. на осциллографе смотрю

Создание собственной системы стабилизации
Geniok:

Сейчас глянул даташит на Атмегу8, там фиксированные предделители (8, 64, 256, 1024) или без него, той формулы, которую вы писали выше, не нашел.

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

Geniok:

А можно глянуть код, как вы настраиваете частоту таймера?

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

oleg70:

Давайте свою микросхему (марку), частоту кварца, щасс заведем…

микросхема Atmega128, кварц 14.7456МГц…

Создание собственной системы стабилизации
SergDoc:

а часом не работает ли микросхеа от внутреннего генератора с делителем на 8, или вообще на килогерцах, фьюзы выставлены правильно?

фьюзы правильные и микруха настроена на внешний кварц. дело в том, то таймер нормально работает до периода 5,2мкс. т.е. например если я захочу выставить период 10мкс, то его расчет полностью совпадет с формулой. да и другие датчики настроены на частоту внешнего кварца и работаю правильно. Тут именно урунда какая то, почему то не хочет таймер работать быстрее 5.2 мкс, даже если я регистру сравнения присваиваю число, согласно которому период должен быть наприммер 1мкс. и понять в чем дело не могу…

Создание собственной системы стабилизации
Geniok:

Ну вот например, таймер считает с периодом 1 мкс.

вот в этой фразе самое интересное! Не получается у меня завести таймер быстрее чем 5,2 мкс. сегодня 2 часа бился вокруг этого таймера, никак не хочет. хотя теоретически считая по формуле, он вообще с 0,1мкс должен точно тикать.

Создание собственной системы стабилизации
Geniok:

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

в АВР по такой формуле счтается частота таймера: f = Fкварца/1+OCR. Где OCR это регистр сравнения. соответсвенно период будет равен 1/f.

Geniok:

Например, в СТМ32 для захвата ШИМ я завожу 2 канала. Первый канал ловит фронты, второй - спады. таким образом в первом канале в регистре сравнения у меня будет значение периода, а во втором - значение заполнения.
Это то, что вам нужно.

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

Создание собственной системы стабилизации
Geniok:

Мне кажется вы немного плаваете в понятиях и пока плохо себе представляете как получается ШИМ.

согласен, немного плаваю) Я хочу измерить ШИМ который поступает от RC приемника. Для этого использую счетчик (таймер). с помощью регистра сравнени “завожу” его на нужный мне период. когда регистр сравнения равен 100, таймер тикает с периодом 6,85мкс, т.е. с этой точностью я могу посчитать (измерить) ШИМ. но я хочу мерить ШИМ с точностью ну хотябы 1мкс, в идеале 0,5мкс. но таймер отказывается так быстро работать(((

Создание собственной системы стабилизации
oleg70:

В одну миллисекунду “влазит” 250 импульсов по 4 микросекунды (не так ли?)
Вот Вам и дискрет. на канал, и частота тактирования счетчика (250 кГц)
Что значит " считать то в идеале до 10 " ? ВЫ что количество что ль посчитать хотите?

да, если 1мс разбить на 250 импульсов то будет 4мкс. Вы считаете этого будет достаточно? сейчас у меня дискретность 10мкс, это очень грубо получается.
если я присвою регистру сравнения OCR число 10, то по идее, по формуле, дискретность должна стать 0,68мкс.

Создание собственной системы стабилизации
oleg70:

Правильно нужен таймер но надо сначала выбрать какой (8-ми или 16-битный),

конечно, таймер у меня 8-ми битный. Мне и надо считать то в идеале до 10))) я же говорю что ставлю 100 в регистр OCR, т.е. он считает до 100 и при этом выдает длительность в 6,85мкс.

oleg70:

делаете расчет тактовой частоты так чтобы не было переполнения за 1м/сек (стандартная длительность импульса аппы), в данном случае 16Mhz/64=250 Khz= 4 мк/с.

а вот это не совсем понял. вы хотите сказать, что точность отсчитывания шима достаточна в 4мкс?

oleg70:

16Mhz/64=250

что такое 64?

oleg70:

Дело в том что от OCR таймер не тактируется, это регистр сравнения (Вы вообще хотите мерять ШИМ или генерить?)
Не пойму…

хочу мерить ШИМ

Создание собственной системы стабилизации
Geniok:

Ну в принципе меряете (а точнее отсчитываете) правильно. Смотрите какие предделители у вас есть. От чего тактируете таймер?

предделители все выключил. тактируется таймер от регистра OCR. допустим присваиваем регистру OCR = 100, тогда частота таймера будет f = Fкварца/1+OCR = 14745600/1+100 = 145996 т.е. Т=1/f = 6.85мкс. Т.е. эти 6.85 мкс и есть точность с которой я могу отсчитать шим. Но это слишком грубо, нужно хотябы 1мкс. Но когда я начинаю уменьшать значение OCR, почему то меньше 5.2 мкс период не хочет снижаться. Теоритически при OCR= 10, Т должен = 0,685мкс, а по факту он все ровно 5,2мкс. Вы наверно спросите что нахотся в самом теле таймера, для частоты эксперемента туда помещена всего дна команда на вкл/ светодиода. В чем тут дело?