Size: a a a

2020 January 09

s

stD in STM32
Что из себя представляет датчик, это геркон или ещё что-то?
источник

L

LADA_BenLADA in STM32
stD
Что из себя представляет датчик, это геркон или ещё что-то?
Это фото диод , свето диод и компаратор .
источник

s

stD in STM32
Тогда и дребезга быть не должно.
источник

s

stD in STM32
Покажите код, архивом, сюда.
источник

L

LADA_BenLADA in STM32
stD
Таймер запустили на прерывание раз в секунду, а в обработчике внешнего прерывания приращиваете переменную. В обработчики таймера смотрите сколько в переменной, делаете тривиальное вычисления и получаете обороты. После этого обнуляете переменну.
Стойте а что касается внешней частоты? Таймер или внешние прерывание берёт её?
источник

s

stD in STM32
Не понял.
источник

s

stD in STM32
Какая внешняя частота?
источник

L

LADA_BenLADA in STM32
stD
Таймер запустили на прерывание раз в секунду, а в обработчике внешнего прерывания приращиваете переменную. В обработчики таймера смотрите сколько в переменной, делаете тривиальное вычисления и получаете обороты. После этого обнуляете переменну.
С датчика. Просто по такой формулировке получается система в системе .
источник

L

LADA_BenLADA in STM32
И внешнего мы нечего не высчитываем
источник

s

stD in STM32
Давайте так: как я  понял задачу - есть некий электродвигатель,  и вам нужно регулировать его обороты (при увеличении нагрузки обороты падают и вам нужно добавлять электричества этому мотору).

Считываете вы обороты по какому-то датчику, который срабатывает один раз за один оборот.

Так?
источник

s

stD in STM32
Таймер просто отсчитывает секундные интервалы (основываясь на своей внутренней системной частоте). Обработчик внешнего прерывания считает  импульсы. Как только таймер отсчитывает секунду, он смотрит сколько насчёлкал обработчик внешнего прерывания.
источник

L

LADA_BenLADA in STM32
stD
Таймер просто отсчитывает секундные интервалы (основываясь на своей внутренней системной частоте). Обработчик внешнего прерывания считает  импульсы. Как только таймер отсчитывает секунду, он смотрит сколько насчёлкал обработчик внешнего прерывания.
Именно. Только как обработчик считает 4 мс если он более медленную частоту не может .
источник

s

stD in STM32
"Только как обработчик считает 4 мс"

У нас два обработчика -один от таймера, другой от внешнего прерывания. Когда задаёте вопрос, обозначайте что имеете в виду.
источник

L

LADA_BenLADA in STM32
Я про обработчик внешних прерываний "EXTI"
источник

s

stD in STM32
Обработчик EXTI никаких миллисекунд не считает, он считает внешние импульсы.

Когда я написал 4 мс, я имел в виду, что при максимальной скорости 15000 обр/мин., обработчик будет срабатывать раз в 4мс, то есть времени полно, и можно смело использовать внешнее прерывание вместо конструкции с таймерами, описанной в моей статье.
источник

L

LADA_BenLADA in STM32
Ок. То есть (немного повторюсь но это для понимания) мы используем один таймер для времени  (переполнение его раз в секунду тактируется он от шины самого МК 72 мГц через делитель 720) . До момента его переполнение  мы сравниваем переменную которою мы получили от обработчика прерываний с предыдущей (начальной) частотой , после сравнения обновляем переменную внешних прерыванию и переполняется таймер.
Так пока не выполняется условие.
источник

s

stD in STM32
Я не смогу вам помочь потому, что решительно не понимаю что вы хотите сделать.
источник

NO

Nikolay Oleynik in STM32
@DimastD @CoBa31rus Спасибо за помощь с юсб! Наконец-то  приехал с деревни в цивилизацию, как будет время попробую ваши советы. Сорри, что игнорил, связи не было от слова совсем
источник

AS

Alexey Sidorov in STM32
LADA_BenLADA
Хорошо. Скажу точно так как мне это сообщили .
Есть некий двигатель  и у него есть своебразный тахометр , точнее это просто датчик который выводит за один полный оборот шпинделя двигателя один прямоугольный импульс . Сам двигатель управляется через какой-то сложный диммер. Но иногда под неправильно выставленной  нагрузкой двигатель просаживаеться по оборотам и об этом нужно быстро сообщать и реагировать .
Задача если подумать проста взять начальную частоту работы с выхода датчика двигателя ( ну к примеру 10-20 после начала работы всей установки ) потом сравнивать каждую секунду начальное значение частоты вращение с текущей , и если текущие значение меньше начального  то сообщать об этом.
Для себя понял что лучше  считывать частоту с датчика  через пин на котором обработчик внешних прерываний (по спаду импульса ). Настроил проект . Вроде все работает (подключил с начало кнопку потом мультивибратор ). Начал подымать частоту на пине до пяти сотен герц не срабатывает , а мне нужно срабатывание до 13 тысяч Гц.
Отсюда вопрос как производить считывание через обработку внешних прерываний быстрее ?
В сети есть только подключение кнопки (просто через кулбек обрабатывается событие) про скорость считывание нечего сам не нашёл .
Значение частоты всего МК 72мГц .
если еще интересно. сделал как я это вижу.
подсчет кол-ва тиков таймера между двумя импульсами (настроил на 1 мкс, так удобно считать и разрешающая способность остается не плохой, можно сделать меньше - будет точнее считать).
задействован вход  таймера в режиме захвата\сравнения. таймер тактируется от частоты проца и самое интересное - при захвате сигнала аппаратно сам себя сбрасывает :)
источник

AS

Alexey Sidorov in STM32
пример работы
источник