Dimon456, а то, что битовым сдвигом определить количество оборотов нельзя будет! Придется использовать деление, которое, напомню, у STM32F0 СОФТОВОЕ!
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Что-то я совсем загнался, а может такое быть, что регистр CCR недоступен для записи? пишу туда напрямую через TIM3->CCR1, через функцию TIM_SetCompare1 (хотя это конечно одно и то же, подготовки как таковой не наблюдается), а толку ноль. Таймер в режиме интерфейса энкодера вроде как может генерировать прерывания по сигналам Capture/Compare, но упорно не хочет писать в регистры сравнения. Вопрос, если я пытаюсь воспользоваться фильтром (TIM_ICInit), я получается отказываюсь тем самым от работы регистров CCR1 и CCR2 в режиме compare? Просто если так, тогда понятно, эти регистры содержат сигналы и доступны для чтения. Блин как быть? Хочется и фильтр чтобы был, и уставки были на прерывание.
Последний раз редактировалось auric Чт окт 14, 2021 14:05:22, всего редактировалось 1 раз.
Dimon456, если не экономить на мелочах, можно до того "допрограммироваться", что вместо STM32F0 потребуется F7! Что до аврки, то ардуинщики такое подчас вытворяют, что волосы дыбом встают! Да, можно микроскопом орехи колоть, но зачем?
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
К конденсаторам источников питания высокой мощности предъявляются высокие требования по качеству и надежности. Пленочные – единственный тип конденсаторов, который может справиться с такой задачей. Компания Hongfa предлагает продукцию, которая подходит для применения практически во всех функциональных узлах типовых AC/DC- или DC/AC-преобразователей. Рассмотрим характеристики и применения плёночных конденсаторов Hongfa для различных решений.
Вслед за сериями на DIN-рейку DDRH-60/120/240 и на шасси RSDH-150/300 компания MEAN WELL выпустила новые маломощные DC/DC-преобразователи DDRH-15/30/45 со сверхшироким входным напряжением 150…1500 В, и монтажом не только на DIN-рейку, но и печатную плату или винтовым соединением. Все преобразователи семейства DDRH и RSDH работают при температурах -40…80°C и обладают высокой изоляцией 4000 В AC между входом и выходом, что обеспечивает надежную защиту. Они подходят для использования на высоте до 5000 м и сертифицированы по стандарту IEC62109-1 для фотоэлектрических систем. Преобразователи DDRH/RSDH есть в наличии и под заказ.
Да любой энкодер с квадратурным выходом. От тупых "ручек" в формфакторе переменных резисторов до всякой оптики, устанавливаемой на вал шаговика и т.п. В случае работы с шаговым двигателем нужно каждые несколько миллисекунд проверять, что там нащелкал энкодер. Сравнивать с тем, что нащелкал таймер, пинающий STEP шаговика, принимать решение - уменьшать скорость или же придерживаться рампа. Я для всех трех шаговиков делаю это в суперлупе. Просто сравниваю текущее значение системного таймера (его SysTick каждую миллисекунду инкрементирует) с временем прошлой проверки. Как не равно, проводится проверка. И понятно, что если эта проверка будет занимать слишком много времени, то могут быть неравномерности хода. Ведь проверить нужно еще и концевики и т.п. Еще один вариант - запихать проверку в само прерывание SysTick, понизив его приоритет до самого дна, но мне это как-то совсем претит. Нехорошо большие куски, выполняющиеся дольше единиц микросекунд, пихать в прерывания. Вот если вынести проверку концевиков и всякую математику в суперлуп, то можно и в прерывании проверять заедание вала и управлять рампом. Понятно, что никаких делений в этом случае не допускается - слишком длинная операция.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Да любой энкодер с квадратурным выходом. От тупых "ручек" в формфакторе переменных резисторов до всякой оптики, устанавливаемой на вал шаговика и т.п.
Думал, что мы про какую-то конкретную модель говорим, а вы охватили весь спектр. Я то же как-то в поисках идеального решения, и пока его не нашел, а ваше
это не идеальное решение, и только проба, +TIM3->CNT ожно три раза читаете, я бы один раз его прочитал.
Давайте поговорим про такойСпойлерэто, наверное, самый дешевый. При всех включенных "цифровых фильтров" не удается добиться его устойчивой работы при повороте вала на один шаг, хочу что бы как в магнитоле отрабатывал. Конденсаторы отсутствуют на выходах энкодера, вот все думаю попробовать поставить на 1nF.
В теме AVR программную обработку перетрясли с ног до головы, но там то же как бы без кондеров ни как.
Dimon456, я с таким и начинал. Никаких проблем не было - поворот на 1 щелчок четко отрабатывался. Фильтр настроил - и ОК. А без фильтра - да, глючило.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
Dimon456 писал(а):
В теме AVR программную обработку перетрясли с ног до головы, но там то же как бы без кондеров ни как.
Этот энкодер разбирали в нескольких темах АВР, к одной и я приложил свою руку. Что могу сказать? Новый такой энкодер дребезжит действительно только на фронтах замыкания/размыкания контактов. Однако, после одной-двух тысяч поворотов он перестает быть новым, и с него лезет такое, что ой! Коллега sunjob привел осциллограммы того, что выдает этот энкодер поизносившись. Далее мы с ним общались в личной переписке, я правил программу, он пробовал ее со своим раздолбанным энкодером, результаты коллега sunjob опубликовал здесь.
А с красивыми оптическими энкодерами (наприме, такими) - никаких вопросов, они спокойно работают, в том числе, и с аппаратной поддержкой инкрементных (квадратурных) энкодеров STM32.
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Однако, после одной-двух тысяч поворотов он перестает быть новым, и с него лезет такое, что ой! Коллега sunjob привел осциллограммы
Жесть-то какая! Хотелось бы все-таки посмотреть, как на это будет реагировать МК. Если дребезг недетерминированный, никаких проблем не должно быть: ну, подумаешь, будет младший бит дребезжать. Да даже если второй бит — хрен с ним, можно ограничить работу минимум двумя "щелчками". А вот если щелчки детерминированы, то нафиг нужен такой дурацкий энкодер? Там и RC-фильтр не поможет, т.к. поди-ка определи частоту среза, чтобы при этом еще и на быстрое вращение энкодера реагировать...
Да, кстати, а не пробовали задрать фильтр на максимум? Конечно, это ограничит частоту вращения, но для энкодера, который крутит человек, не критично. Это ж не движок какой на 10000RPM!
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
Нет, коллеги. Вы не совсем четко представили себе суть происходящего. Есть два сигнала, очень похожих. И сдвинутых на 90 градусов. Высокий уровень сигнала - контакт разомкнут (скользит по голому стеклотекстолиту, без фольги. Низкий уровень с жуткими помехами - контакт скользит по фольге, время от времени обрываясь. Контактов этих два и расположены они так, что четверть периода они оба разомкнуты, следующую четверть периода первый замкнут, второй еще разомкнут, третью четверть замкнуты оба и четвертую первый уже разомкнулся, второй еще замнут. Далее все повторяется. Так вот, прочувствуйте, что там творится в момент, когда замкнуты оба контакта и на оба входа вашего устройства валится тот самый мусор от плохих сухих контактов.
Моя методика с довольно грубой программной моделью сочетания интегратора и триггера Шмитта вполне справляется с этими помехами при не очень высокой скорости вращения вала энкодера (спокойное вращение рукой). Если более тщательно подобрать константы, возможно, она справится и с резким поворотом ручки энкодера, но тут, как всегда, будет компромисс между надежностью и скоростью.
Спросите, зачем это нужно, не проще ли выкинуть этот энкодер и поставить новый? Ответ прост: чем надежнее будет распознаваться вращение энкодера, тем реже придется брать в руки паяльник, чтобы его заменить...
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Dimon456, фильтр неправильно настроен! У тебя fdts/32, 8 семплов. А можно сделать 0101 - fdts/2, 8 семплов. Будет куда как лучше!
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Eddy_Em, я усе перепробовал, начиная от 0000 до 1111, и это CKD от 00 до 10. Осталось только кондерчики припаять, еще есть вариант с DVD плеера выдрать, уж больно они мне нравятся, но они без кнопки.
Аж интересно этого "пациента" пощупать стало! С таким-то дребезгом. Надо будет, если уж делать будет нефиг на выходных, раздраконить один свой энкодер, чтобы звенел получше, да попробовать с ним поработать... Хотя.. Я работаю с STM32F0, может, это глюки именно STM32F1? Там-то полным-полно багов в железе...
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
Eddy_Em писал(а):
Надо будет, если уж делать будет нефиг на выходных, раздраконить один свой энкодер, чтобы звенел получше
Делается довольно просто: берем тихий слабенький движок с редуктором, 30-90 об/мин, через гибкий вал (отрезок резинового шланга 6 мм внутренний) подключаем его к энкодеру и запускаем на некоторое время. Раз в полчаса смотрим, что он выдает. Заодно можно будет оценить долговечность этого энкодера и косвенно - всей партии этих энкодеров, купленной у одного продавца.
Противодействие такому дребезгу - всегда компромисс. Ладно, разряд можно сделать быстрым - если на подтяжку к +5в ставить обычные 10 кОм, поставить разрядный резистор 100 Ом, и вперед. В моей программной модели - еще проще - по замыканию контакта сразу разряжать модель интегратора в ноль. А вот с зарядом сложнее. С одной стороны за время обрыва плохого контакта при скольжении по сектору фольги интегратор не должен успеть зарядиться до порога срабатывания триггера Шмитта. С другой, при сходе контакта в просвет между секторами фольги, интегратор обязан успеть зарядиться до срабатывания триггера Шмитта за время, заметно меньшее четверти периода, иначе будут пропуски. И, при таком подходе, верхняя скорость вращения энкодера всегда ограничена.
Подозреваю, если смазать стеклотекстолитину с контактами какой-нибудь приличной консистентной смазкой, долговечность этого энкодера увеличится раз в 10. Если, конечно, освоить технологию их разборки и последующей правильной сборки. Я с этим точно не справлюсь - зрение не позволит.
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Решил потестировать каскад таймеров, тк так и не добился полной защиты от сбоев при анализе в прерывании, но честно говоря не понял сути каскадирования, толку у меня от него ноль, настроил таймера так:
Код:
// Внутренний триггер для слейва выставляем на сигнал 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, то событие генерируется идентичное, но подчиненный не может понять, что это обратный переход счет идет вверх.
какая разница сколько именно натрещит энкодер при резком повороте.
Вот именно, без разницы. Мы имеем что? таймер с аппаратной поддержкой энкодера.
a797945 писал(а):
Резко крутанули - параметр +10. Я так делал.
А я так не делал. Таймер посчитает сам, мне достаточно только считать значение счетного регистра и сравнить его с предыдущим значением, и я буду знать не только в какую сторону у меня энкодер крутится но и на сколько крутанули.
Основная проблема в том, что плохо отрабатывает один щелчок.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения