Все чаще и чаще в различных самоделках используются микросхемы SoC, FPGA, например, в одноплатных компьютерах, которые при интенсивном использовании не могут обойтись без принудительного охлаждения.
Представленный здесь мини модуль позволяет регулировать обороты микровентилятора с двигателем постоянного тока с использованием интерфейса I2C, основываясь на измеренной температуре.
Модуль собран на специализированном драйвере LTC1695 и температурном датчике AD7415. В данном варианте модуль позволяет управлять микровентилятором мощностью до 1 Вт с питанием 5 В.
Микросхема LTC1695 размещена в миниатюрном корпусе SOT23-5. LTC1695 содержит регулятор LDO с фиксированным выходным напряжением, а так 6-разрядный ЦАП. Микросхема имеет встроенную защиту от перегрузки и перегрева.
Чтобы избежать проблем с запуском двигателя при пониженном напряжении питания, в схему встроен Boost Start. Эта функция выдает 100% выходное напряжение в течение 250 мс, что обеспечивает максимальный пусковой момент для вентилятора.
В дополнении модуль оснащен температурным датчиком AD7415, который можно использовать для управления вентилятором.
Принципиальная схема регулятора оборотов вентилятора показано на следующем рисунке.
Схема совместима со стандартом I2C Arduino. Сигналы интерфейса и питание выведены на 4-х контактный разъем типа EH – I2C.
Для модуля требуется питание 5 В / 1 Вт. Резисторы R1, R2 для подтяжки линий I2C, конденсаторы C1, С2 и дроссель L1 фильтруют напряжение питания микросхемы DD2.
Перемычка TA позволяет установить адрес I2C термометра AD7415-0 (DD1). Если перемычка не установлена, то адрес равен 100100, когда замкнута с массой – 1001001, когда с VCC – 1001010.
В место датчика AD7415-0 можно использовать AD7415-1 с измененным базовым адресом I2C.
Ниже приведена короткая тестовая программа для среды Arduino, которая контролирует работу вентилятора на основе считывания значения температуры в диапазоне 0…50°C.
[slh lang=»php»]
#include <Wire.h>
#define LTC1695_Adr B1110100 // Адрес LTC1965
#define AD7415_Adr B1001001 // Адрес AD7415
uint8_t Speed_Val = 0;
void setup()
{
Wire.begin();
Serial.begin(9600);
}
//LTC1965 установка скорости
void LTC1695_Speed()
{
Wire.beginTransmission(LTC1695_Adr);
Speed_Val = Speed_Val & B00111111;
Wire.write(Speed_Val);
Wire.endTransmission();
delay(10);
}
//AD7415 чтение температуры
void AD7415_Read()
{
uint8_t result_H = 0, result_L = 0;
Wire.beginTransmission(AD7415_Adr);
Wire.write(B00000001);
Wire.write(B01000000);
Wire.endTransmission();
delay(10);
Wire.beginTransmission(AD7415_Adr);
Wire.write(B00000000); //temreg set
Wire.endTransmission();
delay(10);
Wire.beginTransmission(AD7415_Adr);
Wire.requestFrom(AD7415_Adr, 2);
while (Wire.available())
{
result_H = Wire.read();
result_L = Wire.read();
}
Wire.endTransmission();
Speed_Val = result_H;
}
void loop()
{
AD7415_Read();
Serial.print(«Temp: «);
Serial.println(Speed_Val, DEC);
delay(1000);
LT C1695_Speed();
}
[/slh]