Например TDA7294

Форум РадиоКот • Просмотр темы - Энкодер и STM32
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 12:58:38

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 71 ]    , , 3,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вс окт 17, 2021 08:25:54 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
Если что - я никого ни к чему не призываю. ;)
Просто вспомнил и написал - как когда-то решил проблему быстородействия процедуры опроса энкодера и при этом еще получил эргономику, какую хотел. Давно дело было и было на avr.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Пн окт 18, 2021 19:26:06 
Открыл глаза

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Ср апр 17, 2019 12:04:23
Сообщений: 75
Рейтинг сообщения: 0
и тут на тебе - контроллер считает импульсы - а должен один добавить и тут же по спаду убавить.

Значит, у тебя таймер неправильно настроен. Т.к. в такой ситуации он должен просто на ±1 дрожать!
Я в этих ваших калокубах не понимаю. Поэтому в код и не смотрю. Ну и да: кто сказал, что в самом калокубе нет ошибок?
Привожу код из сниппета:
Код:
static inline void timers_setup(){
    RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
    /* (1) Configure TI1FP1 on TI1 (CC1S = 01)
           configure TI1FP2 on TI2 (CC2S = 01) */
    /* (2) Configure TI1FP1 and TI1FP2 non inverted (CC1P = CC2P = 0, reset value) */
    /* (3) Configure both inputs are active on both rising and falling edges
          (SMS = 011), set external trigger filter to f_DTS/8, N=6 (ETF=1000) */
    /* (4) Enable the counter by writing CEN=1 in the TIMx_CR1 register. */
    TIM3->CCMR1 = TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0; /* (1)*/
    /* (2) */
    TIM3->SMCR =  TIM_SMCR_ETF_3 | TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1; /* (3) */
    // enable update interrupt
    TIM3->DIER = TIM_DIER_UIE;
    // set ARR to 79 - generate interrupt each 80 counts (one revolution)
    TIM3->ARR = 79;
    // enable timer
    TIM3->CR1 = TIM_CR1_CEN; /* (4) */
    NVIC_EnableIRQ(TIM3_IRQn);
}

Фильтрация настроена?

хочу пообсуждать данный код в разрезе эффективности именно этого фильтра ETF для интерфейса энкодера, кто что думает, я лично считаю, что настройка регистра TIM3->SMCR привязана к External тактированию, собственно с этим сигналом фильтр и работает, а также прескалер на него действует. По идее с энкодерными входами должны работать регистры CCMR1(2) в режиме инпут пинов (каналов как входов). Затем после фильтрации получаться TI1FP1 и TI1FP2, которые и являются тактирующими. Вот только не пойму, как в данном случае должен работать прескалер судя по такой картинке
Изображение
первым работает фильтр выборок, но не совсем понятно, как здесь участвует прескалер, хорошо, если делит частоту таймера по шине и задает этот f_TDS на выборки, а может вообще не делит. Далее выбор фронта или спада (кстати в CIMSIS есть TIM_ICPolarity_BothEdge, который по сути у меня не работает в силу отсутствия аппаратной поддержки).
Почему задумался, да потому что дребезг я отфильтровать расчетным путем не смог, хотел ограничить частотой 70кГц, а в итоге флаг прерывания ловлю даже не досчитав
Код:
      if (CNT_EN){
         if ((CNT_TIM3_old==1)&&(cnt_dir!=1)&&(TIM3_CNT > 32767))
            CNT_Val_Reg = (s32)(CNT_Val_Reg - 65536), CNT_TIM3_old = 65534, cnt_dir = 1;
         if ((CNT_TIM3_old==65534)&&(cnt_dir!=2)&&(TIM3_CNT < 32767))
            CNT_Val_Reg = (s32)(CNT_Val_Reg + 65536), CNT_TIM3_old = 1, cnt_dir = 2;
      }

и это на 72 МГц частоте.
Хотя настройку на ETF тоже делаю из соображений гарантированности и обыкновенного маразма.
ПыСы: короче ICPrescaler вообще убрал от греха, CKD в регистре SR1 сделал свое дело.

Код:
          TIM_ICInitTypeDef TIM_ICInitStructure;

          //Enter the content in the structure by default
          TIM_ICStructInit(&TIM_ICInitStructure);
          //выбрать входной терминал IC1
          TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
          //Захват фронт
          TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
          //сопоставлен с TI1
          TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
          //Настроить входное частотное деление замеряемого сигнала, не делим чтоб не потерять
          TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
          //filter value fSAMPLING=fDTS/32, выборка N=8.
          TIM_ICInitStructure.TIM_ICFilter = 15;
          //Initialize the specified parameters in TIM_ICInitStructure TIM3
          TIM_ICInit(TIM3, &TIM_ICInitStructure);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт окт 19, 2021 07:59:37 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 0
Цитата:
да потому что дребезг я отфильтровать расчетным путем не смог

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


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт окт 19, 2021 09:50:53 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
По этой SPL'ной мешанине вообще непонятно, что там происходит. Но что-то очень похоже, что таймер вообще не в режиме энкодера инициализирован, а в тупом режиме счета по одному каналу!

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт окт 19, 2021 10:50:25 
Открыл глаза

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Ср апр 17, 2019 12:04:23
Сообщений: 75
Рейтинг сообщения: 0
Цитата:
да потому что дребезг я отфильтровать расчетным путем не смог

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

Ну сейчас получилось, дребезг и так таймером обсчитывается, не могу только "быстрый" настолько, что не успеваю выйти из прерывания, потому и выставил верхнюю границу в 70кГц - ее хватает за глаза. Про осцил - если честно такие частоты надо задавать, а не ловить, осцил есть, а вот генератора нема, потому и шел расчетным путем. По поводу дребезга - и работы с RC и триггерами - все это конечно необходимо НО, если сигнал реально идет с частотой 70 кГц, зачем мне его гасить, система должна справляться, а вот то что не попало в диапазон, можно, но для надежности и программа тоже должна справляться.

Добавлено after 8 minutes 22 seconds:
По этой SPL'ной мешанине вообще непонятно, что там происходит. Но что-то очень похоже, что таймер вообще не в режиме энкодера инициализирован, а в тупом режиме счета по одному каналу!

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


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт окт 19, 2021 10:58:43 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 0
Странная логика. У тебя идёт дребезг с энкодера. Не зная параметров дребезга, ни программно, ни аппратно его не возможно подавить. Без подавления дребезга просто не понятно, что там насчитает таймер.

Добавлено after 2 minutes 23 seconds:
Покажи осциллограмму сигналов с энкодера.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт окт 19, 2021 12:17:47 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
А у меня вопрос: что в битах CKD регистра TIM3->CR1? Если там по нулям, то fDTS = fCK_INT, т.е. фильтр просто может и не отработать... А вот если туда двоечку записать, то fDTS будет в четыре раза меньше fCK_INT… А это — уже не 48МГц, а 12МГц. Т.е. при фильтрации fDTS/32 N=8 получим, что таймер будет отсекать все шумы выше ~46.9кГц.
И еще: если на PCLK (APB) нет важной периферии, можно APB prescaler загнать в 1/16, в этом случае fCK_INT будет равна HCLK/8, т.е. 6МГц, если AHB шурует на 48 (только учесть это при конфигурации усартов и прочей периферии, сидящей на APB).
Ну и совсем уж в качестве экспериментов, можно AHB притормозить. Правда, при этом затормозится еще и обращение к памяти, DMA и т.д., и т.п.

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт окт 19, 2021 12:51:55 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Eddy_Em, глянь мой код
Спойлер
Код:
   RCC->AHBENR |= RCC_AHBENR_GPIOAEN; //включить тактирование порта AHB = 48

   /** TIM3 GPIO Configuration
       PA6    ------> TIM3_CH1
       PA7    ------> TIM3_CH2
   */

   // настройка вывода PA6
     GPIOA->MODER &= ~(GPIO_MODER_MODER6);
     GPIOA->MODER |= (GPIO_MODER_MODER6_1);   //10 Alternate
     GPIOA->PUPDR |= GPIO_PUPDR_PUPDR6_0;       //01 Alternate Function PP Pull-up
     // настройка вывода PA7
     GPIOA->MODER &= ~(GPIO_MODER_MODER7);
     GPIOA->MODER |= (GPIO_MODER_MODER7_1);
     GPIOA->PUPDR |= GPIO_PUPDR_PUPDR7_0; //01

   /*Configure GPIO pin alternate function */
   GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_1);
   /*Configure GPIO pin alternate function */
   GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_1);

   RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;                   //тактирование таймера
   TIM3->CCMR1 |= TIM_CCMR1_CC1S_0 | TIM_CCMR1_CC2S_0;  //полярность сигнала для каждого входа
   TIM3->CCER &= (uint16_t)(~(TIM_CCER_CC1P | TIM_CCER_CC2P));   //   PA6 PA7
   TIM3->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1 | TIM_SMCR_ETF;      //режим энкодера

   TIM3->CR1 |= TIM_CR1_CKD_1;
   TIM3->CCMR1 |= TIM_CCMR1_IC1F_3 | TIM_CCMR1_IC1F_2 | TIM_CCMR1_IC1F_1 | TIM_CCMR1_IC1F_0;
   TIM3->CCMR1 |= TIM_CCMR1_IC2F_3 | TIM_CCMR1_IC2F_2 | TIM_CCMR1_IC2F_1 | TIM_CCMR1_IC2F_0;

   TIM3->ARR = 0xFFFF;       //значение, до которого считает CNT
   TIM3->CNT = 0x1FFF;
   TIM3->CR1 |= TIM_CR1_CEN;

На плате энкодера еще два резистора по 10кОм впаяны, на подтяжку.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт окт 19, 2021 12:58:01 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Dimon456, и что, все равно не фильтрует?
А если APB prescaler на 1/16?

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт окт 19, 2021 13:19:32 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Eddy_Em писал(а):
и что, все равно не фильтрует?
Ну как сказать, один тик плохо отрабатывает, особенно при навигации в меню жутко не удобно, может на два три пункта перескочить.
У меня нет хорошего видео, что нашел
Спойлерсмотреть на нижнюю строку, левые цифры, где 5008, это энкодер
Все таки аппаратная поддержка, не программная.
Но так и хочется кондерчики поставить, думаю на 1nF сойдет.
Eddy_Em писал(а):
А если APB prescaler на 1/16?
не пробовал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт окт 19, 2021 13:36:00 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Можно вообще по RC-фильтру килогерц на 10 воткнуть.

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Ср ноя 03, 2021 15:22:08 
Первый раз сказал Мяу!

Зарегистрирован: Ср сен 25, 2019 17:46:33
Сообщений: 35
Рейтинг сообщения: 0
Доброго дня. Если не против, вклинюсь со своим вопросом.

Энкодер обычный, алиэкспресс-китайский ЕС11, кажется 15 импульсов на оборот, на синей круглой плате. В его обвязке уже есть резисторы подтяжки к питанию и конденсаторы к земле.

Эксперимент проходит на STM32F103C8.
Таймер настроен для работы с энкодером так:

Спойлер
Код:
  htim3.Instance = TIM3;
  htim3.Init.Prescaler = 1;
  htim3.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED3;
  htim3.Init.Period = 100;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
  sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
  sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
  sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
  sConfig.IC1Filter = 15;
  sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
  sConfig.IC2Filter = 15;
  if (HAL_TIM_Encoder_Init(&htim3, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
  {
    Error_Handler();
  }


Значение забирается так:
Спойлер
Код:
encoder_counter = __HAL_TIM_GET_COUNTER(&htim3);


Тут диапазон счетчика энкодера от 0 до 100, без перехода через 0 или через 100, с шагом 1.
При достижении минимального или максимального значения счетчика, если продолжать вращение в ту же сторону дальше, счетчик начинает колебаться у своего достигнутого значения.
Например, досчитали-докрутили до 0, продолжаем крутить в сторону уменьшения дальше, счетчик меняется в диапазоне 0-1-0-0-0-1-0 и т.п.
Или досчитали до 100, крутим в сторону увеличения дальше, видим 100-99-100-99-98 и т.п.
Скорость вращения вала при этом не важна. Если вал оставить в покое в любом своем положении и любом значении счетчика, то самопроизвольного плавания значения нет.
Параметр Input Filter менять пробовал, результата не видно.
При вращении не на границах счета, этого эффекта нет.
Справочно - этот-же энкодер на ардуине ведет себя адекватно.

Есть-ли решение проблемы такого эффекта у энкодера?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Ср ноя 03, 2021 16:04:22 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
U-M, как-то странно у вас настроен энкодер. Не должно такого быть: после 0 должно следовать 99, 98 и так далее; аналогично после 100 должно идти 0, 1, 2 и т.д.
Каловскую портянку вряд ли кто читать будет. Дайте нормальный код инициализации!
P.S. А таймер случаем не в center-aligned mode?

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Ср ноя 03, 2021 23:16:32 
Первый раз сказал Мяу!

Зарегистрирован: Ср сен 25, 2019 17:46:33
Сообщений: 35
Рейтинг сообщения: 0
Да, таймер в aligned mode 3.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Вт июн 20, 2023 10:20:55 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 82
Зарегистрирован: Сб июн 01, 2013 22:24:21
Сообщений: 751
Откуда: ПФО
Рейтинг сообщения: 0
Здрасти :))
У меня иная проблема, опыта в СТМ пока не много поэтому сильно не пинайте.

Вопрос соединения таймеров, возможно ли такое: я подключил энкодер к таймеру Т4 всё работает, но как то нужно настроить прерывание(допустим через каждых 100 тиков этого таймера), полагаю что прерывание по переполнению делать не вариант, потеряем текущее абсолютное значение (0-0xffff), есть идея параллельно к счётному входу подключить второй таймер который бы и генерил прерывание по переполнению к примеру каждые 100 импульсов?
Или это можно как то иначе реализовать? Но только не через прерывания, прерывание должно быть одно и только после делителя импульсов.

В чём собственно суть: на цепи лежит объект, цепь при этом перемещается, на цепи установлен инкрементальный энкодер, в зоне измерения установлен датчик и через допустим 1-5-10 см нужно считывать значения с датчика при этом запоминается значение счётчика в момент начала и конца объекта чтобы потом вычислить итоговую длину.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Ср июн 21, 2023 06:03:32 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 2
alex_ писал(а):
на цепи лежит объект, цепь при этом перемещается, на цепи установлен инкрементальный энкодер

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Ср июн 21, 2023 10:22:48 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 82
Зарегистрирован: Сб июн 01, 2013 22:24:21
Сообщений: 751
Откуда: ПФО
Рейтинг сообщения: 0
Ну как вариант, если не получиться таймеры синхронизировать. Пока пытаюсь T4 master->T12 save


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Ср июн 21, 2023 11:18:47 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 0
Ну как вариант, если не получиться таймеры синхронизировать.

Зачем их синхронизировать? TIM2 и TIM5 имеют аж 32 бита. Впрочем, для большинства задач хватает 16 бит.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Ср июн 21, 2023 13:48:35 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 82
Зарегистрирован: Сб июн 01, 2013 22:24:21
Сообщений: 751
Откуда: ПФО
Рейтинг сообщения: 0
Мне нужно чтобы они работали синхронно, Т4 хранит значение текущего положения цепи(0-0xffff), в Т12 записываем максимальное значение при постижении которого(TIM12_ARR = 20-50-150) счётчик сбрасывается в ноль и формируется прерывание. Хочу сделать всё на аппаратном уровне без заморочки с регистрами сравнения.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Энкодер и STM32
СообщениеДобавлено: Ср июн 21, 2023 14:19:00 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1055
Рейтинг сообщения: 0
alex_ писал(а):
счётчик сбрасывается в ноль и формируется прерывание. Хочу сделать всё на аппаратном уровне без заморочки с регистрами сравнения.

Так ведь если формируется прерывание, то что сложного в нём сбросить счётчик? :))
Если уж так хочется, чтобы всё делалось автоматически, то можно задействовать DMA для записи нуля, хотя, ИМХО, зачем такой изврат?


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 71 ]    , , 3,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 32


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y