Как управлять вентилятором: механизмы управления вентилятором

Содержание

ШИМ управление: Пример 1

Логика программы такова — при достижении заданных температур вентилятор включается с определённым коэффициентом заполнения, а отключается только тогда, когда температура ниже минимального порога:

  • 45 °C -> 35 %
  • 50 °C -> 50 %
  • 60 °C -> 75 %
  • 75 °C -> 100 %

#include <iostream>
#include <fstream>
#include <wiringPi.h>
#include <softPwm.h>
#include <unistd.h>

#define PIN 7
#define RANGE 100

#define PWM_VALUE1 35
#define PWM_VALUE2 50
#define PWM_VALUE3 75
#define PWM_VALUE4 100

#define TEMPERATURE_1 45
#define TEMPERATURE_2 50
#define TEMPERATURE_3 60
#define TEMPERATURE_4 70

using namespace std;

static int getTemperature() {
static fstream myfile;
int temperature = 0;
myfile.open(«/sys/devices/virtual/thermal/thermal_zone0/temp», ios_base::in);
myfile >> temperature;
myfile.close();
return temperature;
}

int main() {
int temperature;
bool pwmStopped = true;

try {
if (wiringPiSetup() == 0) {
while (1) {
temperature = getTemperature();

if (temperature > TEMPERATURE_4) {
if (pwmStopped) {
softPwmCreate(PIN, ((PWM_VALUE4 * RANGE) / 100), RANGE);
pwmStopped = false;
} else {
softPwmWrite(PIN, ((PWM_VALUE4 * RANGE) / 100));
}
} else if (temperature > TEMPERATURE_3) {
if (pwmStopped) {
softPwmCreate(PIN, ((PWM_VALUE3 * RANGE) / 100), RANGE);
pwmStopped = false;
} else {
softPwmWrite(PIN, ((PWM_VALUE3 * RANGE) / 100));
}
} else if (temperature > TEMPERATURE_2) {
if (pwmStopped) {
softPwmCreate(PIN, ((PWM_VALUE2 * RANGE) / 100), RANGE);
pwmStopped = false;
} else {
softPwmWrite(PIN, ((PWM_VALUE2 * RANGE) / 100));
}
} else if (temperature > TEMPERATURE_1) {
if (pwmStopped) {
softPwmCreate(PIN, ((PWM_VALUE1 * RANGE) / 100), RANGE);
pwmStopped = false;
} else {
softPwmWrite(PIN, ((PWM_VALUE1 * RANGE) / 100));
}
} else {
softPwmStop(PIN);
pwmStopped = true;
}

usleep(1000 * 1000);
}
}
} catch (exception& e) {
cerr << e.what() << endl;
}
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

#include <iostream>
#include <fstream>
#include <wiringPi.h>
#include <softPwm.h>
#include <unistd.h>
 
#define PIN               7
#define RANGE             100
 
#define PWM_VALUE1         35
#define PWM_VALUE2         50
#define PWM_VALUE3         75
#define PWM_VALUE4         100
 
#define TEMPERATURE_1      45
#define TEMPERATURE_2      50
#define TEMPERATURE_3      60
#define TEMPERATURE_4      70
 

usingnamespacestd;

staticintgetTemperature(){

staticfstream myfile;

inttemperature=;

myfile.open(«/sys/devices/virtual/thermal/thermal_zone0/temp»,ios_base::in);

myfile>>temperature;

myfile.close();

returntemperature;

}
 

intmain(){

inttemperature;

boolpwmStopped=true;

try{

if(wiringPiSetup()==){

while(1){

temperature=getTemperature();

if(temperature>TEMPERATURE_4){

if(pwmStopped){

softPwmCreate(PIN,((PWM_VALUE4*RANGE)100),RANGE);

pwmStopped=false;

}else{

softPwmWrite(PIN,((PWM_VALUE4*RANGE)100));

}

}elseif(temperature>TEMPERATURE_3){

if(pwmStopped){

softPwmCreate(PIN,((PWM_VALUE3*RANGE)100),RANGE);

pwmStopped=false;

}else{

softPwmWrite(PIN,((PWM_VALUE3*RANGE)100));

}

}elseif(temperature>TEMPERATURE_2){

if(pwmStopped){

softPwmCreate(PIN,((PWM_VALUE2*RANGE)100),RANGE);

pwmStopped=false;

}else{

softPwmWrite(PIN,((PWM_VALUE2*RANGE)100));

}

}elseif(temperature>TEMPERATURE_1){

if(pwmStopped){

softPwmCreate(PIN,((PWM_VALUE1*RANGE)100),RANGE);

pwmStopped=false;

}else{

softPwmWrite(PIN,((PWM_VALUE1*RANGE)100));

}

}else{

softPwmStop(PIN);

pwmStopped=true;

}

usleep(1000*1000);

}

}

}catch(exception&e){

cerr<<e.what()<<endl;

}

return;

}

Компиляция, сборка и запуск программы

Сознаём файл  и вставляем вышеприведённый код:

nano FanPiPWM.cpp

1 nano FanPiPWM.cpp

Компилируем и собираем программу:

g++ -Ofast -Wall FanPiPWM.cpp -lwiringPi -lpthread -o FanPiPWM

1 g++-Ofast-Wall FanPiPWM.cpp-lwiringPi-lpthread-oFanPiPWM

Запускаем:

./FanPiPWM

1 .FanPiPWM

если хотим запустить программу в фоновом режиме:

nohup ./FanPiPWM &

1 nohup.FanPiPWM&

Выделение тепла и необходимость его отвода

В последнее время тема использования интегральных схем для контроля скорости вращения вентиляторов в системах активного охлаждения компьютерных комплектующих и прочих электронных систем стала очень актуальна. Вследствие инициатив крупнейших игроков IT-рынка, вентиляторы, применяющиеся для охлаждения разнообразного оборудования более полувека, в последние годы претерпели существенные изменения. В этой статье мы рассмотрим причины и методы данного эволюционного движения.

Сегодняшний вектор развития электроники, особенно направленных на потребительский рынок устройств, задан на создание как можно более функциональных систем в минимально возможном форм-факторе. Это приводит к тому, что на одной и той же площади производители с каждым годом стараются умещать все больше транзисторов для увеличения функциональности и/или производительности чипов. Хорошим примером могут служить ноутбуки и карманные компьютеры, в которых процессорная и графическая мощь лишь возросли при уменьшении геометрических размеров и веса относительно первых представителей соответствующих классов. Естественно, освоение новых, все более тонких и совершенных технологических процессов производства помогает сдержать рост выделяемого при работе подобных полупроводниковых схем тепла, однако необходимость в его эффективном отводе полностью никуда не исчезает. Схожая ситуация возникает и с прочими устройствами, такими, например, как проекторы. Какие бы новые технологии ни внедрялись, без мощного источника света получить качественную картинку невозможно. А для стабильности работы, как и в случае с CPU/GPU и прочими микросхемами, тепло от ламп требуется отводить эффективно и, по возможности, бесшумно.

Действительно бесшумным методом отвода тепла можно считать лишь полностью пассивные системы, состоящие только из радиатора/теплотрубок. К сожалению, область применения таких СО ограничена: потолок по рассеиванию тепловой мощности этих изделий довольно низок, к тому же максимальная эффективность достигается лишь при большой площади рассеивания, а разместить достаточное количество ребер так, чтобы естественный приток воздуха их еще и равномерно омывал, бывает очень сложно, или даже невозможно. Хорошая альтернатива полностью бесшумным пассивным системам – активные кулеры, сочетающие в себе традиционные радиаторы с вентиляторами, создающими направленный воздушный поток. Однако присутствие движущихся частей означает наличие шума от работы

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

Источник

Управление вентилятором

Простейший метод управления вентилятором — отсутствие какого-либо управления вообще. Вентилятор просто запускается на максимальной скорости и работает все время. Преимущества такого управления — гарантированное стабильное охлаждение и очень простые внешние цепи. Недостатки — уменьшение срока службы вентилятора, максимальное энергопотребление, даже когда охлаждение не требуется, и непрерывный шум.

Следующий простейший метод управления — термостатический или on/off. В этом случае вентилятор включается только тогда, когда требуется охлаждение. Условие включения вентилятора устанавливает пользователь, обычно это какое-то пороговое значение температуры.

Подходящий датчик для on/off управления — это ADM1032. Он имеет выход THERM, который управляется внутренним компаратором. В нормальном состоянии на этом выходе высокий логический уровень, а при превышении порогового температурного значения он переключается на низкий. На рисунке 3 показан пример цепи с использованием ADM1032.

Рисунок 3. Пример on/off управления

Недостаток on/off контроля — это его ограниченность. При включении вентилятора, он запускается на максимальной скорости вращения и создает шум. При выключении он полностью останавливается и шум тоже прекращается. Это очень заметно на слух, поэтому с точки зрения комфорта такой способ управления далеко не оптимальный.

При линейном управлении скорость вращения вентилятора изменяется за счет изменения напряжения питания. Для получения низких оборотов напряжение уменьшается, для получения высоких увеличивается. Конечно, есть определенные границы изменения напряжения питания.

Рассмотрим, например, вентилятор на 12 вольт. Для запуска ему требуется не меньше 7 В и при этом напряжении он, вероятно, будет вращаться с половинной скоростью от своего максимального значения. Когда вентилятор запущен, для поддержания вращения требуется уже меньшее напряжение. Чтобы замедлить вентилятор, мы можем понижать напряжение питание, но до определенного предела, допустим, до 4-х вольт, после чего вентилятор остановится. Эти значения будут отличаться в зависимости от производителя, модели вентилятора и конкретного экземпляра.

5-и вольтовые вентиляторы позволяют регулировать скорость вращения в еще меньшем диапазоне, поскольку их стартовое напряжение близко к 5 В. Это принципиальный недостаток данного метода.

Линейное управление вентилятором можно реализовать на микросхеме ADM1028. Она имеет управляющий аналоговый выход, интерфейс для подключения диодного температурного датчика, который обычно используется в процессорах и ПЛИС, и работает от напряжения 3 — 5.5 В. На рисунке 4 показан пример схемы для реализации линейного управления. Микросхема ADM1028 подключается ко входу DAC.

Рисунок 4. Схема для реализации линейного управления 12-и вольтового вентилятора

Линейный метод управления тише, чем предыдущие. Однако, как вы могли заметить, он обеспечивает маленький диапазон регулировки скорости вращения вентилятора. 12-и вольтовые вентиляторы при напряжении питания от 7 до 12 В, позволяют устанавливать скорость вращения от 1/2 от максимума до максимальной. 5-и вольтовые вентиляторы при запуске от 3,5 — 4 В, вращаются практически с максимальной скоростью и диапазон регулирования у них еще меньше. Кроме того, линейный метод регулирования не оптимален с точки зрения энергопотребления, потому что снижение напряжения питания вентилятора выполняется за счет рассеяния мощности на транзисторе (смотри рисунок 4). И последний недостаток — относительная дороговизна схемы управления.

Принцип работы ШИМ контроллера

Задача ШИМ контроллера состоит в управлении силовым ключом за счёт изменения управляющих импульсов. Работая в ключевом режиме, транзистор находится в одном из двух состояний (полностью открыт, полностью закрыт). В закрытом состоянии ток через p-n-переход не превышает несколько мкА, а значит, мощность рассеивания стремится к нулю. В открытом состоянии, несмотря на большой ток, сопротивление p-n-перехода чрезмерно мало, что также приводит к незначительным тепловым потерям. Наибольшее количество тепла выделяется в момент перехода из одного состояния в другое. Но за счёт малого времени переходного процесса по сравнению с частотой модуляции, мощность потерь при переключении незначительна.

Широтно-импульсная модуляция разделяется на два вида: аналоговая и цифровая. Каждый из видов имеет свои преимущества и схемотехнически может реализовываться разными способами.

Аналоговая ШИМ

Принцип действия аналогового ШИ-модулятора основан на сравнении двух сигналов, частота которых отличается на несколько порядков. Элементом сравнения выступает операционный усилитель (компаратор). На один из его входов подают пилообразное напряжение высокой постоянной частоты, а на другой – низкочастотное модулирующее напряжение с переменной амплитудой. Компаратор сравнивает оба значения и на выходе формирует прямоугольные импульсы, длительность которых определяется текущим значением модулирующего сигнала. При этом частота ШИМ равна частоте сигнала пилообразной формы.

Цифровая ШИМ

Широтно-импульсная модуляция в цифровой интерпретации является одной из многочисленных функций микроконтроллера (МК). Оперируя исключительно цифровыми данными, МК может формировать на своих выходах либо высокий (100%), либо низкий (0%) уровень напряжения. Однако в большинстве случаев для эффективного управления нагрузкой напряжение на выходе МК необходимо изменять. Например, регулировка скорости вращения двигателя, изменение яркости светодиода. Что делать, чтобы получить на выходе микроконтроллера любое значение напряжения в диапазоне от 0 до 100%?

Вопрос решается применением метода широтно-импульсной модуляции и, используя явление передискретизации, когда заданная частота переключения в несколько раз превышает реакцию управляемого устройства

Изменяя скважность импульсов, меняется среднее значение выходного напряжения. Как правило, весь процесс происходит на частоте в десятки-сотни кГц, что позволяет добиться плавной регулировки. Технически это реализуется с помощью ШИМ-контроллера – специализированной микросхемы, которая является «сердцем» любой цифровой системы управления

Активное использование контроллеров на основе ШИМ обусловлено их неоспоримыми преимуществами:

Технически это реализуется с помощью ШИМ-контроллера – специализированной микросхемы, которая является «сердцем» любой цифровой системы управления. Активное использование контроллеров на основе ШИМ обусловлено их неоспоримыми преимуществами:

  • высокой эффективности преобразования сигнала;
  • стабильность работы;
  • экономии энергии, потребляемой нагрузкой;
  • низкой стоимости;
  • высокой надёжности всего устройства.

Получить на выводах микроконтроллера ШИМ сигнал можно двумя способами: аппаратно и программно. В каждом МК имеется встроенный таймер, который способен генерировать ШИМ импульсы на определённых выводах. Так достигается аппаратная реализация. Получение ШИМ сигнала с помощью программных команд имеет больше возможностей в плане разрешающей способности и позволяет задействовать большее количество выводов. Однако программный способ ведёт к высокой загрузке МК и занимает много памяти.

Примечательно, что в цифровой ШИМ количество импульсов за период может быть различным, а сами импульсы могут быть расположены в любой части периода. Уровень выходного сигнала определяется суммарной длительностью всех импульсов за период. При этом следует понимать, что каждый дополнительный импульс – это переход силового транзистора из открытого состояния в закрытое, что ведёт к росту потерь во время переключений.

Управление вентилятором с помощью биполярного NPN-транзистора

Первое что приходит на ум — поставить биполярный NPN-транзистор. Вентилятору требуется 200мА, поэтому ищем транзистор с коллекторным током более 200мА, лучше раза в 2-3. В импортных даташитах этот параметр называется Ic, в наших Iк. Подойдут транзисторы: 2N5550, 2N5551, 2N2222A и т.д.. У транзистора, в первую очередь, надо определить назначение выводов. Где у него коллектор, где база, а где эмиттер. Сделать это лучше всего по даташиту или справочнику.

Схема подключения вентилятора

Берем транзистор и подключаем его по такой схеме:

Таким образом, при подаче «1» на вход нашей схемы ток от источника питания потечёт через резистор R1, базу и эмиттер на землю. При этом транзистор откроется и ток сможет идти через переход коллектор-эмиттер, а значит и через нагрузку (вентилятор).

Резистор R1 играет важную роль — он ограничивает ток через переход база-эмиттер. Если бы его не было, ток не был бы ничем ограничен и просто испортил бы управляющую микросхему (ведь именно она связывает линию питания с транзистором).

Кроме того, нужно помнить, что нагрузка индуктивная и нужен защитный диод D1. Дело в том, что энергия, запасённая магнитным полем, не даёт мгновенно уменьшить ток до нуля при отключении ключа. А значит, на контактах нагрузки возникнет напряжение обратной полярности, которое легко может нарушить работу контроллера или даже повредить его.

Принципы ШИМ модуляции

Наша конструкция будет состоять из трех частей. В первой части будет измеряться температура с помощью датчика температуры и влажности DHT11. Вторая часть будет считывать значение температуры с выходного контакта DHT11, преобразовывать ее в температуру по шкале Цельсия и управлять скоростью вращения вентилятора постоянного тока с помощью ШИМ. А третья часть проекта будет показывать значение температуры и скорости вращения вентилятора на ЖК дисплее.

В этом проекте мы использовали датчик DHT11, который подробно описан в статье про измерение температуры и влажности с помощью Arduino. Но в этом проекте мы этот датчик будем использовать только для измерения температуры.

Принцип функционирования проекта достаточно прост. Мы будем создавать сигнал ШИМ модуляции на соответствующем контакте ШИМ платы Arduino, который будем подавать на базу транзистора. В соответствии с этим управляющим напряжением транзистор будет изменять значение напряжения на своем выходе, с которого и подается управляющее напряжение на вентилятор.

Пример ШИМ модуляции на цифровом осциллографе представлен на следующем рисунке.

Скорость вращения вентилятора и соответствующие ей значения ШИМ и ее коэффициента заполнения представлены в следующей таблице.

Температура Цикл занятости ШИМ Значение, передаваемое в функцию управления ШИМ в Arduino Скорость вращения вентилятора
менее 26 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)

Более наглядно это представлено на следующих рисунках.

Управление вентилятором с помощью МОП транзистора

Вместо биполярного можно использовать полевой транзистор — MOSFET, то есть полевые транзисторы с изолированным затвором (они же МОП, они же МДП). Они удобны тем, что управляются исключительно напряжением: если напряжение на затворе больше порогового, то транзистор открывается. При этом управляющий ток через транзистор пока он открыт или закрыт не течёт. Это значительное преимущество перед биполярными транзисторами, у которых ток течёт всё время, пока открыт транзистор.

В дальнейшем мы будем использовать только n-канальные MOSFET. Это связано с тем, что n-канальные транзисторы дешевле, имеют лучшие характеристики и для управления N-канальным полевиком необходимо приложить положительное напряжение на затвор относительно истока.

Схема подключения вентилятора

Нагрузка подключена к стоку («сверху»). Если подключить её «снизу», то схема работать не будет. Дело в том, что транзистор открывается, если напряжение между затвором и истоком превышает пороговое. При подключении «снизу» нагрузка будет давать дополнительное падение напряжения, и транзистор может не открыться или открыться не полностью.

Резистор R1 на 100 Ом ограничивает ток заряда-разряда, а резистор R2 на 10 кОм — это стягивающий резистор, что в неопределенном состоянии «стягивает» потенциал к земле.

