Jdenis
Ср 22 августа 2018 г., 7:28
Поэтому мне нужен был постепенный энкодер для моего проекта, я купил несколько дешевых из Китая, что -то около 10USD каждый...
После этого я посмотрел на таблицу данных от STM32F1 и обнаружил, что у них есть встроенный счетчик инкрементного энкодера, поэтому моя миссия состояла в том, чтобы заставить это работать!
Вот видео работает:
Теперь сначала код:
Сначала установите контакты на вход (в данном случае PB6 и PB7)
На установке:
После этого я посмотрел на таблицу данных от STM32F1 и обнаружил, что у них есть встроенный счетчик инкрементного энкодера, поэтому моя миссия состояла в том, чтобы заставить это работать!
Вот видео работает:
Теперь сначала код:
Сначала установите контакты на вход (в данном случае PB6 и PB7)
На установке:
HardwareTimer timer4(4);
timer4.pause();
TIMER4->regs.adv->CCMR1 |= 0x0101;
TIMER4->regs.adv->CCER |= 0x0000;
TIMER4->regs.adv->SMCR |= 0x0303; (reads 8 clock cycles to make sure)
TIMER4->regs.adv->CR1 |= 0x0001;
timer4.refresh();
timer4.resume();
Jdenis
Сб 01 сентября 2018 11:43
На YouTube я получил вопрос:
Гнурелигион
Это довольно гладко! Можете ли вы почувствовать любые удары, как вращающийся энкодер, или он раскатится гладко?
Здесь из http: // www.STM32duino.компонент.
Ответ абсолютно без ударов, это как шариковая подшипника! (вероятно, потому что это )
Ваше здоровье!
Гнурелигион
Это довольно гладко! Можете ли вы почувствовать любые удары, как вращающийся энкодер, или он раскатится гладко?
Здесь из http: // www.STM32duino.компонент.
Ответ абсолютно без ударов, это как шариковая подшипника! (вероятно, потому что это )
Ваше здоровье!
Стивестронг
Пт, сентябрь 07, 2018 8:42 утра
Можете ли вы опубликовать ссылку, откуда вы ее взяли? Какой тип это?
Flyboy74
Пт, сентябрь 07, 2018, 9:40
Возможно, это интересно для людей в этой теме.
Я принес 1 из этих роторных кодеров https: // www.aliexpress.com/item/rotatin ... 39904.HTML Для 1 из моих проектов, но в конце концов не использовал его.
Я принес этот конкретный 1, так как у него есть встроенный дебайт на энкодере, и предполагается, что он даст очень хорошие четкие сигналы без переключения. Хотя я не использовал это, человек, который рекомендовал его мне, сказал, что это исправило проблемы с другими кодерами.
Я принес 1 из этих роторных кодеров https: // www.aliexpress.com/item/rotatin ... 39904.HTML Для 1 из моих проектов, но в конце концов не использовал его.
Я принес этот конкретный 1, так как у него есть встроенный дебайт на энкодере, и предполагается, что он даст очень хорошие четкие сигналы без переключения. Хотя я не использовал это, человек, который рекомендовал его мне, сказал, что это исправило проблемы с другими кодерами.
RGD
Пн 10 сентября 2018 г. 14:43
Привет, JDenis
Это выглядит очень интересно, но у меня еще три вопроса:
Этот код имеет более 16 бит или > 65536 Считается?
и если это не составлять 2400 графиков с 600 PPR -энкодером? Может быть, нужно изменить режим подсчета для использования падения и повышения края?
Где я могу найти информацию о битах конфигурации таймера, которые используются в вашем коде?
Это выглядит очень интересно, но у меня еще три вопроса:
Этот код имеет более 16 бит или > 65536 Считается?
и если это не составлять 2400 графиков с 600 PPR -энкодером? Может быть, нужно изменить режим подсчета для использования падения и повышения края?
Где я могу найти информацию о битах конфигурации таймера, которые используются в вашем коде?
Янсун
Солнце 04 ноября 2018 г. 9:42
[RGD - Пн 10 сентября 2018 г. 14:43] -Вы нашли ответ на это? Мне нужно 32 -битное значение
Этот код имеет более 16 бит или > 65536 Считается?
Янсун
Солнце 13 января 2019 г. 20:33
[Jdenis - Ср 22 августа 2018 г. 7:28] -Я сделал несколько тестов с кодом, и это работает, но не идеально. Когда вы отключите 1line (a или b, не имеет значения), он остается подсчетом (или вниз, в зависимости от канала, который вы отключаете). Так что это на самом деле то же самое, если вы переключаете один пульс вверх и вниз. Вы на самом деле двигаетесь вперед и назад к тому же значению, но счетчик отсчитает. Я думаю, что код должен выглядеть так:
Вот и все, работает ужасно идеально!!!!
HardwareTimer timer4(4);
timer4.pause();
TIMER4->regs.adv->CCMR1 = 0xf1f1; //Capture compare mode register, now CC1S AND CC2S
TIMER4->regs.adv->CCER = 0x0000; // Capture/compare enable register
TIMER4->regs.adv->SMCR = 0x0003; //(reads 8 clock cycles to make sure) // slave mode control registe
TIMER4->regs.adv->CR1 = 0x0001;
TIMER4->regs.adv->PSC = 0x0000;
TIMER4->regs.adv->ARR = 0xffffffff;
timer4.refresh();
timer4.resume();
Янсун
Солнце 13 января 2019 г. 20:37
Для 16-32 -битного таймера у меня есть разжигание, но это не элегантно
/*
pins to input in this case PB6 and PB7
*/
unsigned int count = 0;
unsigned int prevCount = 0;
int overFlowCnt = 0;
long encCnt = 0;
char userInput = 0;
void tim3Handler(void) {
count = TIMER4->regs.adv->CNT;
if ( prevCount > 40000 && prevCount <= 65535 && count < 20000) { //overflow ++
overFlowCnt ++;
}
if (prevCount >= 0 && prevCount < 20000 && count >= 40000) { //overflow ++
overFlowCnt --;
}
encCnt = (65535 * overFlowCnt) + count;
prevCount = count;
}//end tim3handler
void setup() {
HardwareTimer timer4(4);
timer4.pause();
TIMER4->regs.adv->CCMR1 = 0xf1f1; //Capture compare mode register, now CC1S AND CC2S
TIMER4->regs.adv->CCER = 0x0000; // Capture/compare enable register
TIMER4->regs.adv->SMCR = 0x0003; //(reads 8 clock cycles to make sure) // slave mode control registe
TIMER4->regs.adv->CR1 = 0x0001;
TIMER4->regs.adv->PSC = 0x0000;
TIMER4->regs.adv->ARR = 0xffffffff;
timer4.refresh();
timer4.resume();
Serial.begin(9600);
}
void loop() {
Serial.print("now: ");
Serial.print(count);
Serial.print(" flow Count: ");
Serial.print(overFlowCnt);
Serial.print(" Enc count: ");
Serial.println(encCnt);
delay(300);
}
mausi_mick
Пн 28 января 2019 г., 2:49
один вопрос:
Могу ли я использовать его для двух инкрементных энкодеров ?
Могу ли я использовать его для двух инкрементных энкодеров ?
Rogerclark
Пн 28 января 2019 г., 4:38 утра
Я уверен, что вам нужно использовать другой таймер для другого кодера.
Вам нужно будет дважды проверить, какие счетчики доступны и какие булавки они подключены. эн.глин. Возможно использовать таймер3 (хотя я мог ошибаться, и вам нужно было бы проверить это самостоятельно)
Вам нужно будет дважды проверить, какие счетчики доступны и какие булавки они подключены. эн.глин. Возможно использовать таймер3 (хотя я мог ошибаться, и вам нужно было бы проверить это самостоятельно)
Янсун
Чт 14 февраля 2019 г. 9:57 утра
Timer4 использует PB6/PB7 и Timer3 использует PA6/PA7. Я не проверил, можете ли вы использовать несколько энкодеров одновременно.
Если вы установите Cube MX, вы можете легко увидеть, какие контакты вам нужны, и я думаю, если вы можете использовать несколько энкодеров одновременно.
Если вы установите Cube MX, вы можете легко увидеть, какие контакты вам нужны, и я думаю, если вы можете использовать несколько энкодеров одновременно.