Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Энкодер и STM32

Чт окт 14, 2021 10:54:18

Dimon456, а то, что битовым сдвигом определить количество оборотов нельзя будет! Придется использовать деление, которое, напомню, у STM32F0 СОФТОВОЕ!

Re: Энкодер и STM32

Чт окт 14, 2021 11:27:35

Что-то я совсем загнался, а может такое быть, что регистр CCR недоступен для записи? пишу туда напрямую через TIM3->CCR1, через функцию TIM_SetCompare1 (хотя это конечно одно и то же, подготовки как таковой не наблюдается), а толку ноль. Таймер в режиме интерфейса энкодера вроде как может генерировать прерывания по сигналам Capture/Compare, но упорно не хочет писать в регистры сравнения.
Вопрос, если я пытаюсь воспользоваться фильтром (TIM_ICInit), я получается отказываюсь тем самым от работы регистров CCR1 и CCR2 в режиме compare? Просто если так, тогда понятно, эти регистры содержат сигналы и доступны для чтения. Блин как быть? Хочется и фильтр чтобы был, и уставки были на прерывание.
Последний раз редактировалось auric Чт окт 14, 2021 14:05:22, всего редактировалось 1 раз.

Re: Энкодер и STM32

Чт окт 14, 2021 14:03:52

Eddy_Em писал(а):что битовым сдвигом определить количество оборотов нельзя будет!
он у вас что, крутится с бешеной скоростью? Про какой энкодер речь идет?
Eddy_Em писал(а):деление, которое, напомню, у STM32F0 СОФТОВОЕ!
На атмеге делили на 8-16МГц, а F0 на 48-72МГц не поделить?

Re: Энкодер и STM32

Чт окт 14, 2021 14:39:59

Dimon456, если не экономить на мелочах, можно до того "допрограммироваться", что вместо STM32F0 потребуется F7!
Что до аврки, то ардуинщики такое подчас вытворяют, что волосы дыбом встают! Да, можно микроскопом орехи колоть, но зачем?

Re: Энкодер и STM32

Чт окт 14, 2021 14:51:28

Eddy_Em, так вы мне энкодер покажите или нет?

Re: Энкодер и STM32

Чт окт 14, 2021 16:02:10

энкодер покажете или нет?

Да любой энкодер с квадратурным выходом. От тупых "ручек" в формфакторе переменных резисторов до всякой оптики, устанавливаемой на вал шаговика и т.п.
В случае работы с шаговым двигателем нужно каждые несколько миллисекунд проверять, что там нащелкал энкодер. Сравнивать с тем, что нащелкал таймер, пинающий STEP шаговика, принимать решение - уменьшать скорость или же придерживаться рампа.
Я для всех трех шаговиков делаю это в суперлупе. Просто сравниваю текущее значение системного таймера (его SysTick каждую миллисекунду инкрементирует) с временем прошлой проверки. Как не равно, проводится проверка. И понятно, что если эта проверка будет занимать слишком много времени, то могут быть неравномерности хода. Ведь проверить нужно еще и концевики и т.п.
Еще один вариант - запихать проверку в само прерывание SysTick, понизив его приоритет до самого дна, но мне это как-то совсем претит. Нехорошо большие куски, выполняющиеся дольше единиц микросекунд, пихать в прерывания.
Вот если вынести проверку концевиков и всякую математику в суперлуп, то можно и в прерывании проверять заедание вала и управлять рампом. Понятно, что никаких делений в этом случае не допускается - слишком длинная операция.

Re: Энкодер и STM32

Чт окт 14, 2021 17:07:14

Eddy_Em писал(а):Да любой энкодер с квадратурным выходом. От тупых "ручек" в формфакторе переменных резисторов до всякой оптики, устанавливаемой на вал шаговика и т.п.
Думал, что мы про какую-то конкретную модель говорим, а вы охватили весь спектр.
Я то же как-то в поисках идеального решения, и пока его не нашел, а ваше
Eddy_Em писал(а):Я в качестве пробы вот такое наваял.
это не идеальное решение, и только проба, +TIM3->CNT ожно три раза читаете, я бы один раз его прочитал.

Давайте поговорим про такой
это, наверное, самый дешевый.
При всех включенных "цифровых фильтров" не удается добиться его устойчивой работы при повороте вала на один шаг, хочу что бы как в магнитоле отрабатывал. Конденсаторы отсутствуют на выходах энкодера, вот все думаю попробовать поставить на 1nF.