Кроме того, нужно помнить, что нагрузка индуктивная и нужен защитный диод D1.

N-канальные MOSFET с логическим уровнем управления

Один из минусов МОП транзисторов — это высокое пороговое напряжение затвора, больше 3.3 В. Тем не менее, существуют N-канальные транзисторы с логическим уровнем управления, например: IRL2505, FDN337N, ZVN4306A, 2N7000, PMV16XNR, NTZD3155C, IRLZ24NPBF, IRL520NPBF и т.п.

Включение вентилятора при заданной температуре

Ниже приведённые примеры используют WiringPi и, если библиотека у вас не установлена, установите её, инструкции тут: , WiringOP или BPI-WiringPi.

Самый простой пример управления вентилятором — это его включение, при достижении критичной температуры, и выключение, если температура ниже. Если шум вентилятора не мешает, тогда можно использовать такой вариант.

#include <iostream>
#include <fstream>
#include <wiringPi.h>
#include <unistd.h>

#define PIN 7

#define TEMPERATURE_MIN 55

using namespace std;

static int getTemperature() {
static fstream myfile;
int temperature = 0;
myfile.open(«/sys/devices/virtual/thermal/thermal_zone0/temp», ios_base::in);
myfile >> temperature;
myfile.close();
return temperature;
}

int main() {
int temperature;
int pinState = 0;
try {
if (wiringPiSetup() == 0) {
pinMode(PIN, OUTPUT);

while (1) {
temperature = getTemperature();

if (temperature >= TEMPERATURE_MIN && pinState == 0) {
digitalWrite(PIN, HIGH);
pinState = 1;
} else if (temperature < (TEMPERATURE_MIN — 10) && pinState == 1) {
digitalWrite(PIN, LOW);
pinState = 0;
}

usleep(1000 * 1000);
}
}
} catch (exception& e) {
cerr << e.what() << endl;
}
return 0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

#include <iostream>
#include <fstream>
#include <wiringPi.h>
#include <unistd.h>
 
#define PIN                  7
 
#define TEMPERATURE_MIN      55
 

usingnamespacestd;

staticintgetTemperature(){

staticfstream myfile;

inttemperature=;

myfile.open(«/sys/devices/virtual/thermal/thermal_zone0/temp»,ios_base::in);

myfile>>temperature;

myfile.close();

returntemperature;

}
 

intmain(){

inttemperature;

intpinState=;

try{

if(wiringPiSetup()==){

pinMode(PIN,OUTPUT);

while(1){

temperature=getTemperature();

if(temperature>=TEMPERATURE_MIN&&pinState==){

digitalWrite(PIN,HIGH);

pinState=1;

}elseif(temperature<(TEMPERATURE_MIN-10)&&pinState==1){

digitalWrite(PIN,LOW);

pinState=;

}

usleep(1000*1000);

}

}

}catch(exception&e){

cerr<<e.what()<<endl;

}

return;

}

Программа работает следующим образом — при достижении заданной температуры (более 55°С) вентилятор включается, и отключается только когда температура снизится более чем на 10°С от максимального порога (менее 45°С).

Температуру получаем с помощью функции . На Raspberry Pi температура измеряется в миллиградусах, для перевода в градусы Цельсия нужно разделить полученное число на 1000 и необходимо будет внести несколько изменений,

вместо:

static int getTemperature() {
static fstream myfile;
int temperature = 0;
myfile.open(«/sys/devices/virtual/thermal/thermal_zone0/temp», ios_base::in);
myfile >> temperature;
myfile.close();
return temperature;
}

1
2
3
4
5
6
7
8

staticintgetTemperature(){

staticfstream myfile;

inttemperature=;

myfile.open(«/sys/devices/virtual/thermal/thermal_zone0/temp»,ios_base::in);

myfile>>temperature;

myfile.close();

returntemperature;

}

использовать:

static int getTemperature() {
static fstream myfile;
int temperature = 0;
myfile.open(«/sys/devices/virtual/thermal/thermal_zone0/temp», ios_base::in);
myfile >> temperature;
myfile.close();
return temperature / 1000;
}

1
2
3
4
5
6
7
8

staticintgetTemperature(){

staticfstream myfile;

inttemperature=;

myfile.open(«/sys/devices/virtual/thermal/thermal_zone0/temp»,ios_base::in);

myfile>>temperature;

myfile.close();

returntemperature1000;

}

Компиляция, сборка и запуск программы

Сознаём файл  и вставляем вышеприведённый код:

nano FanPiOnOff.cpp

1 nano FanPiOnOff.cpp

Компилируем и собираем программу:

g++ -Ofast -Wall FanPiOnOff.cpp -lwiringPi -lpthread -o FanPiOnOff

1 g++-Ofast-Wall FanPiOnOff.cpp-lwiringPi-lpthread-oFanPiOnOff

Запускаем:

./FanPiOnOff

1 .FanPiOnOff

если хотим запустить программу в фоновом режиме:

nohup ./FanPiOnOff &

1 nohup.FanPiOnOff&

Схема регулировка скорости вентилятора с термистором и ШИМ генератором импульсов

Регулировка скорости вентилятора ШИМ генератором и включенным в цепь термистором. В этой статье предоставляется обзор, как самостоятельно изготовить электронную конструкцию для принудительного эффективного охлаждения узлов и компонентов выделяющих большое количество тепла, в таких устройствах как, усилители мощности, зарядные устройства, источники питания и так далее.

Все знают, что при работе кулера, издаваемый им шум порядком надоедает. А, чтобы снизить до минимума этот шумовой фон, нужно всего лишь изготовить специальный модуль управления вентилятором, который будет выполнять его отключение при низкой температуре на теплоотводах.

Поэтому, если не задействовать в схеме привычный метод регулировки скорости вращения вентилятора путем постепенного изменяющегося напряжения, а применить широтно-импульсную модуляцию (ШИМ), то можно корректно управлять скоростью вращения вентилятора и при необходимости добавлять обороты. Ниже представлены варианты принципиальных схем для повторения данного проекта:

В этой схеме, чтобы уменьшить напряжение с 24v до 5v, задействован преобразователь постоянного тока. Если бы здесь был использован линейный стабилизатор напряжения LM7805, как в классических схемах, то он грелся бы неимоверно, гася лишнее напряжение. Следовательно, его применение в конструкции регулировки скорости вентилятора без радиатора практически невозможно.

Для определения исходной точки старта вентилятора применяется гистерезисный компаратор. Принцип его действия таков: исходя из значений температуры на термисторе, размещенного на теплоотводе он изменяет действующее сопротивление в цепи вентилятора от 10кОм, при штатной температуре, до приблизительно 5кОм, когда теплоотвод становится предельно горячим.

Схема регулировка скорости вентилятора работает четко и корректно, но все-таки есть небольшой нюанс. Все дело в том, что при работе вентилятора незначительно прослушиваются низкие частоты во время прохождения импульсов. Что бы избавится от этих искажений, нужно включить в схему пару конденсаторов C4 и C5, они уберут это частотное искажение. Хотя, справедливости ради, нужно отметить, что у данной схемы имеются пара недостатков:

  1. Первое, нет возможности регулировки на полную ширину импульса. Предел регулировки это приблизительно 40%, вентилятор вращается достаточно медленно, но максимальное значение около 80%.
  2. Следующим больным местом является невозможность повысить частоту импульсного сигнала выше 20 кГц, при которой воздействие термистора на частотный диапазон ШИМ существенно снижается.

Есть специальные модули контроллеров для управления двигателями, вот с их помощью также можно решить это. По их принципу созданы две различные друг от друга схемы. Одна используется для вентилятора с напряжением питания 12v, а другая для вентилятора с 5-вольтовым постоянным напряжением. Микросхема управления вентиляторами TC648 работает достаточно надежно, поэтому такой ШИМ-вентилятор можно считать эффективным дополнением к мощному источнику питания.

После тестирования конструкции появилась необходимость внести некоторые изменения в схему управления. Во-первых, был задействован вывод VAS. В инструкции пишется, что для него нужно выбрать порог выключения в автоматическом режиме, хотя он также может устанавливать порог включения. Во-вторых, был удален резистор, который был установлен параллельно термо-резистору NTC.

Были проведены эксперименты с конденсатором C7, который служит для фильтрации частоты и уменьшает шумовые искажения на низких оборотах вентилятора. Оптимальный вариант получился с емкостью на 10 нФ, но при этом регулировка скорости вращения вентилятора получила ограничения. Поэтому все таки наилучшим вариантом будет установка конденсатора с емкостью 1 мкФ.

И наконец самый последний вариант схемы для управления скоростью вентилятора:

Предыдущая запись Починить холодильник: самостоятельный ремонт

Следующая запись Усилитель аудио SmartAmp Savant высокой четкости

Типы вентиляторов постоянного тока

Существует три основных типа вентиляторов постоянного тока (они же кулеры): двухпроводные, трехпроводные и четырехпроводные.

  • Двухпроводной вентилятор имеет два контакта — питание и заземление. Этим вентилятором можно управлять либо путем изменения напряжения постоянного тока, либо с помощью управляющего сигнала ШИМ.
  • У трехпроводного вентилятора есть сигнал тахометра, который показывает скорость вращения. Этим вентилятором также можно управлять, изменяя напряжение постоянного тока или используя низкочастотный управляющий сигнал ШИМ.
  • Четырехпроводной вентилятор имеет специальный вход PWM, который можно использовать для управления скоростью.

Схема самодельного ШИМ контроллера кулера

Основной выход PWM подключен к силовому транзистору (T1) для управления нагрузкой 12 В. Как видите, дополнительный инвертированный выход ШИМ также доступен для других целей. На самом деле столь мощный транзистор TIP41C (T1) в этой конструкции немного излишний, можете выбрать другой.

При экспериментах использовалась эта схема для «линейного» управления напряжением 2-проводного вентилятора 12V BLDC, и она работала отлично.

CD4016 (CD4016B / CD40106BE) содержит шесть инверторов, которые можно использовать для создания простых генераторов сигналов прямоугольной формы с одним резистором и конденсатором. Вход подключен к конденсатору, который идет на землю, а резистор идет от выхода. С помощью одного потенциометра и двух диодов можно изменить рабочий цикл или ширину импульса прямоугольной формы. Потенциометр изменяет способ прохождения обратной связи через два диода, что приводит к асимметричным колебаниям.

Представленная простая конструкция может использоваться для управления различными типами вентиляторов и ламп (в том числе светодиодных). Генератор прямоугольных сигналов CD40106 генерирует управляющий ШИМ на основе частоты и рабочего цикла, установленных соответствующими компонентами синхронизации RC. Конечный выходной сигнал может в дальнейшем использоваться разными способами, при условии что он настроен правильно для предлагаемого устройства.