Доброго времени суток. Пытаюсь реализовать на STM32 измерение скорости вращения вентилятора. Идея очень простая на вход таймера в режиме Input Capture direct mode подаем сигнал с датчика хола вентилятора. Дальше обрабатываем прерывание по нарастающему фрону сигнала. Сбрасываем счетчик и оставляем его считать до следующего наростающего фронта. Соответственно смотри до скольки досчитал тайме и снова его сбрасываем. Собственно получаем количество счетов за период. Ну и дальше считаем скорост.
Ну судя по выводу HAL_TIM_ReadCapturedValue(&htim3, TIM_CHANNEL_1) успешно срабатывет, устанавливается правильное значение 56 или 57 Но иногда проскакивает значение 0
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Ну судя по выводу HAL_TIM_ReadCapturedValue(&htim3, TIM_CHANNEL_1) успешно срабатывет, устанавливается правильное значение 56 или 57
А с чего вы решили, что 56 или 57 являются правильными значениями? Дайте расклад по частотам таймера и сигнала, включая форму сигнала с Холла. С чего вдруг результат шестиразрядный в 32-разрядном контроллере? Все это смахивает на медленно меняющийся входной сигнал без корректного его формирования по входу, что приводит к дребезгу. А бездумный выбор частот дает нулевой результат вместо хаотичного значения. Вообще то в таких случаях применяют осциллограф, наблюдая за ногой МК с сигналом и дергая любой ногой в обработчике по таймеру. Ну и доставляет применение HAL в столь простой задаче. Вы не в состоянии обработать прерывание без колбэка?
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
А с чего вы решили, что 56 или 57 являются правильными значениями? Дайте расклад по частотам таймера и сигнала, включая форму сигнала с Холла.
Судя по осциллографу сигнал с датчика холла меандр с частотой 87-89 герц. т.е. период 11,2 - 11,5 мс.
Таймер тактируется от 72МГц. Prescaler 14399. т.е. таймер считает с частотой 5 кГц или периодом 0,2 мс соответственно за 11,2-11,5 таймер успевает досчитать до 56 - 57.
Так что цифры вроде правильные. Вечером доберусь до стенда осциллограмму выложу
Цитата:
С чего вдруг результат шестиразрядный в 32-разрядном контроллере?
Из каких соображений вы выбирали предделитель таймера?
Исходил из того что у вентиляторов с которыми я экспериментирую скорость вращения 20 - 200 оборотов в секунду. Соответственно периоды сигналов которые я буду измерять 5 - 50 мс.
Излишняя точность мне не нужна, грубо значений от 0 до 255 мне хватит (8 бит). Ну собственно обратным счетом и посчитал предделитель.
Ну тогда в прерывании или колбэке дергаете (делаете тоггл - смену состояния) свободной ногой и смотрите на осциллографе два сигнала - входной и с этой ноги.
Внесу ещё версию: из-за помехи или каких-то особенностей сигнала прерывание срабатывает два раза подряд. Соответственнно, первый раз успел насчитать 57, а второй раз сразу за ним и будет 0.
Именно эту версию я и озвучил чуть ранее, рассказав про дребезг и слишком большой коэффициент деления. По поводу точности. Для автора темы. Сначала измеряют с максимально возможной разрядностью, а лишь потом результат приводят к необходимой. В таком случае многое было бы понятно уже сейчас.
Проблема решена )) Для борьбы с дребезгом схема включения была вот такая
С точки зрения осцилограммы полченной на ножке микропроцессора вроде все норм
Но если посмотреть поближе, то это выглядит вот так
Длительность наростающего фронта примерно 1,3 мс, примерно 10% периода.
Убрал конденсатор 0.1uF на землю и все стало замечательно. Никаких выбросов нет. Правда осцилограмма стала вот такой.... С иголками.... Видимо из за ШИМ
Зато измерения скорости без ошибок. Показания счетчика вот такие
А бездумный выбор частот дает нулевой результат вместо хаотичного значения.
0 там из-за того, что чел зачем-то обнуляет CNT в ISR. И при наличии дребезга во входном сигнале (с которым он тоже не борется никак) как раз и будут иногда появляться нули.
Проблема решена )) Для борьбы с дребезгом схема включения была вот такая
Для борьбы с дребезгом следует внести задержку в работу алгоритма после срабатывания прерывания. Т.е. - после получения прерывания захвата (от фронта), переключить таймер в режим выдержки небольшой паузы (режим MATCH), после истечения которой вернуть его обратно в режим CAPTURE. Т.е. - создать небольшую мёртвую зону после срабатывания. Всё.
А манипуляциями с внешними цепями вы проблему не решили, а просто снизили вероятность её проявления.
А бездумный выбор частот дает нулевой результат вместо хаотичного значения.
0 там из-за того, что чел зачем-то обнуляет CNT в ISR. И при наличии дребезга во входном сигнале (с которым он тоже не борется никак) как раз и будут иногда появляться нули.
Если бы делитель был выбран с максимальным динамическим диапазоном скоростей, то нулей бы не было. Патамушта дребезг приводил бы к ненулевому захвату. Маленькому и хаотичному, но ненулевому. А так, да, нужно копить данные захватов в кольцевом буфере вычислять разницу соседних значений и слегка их фильтровать прямоугольным окном. ЗЫ. Нет у него никаких иголок. Есть индуктивный сигнал от земляной петли щупа осциллографа. И он далек до порога и гистерезиса входного триггера Шмитта. Ноги и подтяжки надо выбирать правильные или пропускать сигнал через компаратор с включенным цифровым фильтром. Ставить емкость на сигнал с открытого стока - очень плохая затея. Но если бы автор сменил активный фронт, то результат получил бы и с емкостью.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения