xemul 0 26 января, 2023 Опубликовано 26 января, 2023 · Жалоба Если за период опроса энкодер не успевает нащёлкать 2^16, то всё ещё проще uint32_t getEncoder() { static uint16_t oldCnt = 0; // предыдущее значение счётчика таймера static uint32_t encoder = 0; // а это наш 32-битный энкодер int16_t delta = TIM3->CNT - oldCnt; // дельта счётчика, если он считал oldCnt += delta; return encoder += delta; } Если память не жмёт, а энкодеров несколько, то можно придумать каку-нить typedef struct { uint16_t * ptimcnt; int32_t enccnt; int16_t delta; } encoder_t; void update_encoder(encoder_t *penc) { ... }; // по периоду опроса энкодеров int32_t get_encoder(encoder_t *penc) {return penc->enccnt}; // по мере необходимости Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
auric 0 26 января, 2023 Опубликовано 26 января, 2023 · Жалоба В 25.01.2023 в 14:17, tonyk_av сказал: Ведомый настраивается как обычный счётчик. Ведомым счётчик становится после того, как в качестве источника его тактирования указывается выход другого счётчика и включается режим ведомого. вот тут сразу спрошу, а какой триггер предложите? Просто по сути тактирование от другого дает не так много вариантов, я использовал Update, есть еще Enable, Reset, CC итд, но я что-то ни один не воспринял как триггер со знаком, что я имею ввиду? Да то что у меня мой триггер срабатывал на втором счетчике как при переполнении, так и при обратном счете (переход от 65535 в 0) одинаково, то есть счет в обратную сторону не осуществлялся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 31 26 января, 2023 Опубликовано 26 января, 2023 (изменено) · Жалоба 3 hours ago, auric said: Да то что у меня мой триггер срабатывал на втором счетчике как при переполнении Вот тут с битами разберись, они отвечают за прерывания при переходе через ноль: 3 hours ago, auric said: а какой триггер предложите? Если правильно помню, то нужно настроить мастера на нужный режим, а у слэйва выбрать нужный источник импульсов: Ещё напомню, что можно прямо под отладчиком менять настройки таймеров в их регистрах и смотреть результат. В "Руководстве по применению таймеров" было подробное описание работы и пример настройки каскада из таймеров. Оно есть на сайте СТМ и общее для всех STM32. Изменено 26 января, 2023 пользователем tonyk_av Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mitya1698 17 26 января, 2023 Опубликовано 26 января, 2023 · Жалоба В 26.01.2023 в 12:25, xemul сказал: Если за период опроса энкодер не успевает нащёлкать 2^16, то всё ещё проще uint32_t getEncoder() { static uint16_t oldCnt = 0; // предыдущее значение счётчика таймера static uint32_t encoder = 0; // а это наш 32-битный энкодер int16_t delta = TIM3->CNT - oldCnt; // дельта счётчика, если он считал oldCnt += delta; return encoder += delta; } Спасибо, красиво и просто, возьму на заметку, я с IFами делал зачем-то 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
auric 0 27 января, 2023 Опубликовано 27 января, 2023 (изменено) · Жалоба 18 часов назад, tonyk_av сказал: Вот тут с битами разберись, они отвечают за прерывания при переходе через ноль: Если правильно помню, то нужно настроить мастера на нужный режим, а у слэйва выбрать нужный источник импульсов: Ещё напомню, что можно прямо под отладчиком менять настройки таймеров в их регистрах и смотреть результат. В "Руководстве по применению таймеров" было подробное описание работы и пример настройки каскада из таймеров. Оно есть на сайте СТМ и общее для всех STM32. https://community.st.com/s/question/0D53W00001nBOLvSAO/stm32g431-timer-encoder-mode-master-slave Если с пояснениями, то я не видел действительно, как передавая триггер передать и направление счета для подчиненного таймера. Триггер я тоже формировал записывая 0b010 в CR2->MMS, что означает Update. По поводу прерывания при переходе через 0 вообще не понял, у нас нет разделения перехода Underflow и Overflow, все это по сути Update. Изменено 27 января, 2023 пользователем auric Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
tonyk_av 31 27 января, 2023 Опубликовано 27 января, 2023 · Жалоба 1 hour ago, auric said: я не видел действительно, как передавая триггер передать и направление счета для подчиненного таймера Давно уже пора взять МК с подходящими таймера и не выдумывать костыли. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 30 27 января, 2023 Опубликовано 27 января, 2023 · Жалоба Особенно гуманистично это предложение в нынешних условиях в ветке про STM32 звучит (-; "ДелатьИзТогоЧтоЕсть"ModeOn Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 27 января, 2023 Опубликовано 27 января, 2023 · Жалоба On 1/27/2023 at 4:27 PM, Obam said: Особенно гуманистично это предложение в нынешних условиях в ветке про STM32 звучит (-; "ДелатьИзТогоЧтоЕсть"ModeOn Giga Device, Geehy, Artery Заграница нам поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться