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

RaJa
SergDoc:

Для STM если что подчерпнуть forum.easyelectronics.ru/viewforum.php?f=35
гы-гы на этом форуме хоть в FAQ посылают обычно, не так уж далеко, а таам, сразу в даташиты 😃 эт я так почитал мельком 😃

Я на том форуме зареган, но там общие вопросы, а тут конкретные в приложении к коптерной тематике 😃
Конкретный опыт всегда лучше общего )

SergDoc

Да кто там про ремаппинг вопрос поднял? я ж блин три дня как в голову ужаленый ходил, remap у F103 на дополнительные функции порта, в F4 все функции являются альтернативными и выбираются по надобности

 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP ;
  GPIO_Init(GPIOA,&GPIO_InitStructure);

  GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_TIM5);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_TIM5);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_TIM5);
  GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_TIM5);

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

PWM_CH3 JP1_4 PB5 TIM3_CH2 (REMAP) D36

блин, а то что инструкция для F103 я и забыл, и думаю назачем?

RaJa
SergDoc:

Да кто там про ремаппинг вопрос поднял? я ж блин три дня как в голову ужаленый ходил, remap у F103 на дополнительные функции порта, в F4 все функции являются альтернативными и выбираются по надобности

То есть у F4 можно любую функцию на любой пин назначить?

SergDoc

Нет там боольшая таблица с альтернативными функциями для каждого порта, вот из них можно выбирать нужное…

rual
SergDoc:

в F4 все функции являются альтернативными и выбираются по надобности

Не знал про Ф4, думал как у Ф1. У Ф3 получается как у Ф4.

RaJa
rual:

Не знал про Ф4, думал как у Ф1. У Ф3 получается как у Ф4.

Да вроде все то же самое - несколько альтеранативных функций (обычно 3-5) на пин, какую надо, такую включаешь, как на 103м.

SergDoc

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

Alexsis1109
oleg70:

Немного не понял, что значит 0.5 мкс (частота тактирования чтоль?)
А вообще в ATmega-х пред/делитель (от тактовой частоты) очень “дешевый”
т.е. коэфициенты фиксированные (8/16/32/64) смотрите даташит он на 128-ю даже на русском есть.

ну для того чтобы посчитать длительность ШИМа нужен счетчик (таймер). Чем чаще этот таймер тикает, теб точнее можно измерить шим. Сейчас у меня таймер заведен на 10мкс, т.е. длительность шима я могу измерить с точностью ±10мкс. Я правильно меряю шим, таймером?

Geniok
Alexsis1109:

ну для того чтобы посчитать длительность ШИМа нужен счетчик (таймер). Чем чаще этот таймер тикает, теб точнее можно измерить шим. Сейчас у меня таймер заведен на 10мкс, т.е. длительность шима я могу измерить с точностью ±10мкс. Я правильно меряю шим, таймером?

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

У меня вот какой вопрос возник по работе с I2C в stm32.
Есть ли смысл использовать DMA вместо прерываний?
Может кто использовал?

Alexsis1109
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мкс. Вы наверно спросите что нахотся в самом теле таймера, для частоты эксперемента туда помещена всего дна команда на вкл/ светодиода. В чем тут дело?

oleg70
Alexsis1109:

ну для того чтобы посчитать длительность ШИМа

Правильно нужен таймер но надо сначала выбрать какой (8-ми или 16-битный), далее “понеслось”… :
при 8-ми битах он считает макс. до 256, если устраивает Вас эта дискретность на канал (вполне неплохо) делаете расчет тактовой частоты так чтобы не было переполнения за 1м/сек (стандартная длительность импульса аппы), в данном случае 16Mhz/64=250 Khz= 4 мк/с.
На 16-ти битном можно считать уже до 65535 и можно сделать круче…
По моему понятно объяснил: частота такта счетчика=дискретность канала (с учетом емкости самого счетчика)
Все зависит уже от Вашего желания…

Alexsis1109:

тактируется таймер от регистра OCR

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

Alexsis1109
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 таймер не тактируется, это регистр сравнения (Вы вообще хотите мерять ШИМ или генерить?)
Не пойму…

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

oleg70

Тогда так: имеем длительность ШИМ импульса от 1 милисек. до 2-милисек. (стандарт!) итого 1 милисек.
В одну миллисекунду “влазит” 250 импульсов по 4 микросекунды (не так ли?)
Вот Вам и дискрет. на канал, и частота тактирования счетчика (250 кГц)
Что значит " считать то в идеале до 10 " ? ВЫ что количество что ль посчитать хотите?

Alexsis1109
oleg70:

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

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

Geniok
Alexsis1109:

предделители все выключил. тактируется таймер от регистра 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мкс. Вы наверно спросите что нахотся в самом теле таймера, для частоты эксперемента туда помещена всего дна команда на вкл/ светодиода. В чем тут дело?

Мне кажется вы немного плаваете в понятиях и пока плохо себе представляете как получается ШИМ.
Таймер не может тактироваться от своего регистра, согласитесь что это глупо. Так как регистр не имеет частоты… ))
Тактируетесь вы от кварца, как написали ниже.
Вы генерировать или мерить ШИМ хотите ?

Alexsis1109:

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

Если измеряете сигнал с АППЫ, то по стандарту 1000 мкс - 0% (например газа), 2000 мкс - 100% (например газа). То есть диапазон имеем 1000 мкс.
Если свой таймер вы тактируете с частотой 1мкс, то имеете дискетность 1000. теперь вопрос, дискресность самих осей аппы сколлько ? Нужна ли вам такая точность ?

Тут 250 вроде должно быть за глаза…

oleg70
Alexsis1109:

250 импульсов то будет 4мкс. Вы считаете этого будет достаточно?

Это 250 положений “сервы” на ее 60 градусов (недостаточно?)
И ни при чем тут OCR.
Читайте про ШИМ (хотя бы в википедии), а то не поймем друг друга…

Alexsis1109
Geniok:

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

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

Geniok
Alexsis1109:

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

Ммм…
Для того, чтобы было чуть яснее, задам вопрос, генерировать ШИМ у вас получалось?

Alexsis1109
Geniok:

Для того, чтобы было чуть яснее, задам вопрос, генерировать ШИМ у вас получалось?

пока не дошел до генерации, хочу сперва прием наладить…

Geniok
Alexsis1109:

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

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

Alexsis1109:

пока не дошел до генерации, хочу сперва прием наладить…

Советую начать с генерации, там проще тем, что нужен всего 1 канал, да и с регистрами заодно разберетесь, чтобы не путаться какой для чего.
Заводите таймер. В регистр сравнения помещаете величину, до которой хотите чтобы таймер считал. На выходе получаете ШИМ.

Alexsis1109
Geniok:

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

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

Geniok:

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

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