В теме AVR программную обработку перетрясли с ног до головы, но там то же как бы без кондеров ни как.

Re: Энкодер и STM32

Чт окт 14, 2021 17:23:31

Dimon456, я с таким и начинал. Никаких проблем не было - поворот на 1 щелчок четко отрабатывался. Фильтр настроил - и ОК. А без фильтра - да, глючило.

Re: Энкодер и STM32

Чт окт 14, 2021 18:42:51

Dimon456 писал(а):В теме AVR программную обработку перетрясли с ног до головы, но там то же как бы без кондеров ни как.
Этот энкодер разбирали в нескольких темах АВР, к одной и я приложил свою руку. Что могу сказать? Новый такой энкодер дребезжит действительно только на фронтах замыкания/размыкания контактов. Однако, после одной-двух тысяч поворотов он перестает быть новым, и с него лезет такое, что ой! Коллега sunjob привел осциллограммы того, что выдает этот энкодер поизносившись. Далее мы с ним общались в личной переписке, я правил программу, он пробовал ее со своим раздолбанным энкодером, результаты коллега sunjob опубликовал здесь.

А с красивыми оптическими энкодерами (наприме, такими) - никаких вопросов, они спокойно работают, в том числе, и с аппаратной поддержкой инкрементных (квадратурных) энкодеров STM32.

Re: Энкодер и STM32

Чт окт 14, 2021 18:57:41

afz, но как же так, ведь Eddy_Em, писал
Eddy_Em писал(а):я с таким и начинал. Никаких проблем не было
надо было просто
Eddy_Em писал(а):Фильтр настроил - и ОК.

Re: Энкодер и STM32

Чт окт 14, 2021 19:03:37

Однако, после одной-двух тысяч поворотов он перестает быть новым, и с него лезет такое, что ой! Коллега sunjob привел осциллограммы

Жесть-то какая! Хотелось бы все-таки посмотреть, как на это будет реагировать МК. Если дребезг недетерминированный, никаких проблем не должно быть: ну, подумаешь, будет младший бит дребезжать. Да даже если второй бит — хрен с ним, можно ограничить работу минимум двумя "щелчками". А вот если щелчки детерминированы, то нафиг нужен такой дурацкий энкодер? Там и RC-фильтр не поможет, т.к. поди-ка определи частоту среза, чтобы при этом еще и на быстрое вращение энкодера реагировать...

Да, кстати, а не пробовали задрать фильтр на максимум? Конечно, это ограничит частоту вращения, но для энкодера, который крутит человек, не критично. Это ж не движок какой на 10000RPM!

Re: Энкодер и STM32

Чт окт 14, 2021 19:17:27

Eddy_Em писал(а):а не пробовали задрать фильтр на максимум?
Да куда уж максимальнее
Код:
   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;

Re: Энкодер и STM32

Чт окт 14, 2021 20:49:34

Нет, коллеги. Вы не совсем четко представили себе суть происходящего. Есть два сигнала, очень похожих. И сдвинутых на 90 градусов. Высокий уровень сигнала - контакт разомкнут (скользит по голому стеклотекстолиту, без фольги. Низкий уровень с жуткими помехами - контакт скользит по фольге, время от времени обрываясь. Контактов этих два и расположены они так, что четверть периода они оба разомкнуты, следующую четверть периода первый замкнут, второй еще разомкнут, третью четверть замкнуты оба и четвертую первый уже разомкнулся, второй еще замнут. Далее все повторяется. Так вот, прочувствуйте, что там творится в момент, когда замкнуты оба контакта и на оба входа вашего устройства валится тот самый мусор от плохих сухих контактов.

Моя методика с довольно грубой программной моделью сочетания интегратора и триггера Шмитта вполне справляется с этими помехами при не очень высокой скорости вращения вала энкодера (спокойное вращение рукой). Если более тщательно подобрать константы, возможно, она справится и с резким поворотом ручки энкодера, но тут, как всегда, будет компромисс между надежностью и скоростью.

Спросите, зачем это нужно, не проще ли выкинуть этот энкодер и поставить новый? Ответ прост: чем надежнее будет распознаваться вращение энкодера, тем реже придется брать в руки паяльник, чтобы его заменить... :-)

Re: Энкодер и STM32

Чт окт 14, 2021 21:06:35

Dimon456, фильтр неправильно настроен! У тебя fdts/32, 8 семплов. А можно сделать 0101 - fdts/2, 8 семплов. Будет куда как лучше!

Re: Энкодер и STM32

Чт окт 14, 2021 21:40:14

Eddy_Em, я усе перепробовал, начиная от 0000 до 1111, и это CKD от 00 до 10.
Осталось только кондерчики припаять, еще есть вариант с DVD плеера выдрать, уж больно они мне нравятся, но они без кнопки.

Re: Энкодер и STM32

Чт окт 14, 2021 21:57:18

Аж интересно этого "пациента" пощупать стало! С таким-то дребезгом.
Надо будет, если уж делать будет нефиг на выходных, раздраконить один свой энкодер, чтобы звенел получше, да попробовать с ним поработать...
Хотя.. Я работаю с STM32F0, может, это глюки именно STM32F1? Там-то полным-полно багов в железе...

Re: Энкодер и STM32

Пт окт 15, 2021 06:37:42

Если энкодером управляет человек, какая разница сколько именно натрещит энкодер при резком повороте. Резко крутанули - параметр +10. Я так делал.

Re: Энкодер и STM32

Пт окт 15, 2021 08:13:16

Eddy_Em писал(а):Надо будет, если уж делать будет нефиг на выходных, раздраконить один свой энкодер, чтобы звенел получше
Делается довольно просто: берем тихий слабенький движок с редуктором, 30-90 об/мин, через гибкий вал (отрезок резинового шланга 6 мм внутренний) подключаем его к энкодеру и запускаем на некоторое время. Раз в полчаса смотрим, что он выдает. Заодно можно будет оценить долговечность этого энкодера и косвенно - всей партии этих энкодеров, купленной у одного продавца.

Противодействие такому дребезгу - всегда компромисс. Ладно, разряд можно сделать быстрым - если на подтяжку к +5в ставить обычные 10 кОм, поставить разрядный резистор 100 Ом, и вперед. В моей программной модели - еще проще - по замыканию контакта сразу разряжать модель интегратора в ноль. А вот с зарядом сложнее. С одной стороны за время обрыва плохого контакта при скольжении по сектору фольги интегратор не должен успеть зарядиться до порога срабатывания триггера Шмитта. С другой, при сходе контакта в просвет между секторами фольги, интегратор обязан успеть зарядиться до срабатывания триггера Шмитта за время, заметно меньшее четверти периода, иначе будут пропуски. И, при таком подходе, верхняя скорость вращения энкодера всегда ограничена.

Подозреваю, если смазать стеклотекстолитину с контактами какой-нибудь приличной консистентной смазкой, долговечность этого энкодера увеличится раз в 10. Если, конечно, освоить технологию их разборки и последующей правильной сборки. Я с этим точно не справлюсь - зрение не позволит.

Re: Энкодер и STM32

Сб окт 16, 2021 15:43:33

Решил потестировать каскад таймеров, тк так и не добился полной защиты от сбоев при анализе в прерывании, но честно говоря не понял сути каскадирования, толку у меня от него ноль, настроил таймера так:
Код:
// Внутренний триггер для слейва выставляем на сигнал Update
TIM_SelectOutputTrigger(TIM3, TIM_TRGOSource_Update);
//Обозначаем TIM3 как мастер
TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);

//Для TIM3 Master необходим TIM4 Slave TS=TIM4_ITR2
TIM_SelectInputTrigger(TIM4, TIM_TS_ITR2);
//Выбираем тип связи таймеров
TIM_SelectSlaveMode(TIM4, TIM_SlaveMode_External1);

Если переход вверх через переполнение, все нормально, а если назад через 0, то событие генерируется идентичное, но подчиненный не может понять, что это обратный переход счет идет вверх.

Re: Энкодер и STM32

Сб окт 16, 2021 18:19:37

a797945 писал(а):какая разница сколько именно натрещит энкодер при резком повороте.
Вот именно, без разницы.
Мы имеем что? таймер с аппаратной поддержкой энкодера.
a797945 писал(а):Резко крутанули - параметр +10. Я так делал.
А я так не делал.
Таймер посчитает сам, мне достаточно только считать значение счетного регистра и сравнить его с предыдущим значением, и я буду знать не только в какую сторону у меня энкодер крутится но и на сколько крутанули.

Основная проблема в том, что плохо отрабатывает один щелчок.
Ответить