Замер времени работы электродвигателя. STM32, таймер...
Добавлено: Вт апр 25, 2023 17:00:51
День добрый друзья. Может следовало бы написать в раздел ARM, но проблема прикладная, уже в железе и не особо работает так, как задумывается. И видится мне, что проблема не софтовая, но давайте по порядку.
Имеется электродвигатель на 220В (однофазный асинхрон, через конденсатор), управляемый внешней электроникой (реле), которая тут не играет роли. Питание убирается отключением сразу двух питающих проводов.
Имеется мой самопальный прибор, сердцем которого является STM32F103F6T6A.
К питанию самого электромотора подключена схема "детекции наличия питания" - 200к резистор - диодный мост - стабилитрон 5,6В - конденсатор 100мФ/50В резистор 100 Ом - оптопара PC817 -> и идём на ногу МК с таймером по захвату (Таймер_2). Подтяжка "вверх" (внутренняя) на ногу есть!
Внутри МК настроен и тикает ежесекундный таймер (Таймер_1). В Колбэке увеличивает значение переменной "counter_sec" (volatile).
Суть поближе: появляется питание на моторе - "детектор питания" оптопарой прижимает ногу МК на землю - включается таймер по захвату, где в колбэке я обнуляю counter_sec и выходим.
Ждём отключения мотора. Запускается колбэк по высокому фронту (подтяжка ноги) - смотрим на значение counter_sec и если оно меньше 5 (допустим мотор работал всего лишь 3 сек), то кидаем некий "флаг" и уже что-то делается в основном цикле.
Всё собрано в железе, на качественной ПП и протестировано на столе: вместо мотора - просто подаю питание на "детектор" через кнопку. Всё работает.
Но когда ставлю на мотор - происходят чудеса, закономерность которых мне не удаётся отследить: мотор работает около 14 сек (что уже за пределами 5сек) и при выключении, МК кидает флаг, что якобы он работал меньше 5 сек! Но не всегда...
То есть, происходит ложное срабатывание "захвата" с обнуление "счётчика".
Из мыслей только дребезг контактов реле, что включает электромотор...
Как софтово (лучше) или железом (хуже) побороть? Делать задержку в колбэке захвата - моветон ... Ставить триггер Шмидта - ПП не позволяет, максимум могу конденсатор впаять для "сглаживания"....
Имеется электродвигатель на 220В (однофазный асинхрон, через конденсатор), управляемый внешней электроникой (реле), которая тут не играет роли. Питание убирается отключением сразу двух питающих проводов.
Имеется мой самопальный прибор, сердцем которого является STM32F103F6T6A.
К питанию самого электромотора подключена схема "детекции наличия питания" - 200к резистор - диодный мост - стабилитрон 5,6В - конденсатор 100мФ/50В резистор 100 Ом - оптопара PC817 -> и идём на ногу МК с таймером по захвату (Таймер_2). Подтяжка "вверх" (внутренняя) на ногу есть!
Внутри МК настроен и тикает ежесекундный таймер (Таймер_1). В Колбэке увеличивает значение переменной "counter_sec" (volatile).
Суть поближе: появляется питание на моторе - "детектор питания" оптопарой прижимает ногу МК на землю - включается таймер по захвату, где в колбэке я обнуляю counter_sec и выходим.
Ждём отключения мотора. Запускается колбэк по высокому фронту (подтяжка ноги) - смотрим на значение counter_sec и если оно меньше 5 (допустим мотор работал всего лишь 3 сек), то кидаем некий "флаг" и уже что-то делается в основном цикле.
Всё собрано в железе, на качественной ПП и протестировано на столе: вместо мотора - просто подаю питание на "детектор" через кнопку. Всё работает.
Но когда ставлю на мотор - происходят чудеса, закономерность которых мне не удаётся отследить: мотор работает около 14 сек (что уже за пределами 5сек) и при выключении, МК кидает флаг, что якобы он работал меньше 5 сек! Но не всегда...
То есть, происходит ложное срабатывание "захвата" с обнуление "счётчика".
Из мыслей только дребезг контактов реле, что включает электромотор...
Как софтово (лучше) или железом (хуже) побороть? Делать задержку в колбэке захвата - моветон ... Ставить триггер Шмидта - ПП не позволяет, максимум могу конденсатор впаять для "сглаживания"....