Как прочитать сигнал ШИМ частотой 25 кГц с разъема вентилятора ПК?
Я хотел бы управлять скоростью двигателя постоянного тока, используя выход ШИМ из разъема моей материнской платы.
Вот стандартная распиновка 4-проводного разъема вентилятора ПК:
╔═══╦════════╦═════════════════╦════════╗
║ # ║ Name ║ Description ║ Wire ║
╠═══╬════════╬═════════════════╬════════╣
║ 1 ║ GND ║ Ground ║ black ║
║ 2 ║ +12V ║ Fan Power ║ yellow ║
║ 3 ║ SIGNAL ║ Fan RPM ║ green ║
║ 4 ║ PWM ║ Digital Control ║ blue ║
╚═══╩════════╩═════════════════╩════════╝
Поскольку мой двигатель постоянного тока не имеет входа ШИМ, я подумал об использовании ATmega328P
в моей специальной плате для считывания выхода ШИМ разъема вентилятора (контакт 4) - чтобы я мог могу использовать драйвер двигателя для управления скоростью моего двигателя.
Однако я не уверен, как мне следует считывать сигнал ШИМ с материнской платы.
Каков уровень напряжения
HIGH
на выходе ШИМ?
Нужен ли для этого резистор делителя напряжения?В источнике управления вентилятором указано, что максимальное значение составляет 5,25 В, но поскольку я сам не проверял это, я не хочу рисковать подавать сигнал 12 В на мой микроконтроллер. строки ввода.
Следует ли мне использовать функцию <code>pulseIn()</code> для 25 кГц ( Диапазон 21~28 кГц) Выход ШИМ?
Сможет ли ATmega328p справиться с этим диапазоном частот?
Я предпочитаю использовать загрузчик Arduino с библиотекой коммутации, но если у вас есть примеры для AVR, которым я мог бы следовать, я был бы признателен.
@David Refoua, 👍0
Обсуждение1 ответ
Лучший ответ:
Должен ли я использовать функциюpulsIn() для выхода ШИМ 25 кГц (диапазон 21–28 кГц)? Сможет ли ATmega328p справиться с этим диапазоном частот?
Нет и нет; 1/25000 = 0,000040 или 40 микросекунд (мкс) и документация дляpulsIn() говорит:
Работает с импульсами длительностью от 10 микросекунд до 3 минут
Однако частота ШИМ является максимальной во времени, при 50 % у вас будет ВЫСОКИЙ прямоугольный сигнал в течение 20 мкс и низкий в течение 20 мкс. PulseIn не будет работать, если коэффициент заполнения ШИМ опустится ниже 25 %
Что вам нужно сделать, так это поместить «аккумулятор» (RC-фильтр) между выходом ШИМ и аналоговым входом и считать с него напряжение.
Однако, поскольку вы этого хотите,
... управлять скоростью двигателя постоянного тока, используя выход ШИМ из разъема моей материнской платы
и заголовок скорости вращения вентилятора уже предназначен для этого, вы просто используете сигнал ШИМ для управления транзистором, который управляет двигателем, сам двигатель здесь будет действовать как аккумулятор; микроконтроллер не нужен!
... чтобы я мог использовать драйвер двигателя для управления скоростью моего двигателя.
вам потребуется сгенерировать очень похожий, почти наверняка идентичный ШИМ-сигнал для управления контроллером/драйвером двигателя
Источник управления вентилятором указывает, что максимальное напряжение составляет 5,25 В, но поскольку я сам это не проверял, я не хочу рисковать подавать сигнал 12 В на входные линии моего микроконтроллера.
Доверяйте своей документации или проверяйте ее, если не доверяете документации!
+1, спасибо за хорошо объясненный ответ, ваше решение имеет смысл! Хотя помимо управления двигателем мне еще очень хотелось бы с помощью чего-нибудь прочитать выходной сигнал ШИМ и передать данные в мой микроконтроллер, чтобы я мог, например, отобразить их. Есть ли способ добиться этого в цифровом формате вместо использования RC-фильтра?, @David Refoua
@DavidRefoua AnalogRead(...) вернет значение от 0 до 1023; где 0 — 0 В, а 1023 — 5 В; RC-фильтр предназначен для стабилизации напряжения, чтобы АЦП мог его прочитать., @esoterik
- Установите частоту ШИМ на 25 кГц.
- Какова частота PWM-выхода на Arduino
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- PWM-вывод Arduino Nano не функционирует
Сигнал ШИМ, управляющий вентилятором, может быть от 21 до 28 кГц. Импульсы индикатора оборотов — это просто один (или два) импульса за оборот. Если предположить, что скорость вращения вентилятора составляет 10 000 об/мин (безумно высокая скорость для вентилятора) и два импульса на оборот, вы получите импульсы об/мин только с частотой немногим более 300 Гц. Их легко прочитать с помощью Arduino., @JRE
Но не обязательно использовать команду «импульс». Это дает вам ширину импульса, но не время между импульсами., @JRE