Подключение компьютерного кулера к ардуино
Most tutorials show an NPN transistor driving a motor as a low-side switch. However, the problem with this approach is that you are switching the ground (GND) path. This method doesn’t provide a return path when the FAN is turned off. Regarding the fan’s operation, it will turn on and off as you expect. However, the lack of ground path means the switching can create electromagnetic interference (EMI). Figure 1: Don’t do this! The proper way to power a fan is with a high-side switch. This circuit type switches the high voltage on and off, instead of ground. But you can’t use a NPN. Figure 1 shows the problem. When configured as a high-side switch the voltage from across VBE remains 0.7 volts. Which means if there is 5 volts at the base, you only get 4.3 volts at the collector. You were probably expecting it to be 11.3 volts, weren’t you? Well, that’s not how a NPN BJT works. Instead, we can use a PNP transistor for the high-side switch. This circuit does present a problem when using 5 volts on the base and 12 V on the emitter. Figure 2: Oops. 12V rail with a 5V control. So the problem is that when the I/O pin is HIGH or LOW, there isn’t enough voltage to turn off the transistor. And you create an awkward voltage divider between the I/O pin and the base of the transistor. If you looked at the collector (shown as pin 2 in this diagram) on an oscilloscope, you’d see it stay a steady DC voltage. Not very useful is it? To solve the problem of how to use a PNP transistor with an Arduino, you need to add an NPN driver. It seems kind of silly doesn’t it? Well, doing things right isn’t always easy. Or something to that effect.
3. RPM Measurement with millis()
I created a simple serial interface (single character commands) to adjust the PWM speeds. There is a one-second interval used to display current RPM. The interrupt is used only for counting pulses from the hall effect sensor. However, I don’t think even that is necessary. (Maybe something to tackle in another tutorial.) RPM calculation is pretty basic, but seems to work. My fan is rated for 1200 RPM and I’m measuring 1250ish. The slowest I can seem to run this fan is 600 RPM. As usual, no delays means you can easily incorporate this code into other Arduino sketches.
NPN-PNP Driver Example
If we add a NPN transistor before the PNP, it can be used to switch the high-voltage supply on and off. This driver would allow the PNP’s base to see a wide voltage range. The NPN can pull the PNP’s base, with its current limiting resistor, to 12 volts. This mode will prevent 0.7 volts from dropping across the Base-Emitter diode keeping the transistor OFF. When the NPN drops to ground, then VBE becomes active, and the transistor turns on. Figure 3: I/O Pin is HIGH, Motor is ON In Figure 3, I’m showing what happens with the NPN-PNP driver when the Arduino drives 5 volts. It turns on the NPN, which connected the PNP’s base resistor to ground. This path allows 0.7 volts to drop across the PNP’s Emitter to Base junction. The transistor turns ON and the motor spins. Figure 4: I/O Pin is LOW, Motor is OFF. Now, when the I/O pin goes LOW, something more interesting happens. The NPN turns into an open because it’s Base-Emitter junction is off. So that leaves the PNP’s base resistor floating. So that means if there is 12 volts on the Emitter, that is the anode of the junction diode. Since current can’t flow through the NPN, the cathode of the junction diode is effectively floating, meaning it will show the 12V connected to its anode. So the VBE becomes: 12v – 12v = 0v. This relationship keeps the PNP, and the motor, OFF.
Picking the PWM Filter Capacitor
Normally you could do a bunch of math to figure out an ideal resistor-capacitor combination. In my case, I just connected a 390nF Ceramic capacitor for C2 and all was good. I did look at using a 470nF and 1uF electrolytic capacitor. However, those had enough capacitance to even out the voltage creating a constant ~10V, preventing any switching. Additionally, their ESR causes substantial “shelves” to appear on the edge. Stick with ceramics or film capacitors for this type of filtering. Depending on your circuit, you may need to play with that value. Basically, make it big enough to reduce the noise spikes, but low enough that the NPN can still switch the PNP off. You’re probably going to want a scope for this measurement. Figure 7: Multiple Cycles from Hall Effect The hall sensor is still a bit noisy, especially on the rising edge. The falling edge is pretty clean. So even though this signal is active HIGH, I decided to measure the falling edge. I did find adding some additional capacitance on the sensor signal helps clean it up a bit more. You could also consider playing around with an external pull-up resistor to for a similar RC like filter. With my PWM signal driving working well and the hall sensor signal cleaned up, it was time to measure RPMs on the Arduino.
Принципы ШИМ модуляции
Наша конструкция будет состоять из трех частей. В первой части будет измеряться температура с помощью датчика температуры и влажности DHT11. Вторая часть будет считывать значение температуры с выходного контакта DHT11, преобразовывать ее в температуру по шкале Цельсия и управлять скоростью вращения вентилятора постоянного тока с помощью ШИМ. А третья часть проекта будет показывать значение температуры и скорости вращения вентилятора на ЖК дисплее.
В этом проекте мы использовали датчик DHT11, который подробно описан в статье про измерение температуры и влажности с помощью Arduino. Но в этом проекте мы этот датчик будем использовать только для измерения температуры.
Принцип функционирования проекта достаточно прост. Мы будем создавать сигнал ШИМ модуляции на соответствующем контакте ШИМ платы Arduino, который будем подавать на базу транзистора. В соответствии с этим управляющим напряжением транзистор будет изменять значение напряжения на своем выходе, с которого и подается управляющее напряжение на вентилятор.
Пример ШИМ модуляции на цифровом осциллографе представлен на следующем рисунке.
Скорость вращения вентилятора и соответствующие ей значения ШИМ и ее коэффициента заполнения представлены в следующей таблице.
Температура | Цикл занятости ШИМ | Значение, передаваемое в функцию управления ШИМ в Arduino | Скорость вращения вентилятора |
менее 26 | 0% | 0 | выключен |
26 | 20% | 51 | 20% |
27 | 40% | 102 | 40% |
28 | 60% | 153 | 60% |
29 | 80% | 204 | 80% |
больше 29 | 100% | 255 | 100% |
Что такое ШИМ? Простыми словами это такая технология, с помощью которой мы можем управлять напряжением или мощностью. К примеру, мы подаем на электродвигатель напряжение 5 Вольт, которое будет заставлять его вращаться с некоторой скоростью. Если после этого мы снизим подаваемое напряжение на 2 Вольта (т. е. до 3 Вольт), то скорость вращения электродвигателя также уменьшится. Более подробно об использовании ШИМ можно прочитать в следующей статье: управлению яркостью свечения светодиода с помощью ШИМ.
Основная идея ШИМ состоит в использовании цифровых импульсов с определенным коэффициентом заполнения (циклом занятости), который и будет отвечать за скорость вращения вентилятора.
К примеру, мы будем использовать ШИМ с коэффициентом заполнения 50% - это будет означать что на управляемое устройство мы будем подавать половину максимального напряжения импульса.
Формула для расчета коэффициента заполнения будет выглядеть следующим образом:
Duty Cycle= Ton/T
где T – общее время импульса Ton+Toff (сумма его активного и пассивного состояния)
Ton – время активного состояния импульса (означает 1 )
Toff – время пассивного состояния импульса (означает 0)
Более наглядно это представлено на следующих рисунках.
Работа схемы
Схема устройства представлена на следующем рисунке.
ЖК дисплей подключен к плате Arduino в 4-битном режиме, более подробно об этом можно прочитать в статье про подключение ЖК дисплея к Arduino. Контакты ЖК дисплея RS, EN, D4, D5, D6 и D7 подсоединены к цифровым контактам Arduino 7, 6, 5, 4, 3 и 2. Датчик DHT11 подсоединен к контакту 12 Arduino через подтягивающий резистор. Контакт 9 Arduino используется для управления скоростью вращения вентилятора (с помощью транзистора).
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Оптопара 4N25 (для детектора перехода через ноль) (купить на AliExpress).
- Потенциометр 10 кОм (купить на AliExpress).
- Оптопара MOC3021 (купить на AliExpress).
- Понижающий трансформатор (0-9)V, 500 mA (купить на AliExpress).
- Симистор (TRIAC) BT136 (купить на AliExpress).
- Вентилятор переменного тока на 220 В.
- Соединительные провода.
- Резисторы (купить на AliExpress).
Conclusion
While this was a fun academic exercise in the proper way to switch motors, it really wasn’t necessary. This entire tutorial is based on a 3-pin PC fan. If you buy a 4-pin PC fan, the 4th pin is for PWM control. The filtering has already been taken care of in that fan. So while this works, it isn’t necessary if you buy the right fan at the start.
Распиновка проводов кулера Сегодня о том, как считывать обороты компьютерного кулера с помощью его встроенного тахометра.
На фото обыкновенный компьютерный вентилятор с трехпроводным подключением. Два провода красный и черный это питание с массой, и желтый, по которому комп определяет с какой скоростью крутится пропеллер.
Работает этот выход довольно просто, выход соединяется с массой, когда крыльчатка находится в определенном положении, можно даже подключить тестер и посмотреть, как это происходит. Только без питания ничего работать не будет, поэтому я его подключил к 5 вольтам от пальчиковых батареек. Конкретно этот кулер замыкает выход 2 раза на 1 оборот, соответственно к нему можно подключить оттягивающий резистор и снимать показания как с энкодера.
Схема подключения кулера к Arduino
+12 вольт подключается только к кулеру, к его красному проводу и никуда больше. Выход тахометра, желтый провод, подключается к нулевому прерыванию Arduino на UNO это второй вход и он же подтягивается резистором к ардуиновским 5 вольтам. Ну и, конечно же, у нас общая масса с кулером и его питанием. Теперь можно подавать питание.
Описание кода.
В коде заводим переменную
и функцию обработчика прерываний, которая будет плюсовать к переменной единицу.
В setup конфигурируем прерывания, оно у нас CHANGE,
то есть будет выполняться когда состояние на входе изменится и когда будет изменяться состояние на входе будет прибавляться единица к переменной val.
В цикле сбрасываем переменную на 0 и ждем пол секунды пока набежит значение, ждем пол секунды а не секунду потому что прерывание срабатывает 2 раза за 1 импульс от чего можно считывать в 2 раза чаще.
После рассчитываем обороты в минуту и отправляем в serial, то есть количество импульсов в секунду множим на 60 и делим на 2, так как у нас 2 импульса за оборот. И еще отправляем значения из переменной val.
Так же можете посмотреть видео как подключить куллер к Arduino и определить его обороты.
В этом проекте на Arduino мы будем управлять скоростью вращения вентилятора постоянного тока в соответствии с температурой в комнате и показывать изменения этих параметров (температуры и скорости вращения вентилятора) на жидкокристаллическом (ЖК) дисплее 16x2. В проекте будет происходить обмен данными между Arduino, ЖК дисплеем и датчиком температуры DHT11. Управлять скоростью вращения вентилятора постоянного тока мы будем с помощью широтно-импульсной (ШИМ) модуляции, с помощью которой можно управлять средним значением напряжения, подаваемого на вентилятор.
3. Потенциометр для управления скоростью вращения вентилятора
В нашем проекте для управления скоростью вращения вентилятора переменного тока мы использовали потенциометр. Как мы знаем, потенциометр имеет 3 вывода и работает фактически как делитель напряжения, обеспечивая на своем среднем контакте выход изменяющегося напряжения. Сигнал с этого выхода подается на аналоговый контакт платы Arduino, которая измеряет напряжение этого сигнала и использует это значение напряжения для управления скоростью вращения вентилятора.
NPN-PNP Driver Example
If we add a NPN transistor before the PNP, it can be used to switch the high-voltage supply on and off. This driver would allow the PNP’s base to see a wide voltage range. The NPN can pull the PNP’s base, with its current limiting resistor, to 12 volts. This mode will prevent 0.7 volts from dropping across the Base-Emitter diode keeping the transistor OFF. When the NPN drops to ground, then VBE becomes active, and the transistor turns on. Figure 3: I/O Pin is HIGH, Motor is ON In Figure 3, I’m showing what happens with the NPN-PNP driver when the Arduino drives 5 volts. It turns on the NPN, which connected the PNP’s base resistor to ground. This path allows 0.7 volts to drop across the PNP’s Emitter to Base junction. The transistor turns ON and the motor spins. Figure 4: I/O Pin is LOW, Motor is OFF. Now, when the I/O pin goes LOW, something more interesting happens. The NPN turns into an open because it’s Base-Emitter junction is off. So that leaves the PNP’s base resistor floating. So that means if there is 12 volts on the Emitter, that is the anode of the junction diode. Since current can’t flow through the NPN, the cathode of the junction diode is effectively floating, meaning it will show the 12V connected to its anode. So the VBE becomes: 12v – 12v = 0v. This relationship keeps the PNP, and the motor, OFF.
Схема проекта
Схема управления скоростью вращения вентилятора с помощью платы Arduino и симистора представлена на следующем рисунке.
Примечание : мы использовали сборку схемы проекта на макетной плате только для демонстрации возможностей проекта. Вы ни в коем случае не должны подавать напрямую напряжение 220 В на вашу макетную плату. Как видно из представленного ниже рисунка, для сборки той части схемы, которая работает с напряжением 220 В, мы использовали отдельную перфорированную плату.
Исходный код программы
Сначала мы произведем подключение библиотек для работы с ЖК дисплеем и датчиком температуры (dht), а затем инициализируем контакты для подключения ЖК дисплея, датчика температуры и вентилятора.
Затем инициализируем все остальные нужные нам вещи в секции setup. А затем в секции loop мы будем использовать dht-функции для считывания значений с датчика температуры, извлекать из этих значений температуру, переводить ее в температуру по шкале Цельсия и отображать ее значение на ЖК дисплее.
После этого мы будем сравнивать значение температуры с заранее установленными нами температурными порогами (выше приведенная в тексте статьи таблица) и исходя из результатов сравнения будем генерировать соответствующее значение ШИМ на выходном контакте, к которому подключен транзистор, управляющий скоростью вращения вентилятора.
Для генерации ШИМ мы будем использовать функцию analogWrite(pin, PWM value). Мы будем использовать все 8 бит. Значение ШИМ будет эквивалентно аналоговому значения напряжения. То есть, к примеру, если мы хотим сгенерировать ШИМ с коэффициентом заполнения 20%, то мы в эту функцию (analogWrite) должны передать значение 255/5.
В микроконтроллерной технике обычно для плавного управления чем-либо (интенсивность свечения лампы, скорость вращения двигателя, вентилятора и т.д.) используется широтно-импульсная модуляция (ШИМ). И подобные проекты мы уже рассматривали на нашем сайте, например, управление яркостью свечения светодиода, скоростью вращения вентилятора. Но в данной статье мы рассмотрим способ управления скоростью вращения вентилятора переменного тока с помощью платы Arduino и симистора (TRIAC).
Предупреждение : в рассматриваемом проекте используется работа с напряжением переменного тока 220 В, которое очень опасно для здоровья человека если не соблюдать требуемых мер безопасности. Будьте осторожны, не прикасайтесь голыми руками к компонентам проекта, которые могут оказаться под напряжением 220 В.
2. Схема управления углом сдвига фаз
После обнаружения момента перехода сигнала через ноль нам необходимо будет управлять промежутками времени, в течение которых на двигатель вентилятора необходимо будет подавать напряжение, и промежутками, в течение которых на двигатель вентилятора не надо будет подавать напряжение (интервалы ON и OFF). Таким образом, мы получим своеобразный ШИМ сигнал, с помощью которого будет происходить управление скоростью вращения вентилятора. Для формирования этого сигнала в нашем проекте мы будем использовать симистор BT136, который отлично подходит на роль электронного переключателя мощности для сигнала переменного тока.
Симистор (TRIAC) представляет собой переключатель переменного тока с 3 контактами, который можно переключать сигналом небольшой мощности, подаваемым на его вывод затвора (управляющий контакт). При этом в отличие от тиристора, который управляет переключением мощности только в одном направлении, с помощью симистора можно управлять переключением мощности в двух направлениях.
Принцип управления симистора переменным током показан на следующем рисунке.
Как показано на рисунке, мы можем переключать, к примеру, симистор на угле 90 градусов при помощи подачи отпирающего импульса на его управляющий вывод. В этом случае мы будем подавать ток на лампу только в половине времени положительной полуволны сигнала (на графике время t1), соответственно, лампа будет гореть вполовину мощности. Уменьшая или увеличивая это время мы можем заставить лампу гореть ярче или тусклее.
Частота сигнала переменного тока в нашей сети составляет 50 Гц, соответственно, период сигнала равен 1/f =20 миллисекунд. Значит, половина периода будет равна 10 мс. Поэтому мы можем изменять время t1 на приведенном графике для управления яркостью свечения лампы переменного тока в диапазоне от 0 до 10 мс (10000 мкс).
Оптопара
Оптопару также называют оптроном или оптоизолятором. Она используется для обеспечения изоляции (развязки) между двумя электрическими цепями, одна из которых, к примеру, работает с переменным током, а другая – с постоянным. Оптопара состоит из светодиода, который излучает инфракрасный свет, и фотодатчика, который обнаруживает этот свет. В нашем случае мы использовали оптопару MOC3021.
На следующем рисунке представлена схема соединения оптопары MOC3021 и симистора.
Объяснение программы для Arduino
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
В нашей схеме используется ШИМ сигнал для управления скоростью вращения вентилятора. На нашем сайте вы можете посмотреть все проекты, в которых использовался ШИМ сигнал.
Первым делом в программе мы должны объявить все используемые переменные. В нашей схеме симистор BT136 подключен к контакту 6 платы Arduino. А в переменной speed_val мы будем хранить значение скорости вентилятора.
то управление цветом "пикселей" происходит аналогично случаю при только последовательно подключенных лент?
Нет будет именно параллельное подключение. Если количество светиков разное, то ставите в настройках то количество диодов, которое имеете в вентиляторе с большим количеством диодов.
сколько цифровых выходов ардуино уно можно задействовать для управления одной отдельной лентой/вентилятором?
Все цифровые. Но количество светиков ограничено памятью. В лучшем случае до 300 диодов, но в реале лучше не больше 160-ти. Иначе на работу программы памяти не останется.
zeke14zeke
На моей материнке два ARGB коннектора, и я отказался от их использования не просто так. Хочу завязать подсветку на температуру проца через термопару или термистор. Это первое.
Я мог бы купить Gelid Codi 6, но отказался и от этой идеи, так как дорого (теперь), а коннекторы argb хочу расположить параллельно плате, а не перпендикулярно. Это второе.
Третье. Я так понял, что нужно использовать пины с ШИМ, а их 6. Так что 6 (не даром у Gelid Codi 6 шесть коннекторов argb). Поправьте меня, если я не прав.
Gigabyte RGB Fusion каким-то образом сама узнает, сколько светодиодов весит на каждом выходе (причем даже при параллельном включении вентиляторов). Неужели нет программной функции определения количества светодиодов для ардуино??
Gigabyte RGB Fusion каким-то образом сама узнает, сколько светодиодов весит на каждом выходе (причем даже при параллельном включении вентиляторов). Неужели нет программной функции определения количества светодиодов для ардуино??
Оба утверждения неверны. Потенциально, если включить конец ленты в контроллер, можно узнать количество светодиодов (для этого нужен ещё один разъём, которого нет), но управлять параллельно включенными лентами раздельно точно не получится никак.
Геннадий П
Потенциально, если включить конец ленты в контроллер, можно узнать количество светодиодов (для этого нужен ещё один разъём, которого нет)
- зажигаем следующий светодиод
- если потребление тока лентой увеличилось - увеличиваем счетчик
- повторить пока потребление тока не будет равно с предыдущим значением
@Геннадий П, можно, но не для параллельных лент светодиодов. Этот метод также довольно затратен и непрост, так как точное детектирование тока возможно только на шунте, а для большого количества светодиодов динамический диапазон изменения тока будет весьма велик (от, допустим, 60мА для одного диода, до 18А для 300 диодов).
zeke14zeke
Gigabyte RGB Fusion не позвоояет привязать подсветку к чему-либо. Выбрал эффект - он работает, независимо от температуры, загрузки проца, положения звезд и т.д. Более того, пока ОС не загрузилась и не запустилось приложение RGB Fusion, никаких эффектов, кроме статической одноцветной подсветки, нет
Если схема подключения такая (параллельное с разным количеством):
— *
— * — *
то при счетчике n=1 ток будет X, а при n=2 — X=X+0.5X=1.5X?
zeke14zeke
@poty, как контроллеру узнать количество светодиодов?
1 - каждый вентилятор/лента подключена к отдельному цифровому выходу ардуино
2 - некоторые вентиляторы/ленты подключены параллельно (с небольшим количеством в каждом)
Ваше первое утверждение никак не было связано с Gigabyte RGB Fusion. Кроме того, судя по сайту, имеется целое приложение, которое занимается всякими "привязками" и управлением.
пока ОС не загрузилась и не запустилось приложение RGB Fusion, никаких эффектов, кроме статической одноцветной подсветки, нет
Если у Вас игровой или близкий к нему компьютер, хорошо настроенный, то загрузка занимает секунд 5-6, ну пусть 10! И измерять при этом температуру на фиг никому не нужно - всё холодное.
Всё так, только если это две одинаковые ленты. А если три и они разные? А если 4? Вариантов может быть довольно много.
и вопросы далее:
Я не хотел бы сейчас сбивать Вас с толку (Ваша задумка, это интересно как минимум), но дело всё в том, что в компьютерном применении разработка светового сопровождения - относительная новинка, тогда как в шоу - это всё уже, наверное, оскомину набило. К чему я это? К тому, что либо Вы делаете жёстко запрограммированную комбинацию лент (максимум отличающуюся количеством диодов), либо настраиваете "сцену" в приложении. Ну, как пример настройки сцены, Ambilight - один из проектов Гайвера здесь, на этом сайте.
Если останавливаться на первом варианте, то Вам всё равно нужно будет при разработке указывать, какая лента куда подключается. Для Вашего пункта 1 - это прокатит (заранее, при написании скетча назначить выводы на "области"), но любой, кто захочет что-то изменить вынужден будет кидаться в изменение скетча. В этом случае определить количество светодиодов можно относительно легко - подключив выход каждой ленты к пину контроллера (одному или нескольким). Тогда, как только закончатся диоды в ленте, на этом пине будет сигнал, который можно отловить, допустим, в прерывании.
Для пункта 2, даже если Вы определите количество светодиодов в параллельно подключенных лентах, Вы не будете знать, где эти ленты используются и нужно будет вручную это расписывать. В чём тогда смысл определения длины каждой ленты? Всё равно нужно будет считать для каждой "области" применения отдельно.
Принцип управления вентилятором переменного тока с помощью Arduino
Данный принцип управления мы разделим на следующие 4 части:
- Детектор перехода через ноль.
- Схема управления углом сдвига фаз.
- Потенциометр для управления скоростью вращения вентилятора.
- Схема генерации ШИМ сигнала.
Рассмотрим эти этапы более подробно.
EMI comes from the Edge
The edge rate from the Arduino I/O pin, and the NPN connected to it, transitions from LOW to HIGH incredibly fast. There is a lot of what we call “high-frequency content” in that edge. That’s what is making its way onto the hall-effect sensor. All of those little spikes are EMI noise. A simple solution is to slow down the edge to the OFF to ON transition. Connecting a capacitor from the NPN’s collector to ground slows down the edge into the base of the PNP. The current limiting resistor (R1) and capacitor (C2) form an RC network, which reduces much of the noise. Figure 6: Final Arduino PWM PC Fan Circuit
Необходимые компоненты
- Плата Arduino UNO (купить на AliExpress).
- Датчик температуры и влажности DHT11 (купить на AliExpress).
- Транзистор 2n2222 (купить на AliExpress).
- ЖК дисплей 16x2 (купить на AliExpress).
- Вентилятор постоянного тока.
- Резистор 1 кОм (купить на AliExpress).
- Батарейка на 9 В.
- Соединительные провода.
4. Схема генерации ШИМ сигнала.
На заключительном этапе импульс ШИМ сигнала подается на симистор, с помощью которого происходит его отпирание/запирание, и, соответственно, симистор производит управление скоростью вращения вентилятора путем регулировки количества мощности, подаваемого на него. ШИМ сигнал формируется платой Arduino. Более подробно о формировании ШИМ сигнала с помощью платы Arduino можно прочитать в этой статье.
2. Filter Capacitors Help when you PWM a 3-Pin PC fan with an Arduino
Once this was all setup, I connected my scope and saw the following: Figure 5: Noisy RPM Signal with PWM All of the noise spikes shown are finding their way into the I/O pin. It falsely triggered the interrupt, messing up an RPM measurement. So what’s going on here? Where are those spikes coming from? The spikes are EMI from high frequencies in the PWM signal. But wait, the PWM signal from the Arduino is only about 600 Hz. That isn’t very fast. The 600 Hz isn’t our issue. Instead, it is how fast the PWM signal switches from OFF to ON.
1. Детектор перехода через ноль
В нашей домашней сети напряжение переменного тока составляет 220 В, которое изменяется с частотой 50 Гц. Полярность этого сигнала периодически изменяется: в первой половине периода ток течет в одном направлении – возрастает, достигает своего максимального значения, и затем снова уменьшается до нуля. Затем в следующем полупериоде ток начинает течь в обратном направлении (отрицательном), достигает своего максимума и затем снова возвращается к нулю. Для управления скоростью вращения вентилятора нам необходимо будет управлять пиковыми значениями тока в обоих полупериодах. Для этого нам необходимо будет знать точку перехода через ноль (zero voltage crossing) сигнала.
На рисунке ниже представлена схема детектора перехода через ноль, которая как раз и предназначена для обнаружения этой самой точки. В этой схеме на первом этапе напряжение понижается с 220 В до 9 В с помощью понижающего трансформатора и затем оно подается на контакты 1 и 2 оптопары 4N25. В составе оптопары 4N25 есть светодиод, который подключен к ее контактам 1 и 2. Следовательно, когда напряжение переменного тока приближается к нулю, светодиод в составе оптопары выключается, транзистор оптопары закрывается и на выходе схемы будет напряжение 5V. А когда напряжение переменного тока достигает своего максимума, светодиод в составе оптопары загорается, транзистор оптопары открывается, и на выходе схемы будет напряжение 0V. Таким образом, сигнал с выхода этой схемы можно непосредственно подавать на плату Arduino и с ее помощью можно будет обнаруживать эти переходы напряжения переменного тока через ноль.
Читайте также: