Как (легко) подключить 5-вольтовый 3-контактный вентилятор?

У меня есть 3-контактный вентилятор с 5 V. Я хочу иметь возможность:

  1. запитайте его от платы Arduino Uno или Seeeduino Lotus, а в идеале;
  2. иметь возможность изменять скорость.

Большинство ресурсов, которые я могу найти в Интернете, объясняют, как подключить стандартный вентилятор на 12 В, и, кроме того, усложняют задачу, объясняя, как получить скорость вентилятора или управлять несколькими вентиляторами. Это слишком сложно для меня.

Если я правильно понимаю, я не могу просто подключить вентилятор к аналоговым выходным контактам, потому что абсолютная максимальная мощность на контакт составляет 40 мА (рекомендуется: 20 мА), а вентилятор потребляет 100 мА.

Вместо этого мне нужно каким-то образом подключить два из трех контактов вентилятора к внешнему источнику питания, а третий контакт использовать для управления скоростью. Должен ли я использовать контакты заземления и 5 В, расположенные на левой стороне платы над АНАЛОГОВЫМ ВХОДОМ?

Если нет, какие у меня есть другие варианты? Плата питается от USB-кабеля, и я не вижу возможности разделить мощность на этом уровне между платой и другим устройством, не рискуя повредить плату.

, 👍8


2 ответа


Лучший ответ:

9

Вы правы в своем предположении, что вы не можете питать вентилятор напрямую от Arduino.

Используйте транзистор, например 2N2222 или BC548, который переключается Arduino с помощью одного контакта, чтобы обеспечить достаточный ток для вентилятора.

Например, эта простая схема (обратите внимание, что питание 12 В в вашем случае будет 5 В):

Транзистор, питающий вентилятор

Источник: Управление вентилятором ПК — транзистор с оптроном или без него?1

Однако, как заметил Крисл, у вашего вентилятора три контакта, а не два. Приведенная выше схема будет работать только для двухконтактного вентилятора. В вашем случае, по причинам, указанным в ответе Крисла, один контакт идет на питание 5 В, один на GND, а затем третий идет непосредственно на Arduino - скажем, на контакт 3. Затем вы можете использовать код ниже.

Предположим, что вентилятор подключен к контакту 3, тогда код будет выглядеть так:

const int fan = 3;

void setup() {
  pinMode(fan, OUTPUT);
}

void loop() {
  int fanSpeed = 255;
  analogWrite(fan, fanSpeed);
}

Это запустит вентилятор на полную мощность. Однако после этого вы можете изменить свой код, чтобы изменить значение fanSpeed.

Кроме того, считывая аналоговый входной контакт (предположим, что у вас есть потенциометр, подвешенный к A0), используя analogRead(), вы можете использовать считанное значение для изменить значение fanSpeed напрямую (разделив значение, возвращенное из analogRead(), на четыре2 и затем отправив в analogWrite() , вот так:

  int potPin = A0;
  fanSpeed = analogRead(potPin)/4;
  analogWrite(fan, fanSpeed);

или, говоря более кратко, полностью отказаться от fanSpeed и использовать:

  int potPin = A0;
  analogWrite(fan,analogRead(potPin)/4);

1 Обратите внимание, что код в ссылке неверен, так как он пытается записать значения больше 255 с помощью analogWrite(). Как указано здесь, справочник по Arduino - AnalogWrite(), analogWrite () принимает значения 0-255, тогда как analogRead() возвращает значения 0-1023

2 См. функцию loop() в Справочник по Arduino — AnalogWrite() для другого примера.

,

OP имеет 3-контактный вентилятор на 5 В, а не на 12 В. Третий контакт уже подключен внутри к драйверу (возможно, MOSFET), который может управляться с помощью ШИМ. Так что дополнительный МОП-транзистор здесь не нужен., @chrisl

@chrisl - ах да, ты совершенно прав. Я слишком торопливо прочитал вопрос. Ваш ответ более правильный. Я изменю свой, чтобы отметить, что напряжение составляет 5, а не 12 В. Спасибо, @Greenonline

Извините, но команда назад>.< Как указал VE7JRO, эти вентиляторы отличаются от обычных стандартных вентиляторов тем, что третий контакт на самом деле является контактом, который сообщает об оборотах в минуту. Не знал этого, но мы всегда учимся. Я удалю свой ответ, так как он неверен. Ваш правильный., @chrisl

@chrisl - а? О, Боже. Я немного занят сейчас, чтобы понять. Пожалуйста, восстановите свой ответ, так как он, вероятно, полезен, и я все равно хочу прочитать его снова. Вы всегда можете удалить его позже, если потребуется. Вы были правы в выводе «255», а не «1023». :-), @Greenonline

к вашему сведению: Подобные вентиляторы часто бесколлекторные, у них уже есть внутренний ШИМ-контроллер. Вы не можете управлять ими с помощью внешнего ШИМ-сигнала, или, по крайней мере, его скорость немного нестабильна/непредсказуема., @ctrl-d

@ctrl-d - хорошо, спасибо. Означает ли это, что они сами контролируют свою скорость? То есть вы просто подключаете питание и землю и позволяете ему делать все остальное? TBH, может показаться, что без четкой спецификации (которую не дает ссылка на продукт) довольно сложно сказать., @Greenonline

Да, они контролируют свою собственную скорость с помощью датчиков Холла, которые определяют положение ротора и подают напряжение на определенную катушку в нужное время. Если в этот момент ваш ШИМ-сигнал низкий, он не работает. В этих двигателях скорость может регулироваться аналоговым напряжением., @ctrl-d


1

ИЗМЕНИТЬ:

Как указал VE7JRO, используемый вами вентилятор не имеет собственного контакта ШИМ. Третий контакт фактически сообщает об оборотах вентилятора. Поэтому вам нужно следовать ответу Greenonline, используя MOSFET. А пока я оставлю свой ответ здесь для справки. Если нужно, я удалю его позже.


3-контактный вентилятор управляется как сервопривод. Ток для фактического управления двигателем протекает через контакты питания (5 В и земля). Третий контакт принимает сигнал PWM (широтно-импульсная модуляция) для определения желаемой скорости вращения вентилятора. Это просто сигнальная линия, по которой течет очень небольшой ток, так что вывод Arduino не будет поврежден. Таким образом, драйвер двигателя уже включен.

С точки зрения программирования вы можете использовать analogWrite(), который выводит сигнал PWM на один из выводов, поддерживающих ШИМ. Скорость вентилятора регулируется скважностью сигнала. 100% (значение 255 для UNO) означает полную скорость, 0% (значение 0) останавливает двигатель.

Об источнике питания: поскольку ваш вентилятор потребляет 100 мА на полной скорости (я предполагаю), его все еще можно запитать от контакта 5 В Arduino. Вы можете подать через него около 500 мА (включая ток для самого Arduino). При подаче более высоких токов через штекер USB плавкий предохранитель сгорит. Это значение для UNO r3. Nano может выдать только 200 мА, потому что диод сгорит.

Поэтому будьте осторожны с тем, сколько тока вы потребляете от контакта 5V Arduino. Или, если у вас есть более высокие требования к току, вы должны подать дополнительное напряжение для привода вентилятора.

,

3-й контакт на этом конкретном вентиляторе может быть сигналом скорости вращения, а не входным сигналом ШИМ. См. https://noctua.at/en/support/faq/general-faqs/category/Fans и найдите «Какую конфигурацию контактов используют вентиляторы Noctua 5V?» на странице., @VE7JRO