Activity
Так там же вроде по коду все итак понятно, по фронту запоминаешь значение счетчика таймера, по спаду считаешь разницу между текущим значением и тем, что запомнил до этого…
спасибо!!!
вам в си в ассеме или на пальцах?
если можно, сначала на пальцах…
и к стати, чем отличается PCINT от просто INT?
вот к стати, кто-нибудь знает как устроен захват ШИМа в этом китайском контроллере??? там атмега328, в которой тоже только 2 аппаратных прерываний с захватом. а принимает она 4 канала на каждую ножку.

на синенькое тыкаем и ждём… пост 49
49 пост в этой ветке??
есть простое решение о котором уже писал
напишите еще раз, пожалуйста) а то искать замучаюсь…
Погоди, так PPM приходит же единым пакетом. Все каналы сразу. Значит тебе для его обработки нужна всего 1 ножка. И с помощью этой 1 ножки ты и обрабатываешь все свои 7 каналов. Тебе нужно ловить только переходы из 0 в 1 и из 1 в 0 и все, как написали выше.
да, согласен, РРМ это 1 канал. Но откуда его взять в обычном приемнике? я так понимаю, приемник ловит РРМ и разделяет его на все 7 ножек в отдельности…
Я уже писал вам, одного 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 прерываний? Или есть кто делает на атмеге?
однолопосная система эффективнее двух лопастной?
эффективнее, если речь идет о гоночных самолетах, где нужна запредельная частота вращения винта и огромный шаг. однолопостные винты ставят на гонки чтобы снизить воздушное сопротивление винта
vis.asta, скажите, пожалуйста, если не секрет, с какой частотой вы опрашиваете ШИМ с приемника? А то на соседней ветке уж больно много разных мнений, хочется услышать мнение исходя из действующего аппарата…
что считывать положение стиков с частотой больше 10Гц смысла не имеет. Хотя конечно данное утверждение на практике еще не проверено.
это все на практике нужно проверять, но 5Гц точно никак. мне кажется логичным чтобы плата контроллера не тормазила работу машинки как бы быстро я не дергал стик. думаю после 5Гц я переду сразу на 25Гц
АВР я рассматривать не буду
я как раз сейчас делаю на атмеге все это
ДУС - 380Гц
прошу прощения за тупость. расшифруйте ДУС?
- Петля ДУС, выполняется: чтение ДУС, обновление текущего положения в пространстве, вычисление ошибки положения относительно заданного
судя по этому алгоритму, и я использую такой же, чтение ППМ и акселя с гиро должно выполняться в одном цикле. чтение одного без другого (имею ввиду с разной частотой) не имеет смысла
Вы на самолет воздействуете напрямую, или через систему стабилизации ?
напрямую. а какая разница? плата стабилизации это как бы проходная плата, которая при необходимости может самостоятельно вносить коррективы на рули управления. а когда такой необходимости нет, она должна полностью повторять сигнал с приемника, в том числе и скорость его изменения
А ШИМ поступает с приемника с частотой 50Гц. Обрабатывать планирую не чаще 5 Гц. Хотя тоже надо пробовать, как будет сказываться на управлении.
я посчитал, с какой скоростью я дергаю стики на 3D самоле, получилось примерно полный размах стика, (от 1мс до 2 мс) проходит где-то за 0,2с. т.е. получается я дергаю стиком с частотой 5Гц в пике. т.е. если опрашивать приемник реже 5 раз в секунду, то можно просто не успеть за стиком. Кароче, сейчас у меня сделано именно опрос приемника с частотой 5Гц, каждые 0.2с, и это очень, очень плохо. машинка вообще не успевает отработать все движения стика.
я думаю надо с максимальной, с частотой самого приемника шим мерить и выдавать наружу. Кто как думает? у кого как сделано?
Чтение датчиков занимает кучу времени. Делать это в прерывании - не самая хорошая идея, имхо.
А вы с какой частотой опрашиваете ШИМ с приемника? И с какой гиро и аксель?
Скорость изменения ШИМ мне кажется физически будет меньше, чем 50 Гц.
Нас ведь интересуют только изменения положения стика управления. Таким образом частоту опроса можно поставить хоть 1 Гц
ничего подобного. например, видели как упраляют 3D вертолетом профессионалы? они стики с такой скоростью дергаю что они их даже не видно становится. и приемники у них выдают частоту шима 70Гц. поэтому про частоту опроса в 1 Гц даже и не думайте, проверено. прием шима - это приоритетная задача, и нужно опрашивать его с той же частотой что и выдается он с приемника. а вот все остальные датчики, баро, компас, джипиэс, можно опрашивать в между делом и то, лучше как минимум в 2Гц.
А дальше что???
вы чего все завелись то так? накипело чтоль, или больше поговорить не о чем? тема то как бы о другом…
И не факт что сбросить счетчик успеешь до прихода прерывания со второго канала.
действительно, что делать если прерывание следующего канала сработает сразу с завершением фронта предыдущего? как успеть записать значение шима???
чуть задержался в прерываниях, пришел импульс с другого канала и все, пиши пропало.
на то они и прерывания чтобы в них не задерживаться
что на 10 - одна и та же потребляемая мощность…
а если на 50 или на 100м, понять сколько на высоту тратится. к стати на счет сброса аккумулятора, тема известная и в принципе не безнадежная) его же не обязательно сбрасывать где попало и обязательно на голову) можно за ранее подлететь к месту где никого нет, и с высоты 1-2 метра его сбросить, 300 баксов за час полета сбросить)))))
В будущем если нужен будет захват на другой частоте, учесть коэффициент не проблема.
так получается система не универсальная. под каждый приемник настраивать надо
ну алгоритм заточен на сближение с искомой точкой… но фактом попадания в точку считается, что достигнуто некое расстояние до неё… по дефолту это 1м. для скоростей до 8 мс такая точность обеспечивается сразу и в ветер даже…
если скорость большая - может промахнуться … и будет уточняться… тратя на это время…
теперь понял. да, я про то и говорю что врят ли возможно попасть точно в точку, скорее фактом попадания нужно считать что достигнуто некое расстояние до нее. вот, а облако попадания уже зависит от скорости полета. спасибо, об этом я не думал)
Виктор, посмотрел ваши “долгие” полеты, и видно что за этими часами полетов стоит титанический труд и куча потраченного времени. но! думаю нет ни одной такой реальной миссии, которая бы выполнялась на высоте 4 метра в режиме висения. вот интересно было бы увидеть результаты таких полетов на высоте хотя бы 50 метров, маневрируя например по квадрату 20х20 метров…
аппарат тратил время на финальную доводку до точки…
т.е. всетаки пока он не попадет в ту точку которая одназначно задана, он не успокоется? и так и должно быть?
я на видео где 15мс скорость
можно ссылку на видео, а то не найти…
Если вам надо каждый канал по отдельности обрабатывать, то разумеется вам надо столько ICP пинов, сколько у вас каналов и в этом случае надо его переключать из 0 в 1 и 1 в 0.
вот на примере приемника Futaba 7C, по идее выход - РРМ сигнал, но опрашивать же нужно каждый канал в отдельности?
ну как дело до мануала дойдёт - там будет описано
понятно, не хотите) ваше право)
вот такой вопрос, чисто из теории, когда коптер по точкам летает, он же наверняка не может попасть в ту самую точку которая на карте была тыкнута, точнее вероятность этого очень мала. наверняка вокруг этой точки образуется некое облако разрешающих точек. вопрос в том какого диаметра должно быть это облако?
я как-то пришёл к своему методу
поделитесь?)
что твориццо-то…
Виктор, заметил что у вас есть платки на которых GPS и компас стоит на одной плате, и есть вроде варианты где GPS и возможно компас приподняты на второй этаж. Вообще компас в самом низу нормально работает, не врет? Его же вроде нужно как можно дальше от моторов ставить. Или вы прямо на коптере этот компас коллибруете компенсируюя помехи с движков?
Захват у таймеров 1 и 3 , вход называется “input capture”
спасибо. т.е. их два. а для считываня шимов с каналов достаточно только одного таймера? его просто по событиям переключать, сначало из 0 в 1 , потом из 1 в 0?
Подскажите, кто знает наверняка, в Atmega128 есть таймер с функцией захвата? Я смотрел в pdf, там есть много функций и есть что-то подобное на захват. Но оно ли это?
Должно затикать… (не понятно только как Вы меряете результат работы ? )
спасибо, попробую! результат работы меряю с помощью светодиода. просто в тело таймера записал одну команду вкл/выкл светодиода. на осциллографе смотрю
Ой забыл, номер таймера еще и желаемую частоту.
Timer2. Желаемая частота таймера 2МГц)
Сейчас глянул даташит на Атмегу8, там фиксированные предделители (8, 64, 256, 1024) или без него, той формулы, которую вы писали выше, не нашел.
да, полная форула конечно еще в знаменатель нужно предделитель ставить. но так как мне надо наоборот скорость увеличить, то предделители я выключил. формула которую я писал, она в книжке по АВР написана, в разделе таймеров) формула верная. я сегодня ее на осцилле проверял, все норм.
А можно глянуть код, как вы настраиваете частоту таймера?
код сегодня, к сожалению, на работе остался. завтра еще бороться буду, если не получиться, выложу код…
Давайте свою микросхему (марку), частоту кварца, щасс заведем…
микросхема Atmega128, кварц 14.7456МГц…
а часом не работает ли микросхеа от внутреннего генератора с делителем на 8, или вообще на килогерцах, фьюзы выставлены правильно?
фьюзы правильные и микруха настроена на внешний кварц. дело в том, то таймер нормально работает до периода 5,2мкс. т.е. например если я захочу выставить период 10мкс, то его расчет полностью совпадет с формулой. да и другие датчики настроены на частоту внешнего кварца и работаю правильно. Тут именно урунда какая то, почему то не хочет таймер работать быстрее 5.2 мкс, даже если я регистру сравнения присваиваю число, согласно которому период должен быть наприммер 1мкс. и понять в чем дело не могу…
Ну вот например, таймер считает с периодом 1 мкс.
вот в этой фразе самое интересное! Не получается у меня завести таймер быстрее чем 5,2 мкс. сегодня 2 часа бился вокруг этого таймера, никак не хочет. хотя теоретически считая по формуле, он вообще с 0,1мкс должен точно тикать.
Сделайте следующее:
Настройте таймер на 250 Кгц (регистр TCCR)
спасибо большое за дельный совет! попробую, о результатах отпишусь)
в регистре сравнения как раз должен лежать период, это то, что вы измеряете, а не задаете.
в АВР по такой формуле счтается частота таймера: f = Fкварца/1+OCR. Где OCR это регистр сравнения. соответсвенно период будет равен 1/f.
Например, в СТМ32 для захвата ШИМ я завожу 2 канала. Первый канал ловит фронты, второй - спады. таким образом в первом канале в регистре сравнения у меня будет значение периода, а во втором - значение заполнения.
Это то, что вам нужно.
к сожалению не перешел еще на STM32, но звучит такое измерение здорово. т.е. вы потом просто из периода вычитаете заполнение и получаете длительность ШИМа? получается вообще без всяких таймеров и подбора дискретности измерения?
Для того, чтобы было чуть яснее, задам вопрос, генерировать ШИМ у вас получалось?
пока не дошел до генерации, хочу сперва прием наладить…
Мне кажется вы немного плаваете в понятиях и пока плохо себе представляете как получается ШИМ.
согласен, немного плаваю) Я хочу измерить ШИМ который поступает от RC приемника. Для этого использую счетчик (таймер). с помощью регистра сравнени “завожу” его на нужный мне период. когда регистр сравнения равен 100, таймер тикает с периодом 6,85мкс, т.е. с этой точностью я могу посчитать (измерить) ШИМ. но я хочу мерить ШИМ с точностью ну хотябы 1мкс, в идеале 0,5мкс. но таймер отказывается так быстро работать(((
В одну миллисекунду “влазит” 250 импульсов по 4 микросекунды (не так ли?)
Вот Вам и дискрет. на канал, и частота тактирования счетчика (250 кГц)
Что значит " считать то в идеале до 10 " ? ВЫ что количество что ль посчитать хотите?
да, если 1мс разбить на 250 импульсов то будет 4мкс. Вы считаете этого будет достаточно? сейчас у меня дискретность 10мкс, это очень грубо получается.
если я присвою регистру сравнения OCR число 10, то по идее, по формуле, дискретность должна стать 0,68мкс.
Правильно нужен таймер но надо сначала выбрать какой (8-ми или 16-битный),
конечно, таймер у меня 8-ми битный. Мне и надо считать то в идеале до 10))) я же говорю что ставлю 100 в регистр OCR, т.е. он считает до 100 и при этом выдает длительность в 6,85мкс.
делаете расчет тактовой частоты так чтобы не было переполнения за 1м/сек (стандартная длительность импульса аппы), в данном случае 16Mhz/64=250 Khz= 4 мк/с.
а вот это не совсем понял. вы хотите сказать, что точность отсчитывания шима достаточна в 4мкс?
16Mhz/64=250
что такое 64?
Дело в том что от OCR таймер не тактируется, это регистр сравнения (Вы вообще хотите мерять ШИМ или генерить?)
Не пойму…
хочу мерить ШИМ
Ну в принципе меряете (а точнее отсчитываете) правильно. Смотрите какие предделители у вас есть. От чего тактируете таймер?
предделители все выключил. тактируется таймер от регистра 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мкс. Вы наверно спросите что нахотся в самом теле таймера, для частоты эксперемента туда помещена всего дна команда на вкл/ светодиода. В чем тут дело?