16-ти канальный светодиодный драйвер TLC5940 - чтобы на даче было светло и комфортно

  • Цена: $8.45 за 10 штук

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


TLC5940 16-ти канальный драйвер светодиодов, поддерживает аппаратный 12 битный ШИМ, имеющий 4096 градаций яркости для каждого канала независимо. Согласно datasheet, драйвер умеет ограничивать ток в диапазоне 0-120 mA. Поддерживает питание источников до 17V, а сама микросхема способна питаться от 3 до 5.5V. Микросхема имеет последовательный интерфейс, поддерживает передачу данных с частотой до 30 MHz. Также она умеет выдавать информацию о ошибках в работе на соответствующие выводы. Микросхема выпускается в 3-х корпусах: PDIP (28) 35.69 mm × 6.73 mm, HTSSOP (28) 9.70 mm × 4.40 mm и VQFN (32) 5.00 mm × 5.00 mm. В данном обзоре рассмотрим PDIP версию.

Обозначения выводов:

Их назначение:
OUT0-OUT15 — подключение светодиодной нагрузки;
VCC и GND — питание микросхемы
SIN — вход даных
SCLK — тактовый сигнал данных (максимальная частота тактовых импульсов – 30 МГц)
SOUT — выход данных (для каскадного соединения)
XLAT — сигнал защелкивания данных из сдвиговых регистров
BLANK — обнуление счетчика ШИМ и выключение каналов OUT0-OUT15
GSCLK — тактовый сигнал ШИМ
IREF — ограничение по току для одного канала
XERR — выход для сигналов ошибок
VPRG — задает режим работы (0 – режим ШИМ, 1 – режим коррекции тока каналов)
DCPRG — задает режим работы с данными коррекции тока каналов (0 – EEPROM, 1 – DC Register)

Блок схема микросхемы выглядит таким образом:


Основной принцип работы заключается в следующем: данные последовательно пропихиваются в сдвиговый регистр Input Shift Register. В зависимости от предназначения этих данных (значения ШИМ (GrayScale) или коррекция тока каналов (Dot Correction)) они по приходу сигнала XLAT и состояния VPRG записываются в регистры ШИМ (GS Register) или коррекции тока каналов (DC Register). Далее ШИМ-контроллер заземляет или отключает от земли свой вывод OUTn. То есть микросхема работает со светодиодами по схеме общего анода, что не всегда удобно.

Микросхема TLC5940 позволяет ограничить максимальный выходной ток ШИМ-каналов с помощью резистора, который тянет вывод IREF к земле. Номинал резистора между IREF и землей выбирается согласно графику:

В частности, для 20 mA (обычные светодиоды) требуется резистор на 2 kOhm. Также, значение этого резистора можно посчитать исходя из формулы:
Imax = V(IREF) × 31.5 / R(IREF), где V(IREF) = 1.24V — опорное напряжение, Imax (5-120 mA) — максимальный ток одного выходного канала, R(IREF) — искомое сопротивление.

Тут есть (как обычно) один нюанс: когда мы работаем со светодиодами разных цветов, то, как правило, номинальный ток не одинаковый. Если мы будем ограничивать ток диодов одним значением, передача цвета исказится. Для устранения проблемы можно использовать 64-ступенчастую коррекцию тока канала (Dot Correction) – на каждый канал приходится по 6 бит (96 бит на все каналы). Предел коррекции тока – от 0% до 100%. В режим коррекции тока канала можно войти подняв вывод VPRG к напряжению питания. Начинаем отправку со старшего бита 15-го канала и заканчиваем младшим битом 0-го канала запись осуществляется по нарастанию тактового импульса SCLK. Когда все 96 бит прошли, защелкиваем их в регистры DC Register импульсом на XLAT.

К счастью, большинство низкоуровневых моментов реализуется в специальных библиотеках.

Возможно каскадное соединение микросхем:


Для Arduino есть библиотека скрывающая все низкоуровневые хитрости микросхемы и делающая управление светодиодами с помощью драйвера TLC5940 максимально простым. Далее мы рассматриваем типовое (простое) подключение драйвера, с ограничением тока выхода в 20 mA. Предупрежу сразу, перенос пинов в библиотеке возможен только двух SIN(26) и SCLK(25) и то в режиме BITBANG, остальные используют специфические возможности конкретных пинов.

Подключить данный драйвер к Arduino можно двумя способами, первый наиболее производительный, но отнимающий шину SPI (а соответственно большинство коммуникативных возможностей контроллера), второй менее производительный, но достаточный для большинства задач, не требующий SPI — называется BITBANG.

Рассмотрим схему подключения к Arduino (первый вариант, отнимающий SPI):

DCPRG(19) и VCC(21) подключаются к +5V
GND(22) и VPRG(27) подключаются к земле
GSCLK(18) соединяется с 3 цифровым выводом Arduino
XLAT(24) соединяется с 9 цифровым выводом Arduino
BLANK(23) соединяется с 10 цифровым выводом Arduino, этот вывод подтягивается резистором 10 кОм к +5V, чтобы погасить диоды при включении питания
IREF(20) через резистор 2 кОм соединяется с землёй

SIN(26) соединяется с 11 цифровым выводом Arduino
SCLK(25) соединяется с 13 цифровым выводом Arduino

Во втором (BITBANG) варианте необходимо:

SIN(26) соединить с 7 цифровым выводом Arduino
SCLK(25) соединить с 4 цифровым выводом Arduino

Помимо этого в папке с библиотекой, в файле tlc_config.h заменить:
#define DATA_TRANSFER_MODE TLC_SPI

на
#define DATA_TRANSFER_MODE TLC_BITBANG


Ну а теперь перейдем к самой интересной DIY части, с поделками и реальными штуками + программами :)

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

Поэтому сформулируем требования к нашему устройству:
— устройство должно управляться через локальную сеть (на даче везде она имеется с соответствующими коммутаторами);
— устройство должно управлять не менее чем 10-ю источниками света;
— каждый источник потенциально должен уметь потреблять до 4А при 12V;
— устройство должно иметь не менее 5 выводов (лучше аналоговых, которые можно использовать как цифровые) для подключения дополнительных датчиков (освещенность, датчик движения и тп);
— необходимо иметь возможность управления всеми источниками независимо;
— ШИМ и управление яркостью должно быть доступно для каждого источника света:
— детали должны быть доступны, самих деталей минимальное количество, цена приемлемая для обычного дачника;
— устройство должно уметь собираться в домашних условиях, даже кривыми руками (типа моих).
Основные требования ясны, теперь подходы к решению.
Дешево и достаточно эффективно снабдить устройство сетевым интерфейсом можно за счет использования модуля ENC28J60, дороже но более эффективно W5100. Чтобы выполнить требования по количеству и яркости нам потребуется предмет обзора (конечно сейчас бы я купил их в планарном исполнении, но в дип — они уже есть, поэтому будем использовать их). Остался нерешенным вопрос с выходной мощностью, при том, что TLC5940 предусматривает схему с общим анодом. Нам нужно компактное устройство управляющее достаточно большим током при напряжении 12V, причем открываемое нулевым сигналом (нам ведь совсем не нужны дополнительные инверторы).

Вся современная цифровая электроника построена, в основном, на полевых МОП (метал-оксид-полупроводник) транзисторах, как более экономичных, по сравнению с биполярными транзисторами. Иногда МОП-транзисторы называют МДП (металл-диэлектрик-полупроводник). Международный термин таких транзисторов — MOSFET (metal-oxide-semiconductor field effect transistor). Существуют два типа MOSFET транзисторов n-канальные и p-канальные. Наиболее распространены n-канальные транзисторы, из-за простоты подключения и, как следствие, массовости производства. Однако в нашем случае лучше подходят p-канальные, так как TLC5940 рассчитана на подключение по схеме с общим анодом.

Схема подключения к TLC5940 p-канального транзистора будет следующей (на примере двух):

Приведенные на схеме IRF7314 выпускаются как сборка состоящая из двух полевых p-канальных транзисторов (datasheet).

Основные характеристики: Напряжение (Vdss) 20V, Ток 5.3A, сопротивление сток-исток: 58 mOhm, корпус SO-8. Такие характеристики нас более чем устраивают.

Схема (достаточно условно и не на конкурс, но кому нужно думаю все поймут):


Питание по входу фильтруется электролитическим конденсатором на 470mF. Из 12V с помощью понижающего dc-dc преобразователя (на ШИМ схеме cn1584) получается 5V, которые также фильтруются электролитом на 470 mF, указанная плата на входе и выходе уже имеет керамические конденсаторы. 5V используются для питания контроллера и микросхемы TLC5940. Модуль связи требует для питания 3.3V, которые формируются из 5 линейным стабилизатором ams1117 на 3.3V, после стабилизатора также стоит электролит на 470 mF и добавляется керамика на 100nF.

В качестве контроллера я использовал ATmega328 в корпусе tqfp32 с внешним кварцевым резонатором (16 MHz), от которого работает встроенный в микроконтроллер генератор. Оба вывода кварца соединяются с землей через конденсаторы на 22pF. V+ и GND соединяются керамическим конденсатором в 100 nF возле самого контроллера. RESET подтянут к питанию резистором в 10kOhm. Для загрузки программ Serial (TX, RX), RESET, +V и GND выведены на отдельные 5 пинов — обозначены как J1. Кнопка S1 позволяет соединять RESET и GND (нужно при заливке скетчей и для перезагрузки устройства).

Сопряжение с сетью обеспечивает модуль ENC28J60, который имеет одинаковую распиновку с модулем W5100, и, соответственно, с легкостью может быть заменен (я даже сделал его съемным, что позволит в дальнейшем использовать для связи любой SPI модуль: Nrf24L01, W5100, W5500, ENC28J60 — в зависимости от конкретных потребностей).

В качестве драйвера открывающего сборки полевых транзисторов — предмет обзора (конечно в режиме BITBANG — ведь SPI нам нужен для связи). В данном случае задействовано 14 выводов микросхемы. Неиспользуемые 2 вывода согласно документации соединены с землей через резисторы в 10 kOhm. Между землей и IREF подключен резистор в 2 kOhm, обеспечивающий ограничение тока в 20 mA. Вывод BLANK подтянут к питанию резистором в 10 kOhm.

По периметру платы расположились винтовые клемники, обеспечивающие подключение источников света рассчитанных на 12V. Каждый клемник подключен к земле и одному из стоков транзисторной сборки irf7314. На истоки сборки подается 12V. На затвор сборки подается сигнал от TLC5940 через резистор 1 kOhm, также затвор, для закрытия транзистора при отсутствии открывающего сигнала от TLC5940, подтянут к +12V через резистор в 33kOhm зашунтированный керамическим конденсатором в 100 nF.

Дополнительно выведены 7 аналоговых пинов и 1 цифровой. Помимо этого имеются пины +5V, GND, +12V — для удобства подключения дополнительных устройств (пины питания и земли, довольно часто требуются, и один раз столкнувшись с их нехваткой, стараюсь не забывать об этом теперь). Еще один нюанс, я не захотел сверлить под переходы через дорожки и сделал переходы резисторами номиналом 0 Ohm. Надо сказать, что расположение выводов микросхемы TLC5940, в данном случае, оказалось не сильно удачным и таких переходов оказалось довольно много (переназначение пинов не прошло удачно — поэтому оставил как есть).

Печатная плата (фото вид):

Печатная плата (обычный вид):


Да уж, технологический процесс усложнился, но приступим к изготовлению.
Термотрансфером (грубо говоря, утюгом через бумажку — ЛУТ) перенесли рисунок платы на текстолит:

Лудим (на фотке как будто кривовато вышло, на самом деле все ровно и красиво :) — обман зрения):

Напаиваем компоненты (рекомендую сразу прозвонить критические участки):

Сторона элементов:

Со вставленным сетевым модулем:

После первичных тестов покрываем лаком сторону дорожек:


По моему, получилось вполне красиво (на мой криворукий взгляд :) ), все удалось уместить на плате 7 на 10 см — что меня очень даже устраивает.
Если кто-то хочет повторить — вот файл платы.

Контроллеры еще до пайки к плате (отчасти, чтобы убедится, что с ними до процесса все в порядке) я прошил с помощью адаптера, рассмотренного мной ранее. Паял SMD компоненты в держателе для плат, который описал здесь. Если кто то забыл поставить там '+', сейчас это сделать самое время :) — шучу конечно. Паял феном на паяльную пасту. Флюс использовал KINGBO RMA-218. Как видите, все это вполне пригодно для получения дачных поделок. При пайке таких маленьких деталек в большом количестве, нужно тщательно прозванивать схему особенно на предмет появления контакта там где его не должно быть, иначе есть риски получить волшебный дым.

Итого, для построения этого замечательного устройства требуются:
— контроллер ATmega328 в корпусе tqfp32 — 1 шт;
— кварц на 16 MHz — 1 шт;
— светодиодный драйвер Tlc5940 в корпусе dip28 — 1 шт;
— dc-dc преобразователь cn1584 — 1 шт;
— сборка из двух p-канальных MOSFET irf7314 (или аналоги под ваш ток и напряжение) в корпусе so8 — 7 шт;
— линейный стабилизатор ams1117 (3.3V) в корпусе sot223 — 1 шт;
— сетевой модуль enc28j60 mini либо w5100 — 1 шт;
— конденсатор электролитический 470 mF (25V) — 3 шт;
— конденсатор керамический smd1206 100nF — 16шт;
— конденсатор керамический smd1206 22pF — 2шт;
— резистор smd1206 10kOhm — 4шт;
— резистор smd1206 33kOhm — 14шт;
— резистор smd1206 1kOhm — 14шт;
— резистор smd1206 2kOhm — 1шт;
— резистор smd1206 0Ohm — 10шт;
— клемники винтовые 2pin — 14 шт (либо собрать из 3pin и 2 pin);
— разъем питания 2.1 x 5.5 мама — 1 шт;
— штыри лучше разных 5 цветов по одной линейке;
— разъемы типа мама 2.54 — 2 по 6 или один двойной по 6 пинов;
— кнопка 6.3 на 6.3 мм — 1 шт;
— фольгированный текстолит 10 на 7 см — 1 шт.
Ну и конечно паяльный инструмент, флюс и материалы для ЛУТ.
И, самое главное, хорошее настроение и желание получить готовое устройство.

Переходим к программной части.
Первым делом, припаяв контроллер и обвес для него, я загружал blink, чтобы проверить что с ним все в порядке (код тут не привожу он стандартный в примерах среды Arduino). Потом переходил к дальнейшей пайке. Собрав всю схему, кроме 13 каналов с винтовыми клемниками, транзисторными сборками и обвеса к ним (проверял на одном канале). Загружал первую программу тестирования:

#include "Tlc5940.h"

void setup()
{
  Tlc.init();
}

unsigned int br = 4095;
void loop()
{
  for (byte i=0; i<16; i++){
    Tlc.set(i, br);
  }
  Tlc.update();
  delay(1000);
  if (br==0) br = 4095; else br=0;
}

Данный код раз в секунду включает и выключает все выводы. Нехитрое видео с лампой на 1А (про нее я рассказывал в одном из новогодних обзоров):

Подключим к осциллографу:

Видим ряд импульсов с периодом 2с, заполнение 1с, напряжение соответствует 12V.

Передний фронт вполне норм.

Задний немного завален.
В данном конкретном случае это совсем не критично.

Затем тестировал связку сетевого модуля и управления светодиодами:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// yurok (last change 4.04.2016)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <EtherCard.h>
#include <Tlc5940.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PIN configuration
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define ETHERNET_PIN 5
#define ETHERNET_RST_PIN 20

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// set constants
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// comment for disable
#define SERIAL 1
// buffer size for get and send network messages
#define NETWORK_BUFFER_SIZE 850

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Network configuration
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// ethernet mac address - must be unique on your network
static byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x34 };
// ethernet interface ip address
static byte myip[] = { 192,168,1,42 };
static byte gwip[] = { 192,168,1,1 };
static byte dnsip[] = { 192,168,1,1 };
static byte mymask[] = { 255,255,255,0 };

byte Ethernet::buffer[NETWORK_BUFFER_SIZE]; // tcp/ip send and receive buffer
BufferFiller EtherBufferFiller; // prepare the webpage by writing the data to the tcp send buffer

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Other global setup
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// for count motors
template<typename T, size_t n> inline size_t arraySize(const T (&arr)[n]){return n;}

const char HTTP_BEGIN[] PROGMEM = "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n<html><title>LED</title>";
const char HTTP_END[] PROGMEM = "<p><a href=/>refresh</a></p></html>";

// global time
unsigned long CurrentTime = 0;
// in setup set count of LEDs
byte NumberLEDs = 0;

// type LED
typedef struct {
  byte On; // state
} LedType; 

// all led:
LedType MC[] = {
   {0}, //0
   {0}, //1
   {0}, //2
   {0}, //3
   {0}, //4
   {0}, //5
   {0}, //6
   {0}, //7
   {0}, //8
   {0}, //9
   {0}, //10
   {0}, //11
   {0}, //12
   {0}, //13
 };

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// init
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void setup(){
#ifdef SERIAL
	Serial.begin(57600);
#endif
// Ethernet init
	if(ether.begin(sizeof Ethernet::buffer, mymac, ETHERNET_PIN) == 0){
#ifdef SERIAL		
	  Serial.println( "Failed to access Ethernet controller");
#endif
	  exit(0);
	}else{
#ifdef SERIAL		
	  Serial.println( "Ethernet controller ok");
 #endif
        };

        digitalWrite(ETHERNET_RST_PIN, LOW);
        delay(20);
        digitalWrite(ETHERNET_RST_PIN, HIGH);
	ether.staticSetup(myip, gwip, dnsip, mymask);

#ifdef SERIAL		
          ether.printIp("IP:  ", ether.myip);
          ether.printIp("GW:  ", ether.gwip);  
          ether.printIp("DNS: ", ether.dnsip);  
          ether.printIp("SRV: ", ether.hisip);
 #endif
 
        NumberLEDs = arraySize(MC);
        Tlc.init();
        delay(1);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// main loop
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void loop(){
  CurrentTime = millis();
  unsigned int len = ether.packetReceive();
  unsigned int pos = ether.packetLoop(len);

  if (pos) { // check if valid tcp data is received
    EtherBufferFiller = ether.tcpOffset();
    char* data = (char *) Ethernet::buffer + pos;
#ifdef SERIAL		
    Serial.println(data);
#endif    
    //////////////////////////////////////////////////////////////////////////    
    // LEDS
    //////////////////////////////////////////////////////////////////////////    
    // on
    if (strncmp("GET /?e", data, 7) == 0){
        // get number active motor
        byte cm = atoi(&data[7]);
        if(cm>=0 && cm<NumberLEDs) {
          Tlc.set(cm, 4095);
          Tlc.update();
          MC[cm].On = 1;
        }
        homePage(EtherBufferFiller);

    // off
    }else if (strncmp("GET /?d", data, 7) == 0){
        // get number active motor
        byte cm = atoi(&data[7]);
        if(cm>=0 && cm<NumberLEDs) {
          Tlc.set(cm, 0);
          Tlc.update();
          MC[cm].On = 0;
        }
        homePage(EtherBufferFiller);
 
    //////////////////////////////////////////////////////////////////////////    
    // Default reaction for reply
    //////////////////////////////////////////////////////////////////////////    
    }else{
         homePage(EtherBufferFiller);
    }
   }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Web server main page
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
static void homePage(BufferFiller& buf) {
  EtherBufferFiller = ether.tcpOffset();
  EtherBufferFiller.emit_p(PSTR("$F"), HTTP_BEGIN);

  // print state and control button for each LED
  for (byte i=0; i<NumberLEDs; i++){
    EtherBufferFiller.emit_p(
          PSTR("$D ($F) <a href=/?e$D>e</a> <a href=/?d$D>d</a>
"), i, MC[i].On==0?PSTR("d"):PSTR("e"), i, i
    );
  }
  EtherBufferFiller.emit_p(PSTR("$F"), HTTP_END);
  ether.httpServerReply(EtherBufferFiller.position()); // send web page data
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Здесь нам уже потребуется библиотека для работы с сетевым модулем enc28j60. Программа очень простая, но тестирует все возможности данной платы, позволяя включать и выключать любой источник света через сетевое соединение.

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

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


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

Конечно можно было заказать платы в Китае, это сейчас модно, но несколько штук для себя я в состоянии изготовить за вечер, полученное качество меня вполне устраивает, а стоимость заготовки порядка 30 рублей (менее 0.5$)… Тут уж каждый делает выбор сам.

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

На этом заканчиваю. Спасибо тем кто дочитал до конца, надеюсь кому-то информация окажется полезной! Если заинтересует, опишу еще парочку новых «дачных разработок».

Хищник обнюхал устройство и многозначительно отвернулся

Планирую купить +70 Добавить в избранное +82 +163
+
avatar
  • exeland
  • 05 апреля 2016, 11:49
+2
неплохая альтернатива — dm631 или dm633 от SiTi.
+
avatar
+3
обзор как всегда отличный!
вот теперь думаю с чего начать))
+
avatar
  • henrbn
  • 05 апреля 2016, 12:11
+9
С покупки деталей на али и ожидания месяц-полтора. За это время энтузиазм поугаснет. Поможет только пинок жены))
+
avatar
+18
Поможет только пинок жены))
А жена-то в чем виновата? За что ее так? )))
+
avatar
0
пинок жены только отвадит)
+
avatar
  • manki
  • 05 апреля 2016, 12:12
+1
// Water control

подумалось, что что-то гидропонное 8))
+
avatar
  • yurok
  • 05 апреля 2016, 12:13
+1
поправил, коммент от старого скетча
+
avatar
  • wd40
  • 05 апреля 2016, 12:35
+1
А частота ШИМ где-нибудь приведена? Ну, или осциллографом посмотреть…
+
avatar
  • vv734
  • 05 апреля 2016, 12:37
0
— резистор smd1206 0Ohm — 10шт; опечатка наверное??
+
avatar
  • yurok
  • 05 апреля 2016, 12:41
+2
нет — прочитайте, я ими сделал переходы через дорожки
+
avatar
  • vv734
  • 05 апреля 2016, 12:52
+1
Спасибо, перечитал внимательнее — нашел.
Жду с нетерпением следующих обзоров дачных самоделок.
+
avatar
0
привет помоги с программатором не идет не как
+
avatar
+2
Спасибо за очередной познавательный обзор! После одного из ваших длинных текстов решил сделать старикам поливалку-автомат на дачу, счас вот почти вся комплектуха есть, жду только датчик расхода воды. Ну и в моем случае все гораздо проще — только ардуина, готовые модули и несколько кнопок. Уровень «для новичка», так сказать, чтобы никаких ЛУТов и погружения в дебри электроники и схемотехники. Скетч практически написан и отлажен, осталось дождаться расходомера и подключить все это дело.
+
avatar
  • yurok
  • 05 апреля 2016, 12:42
+8
рад стараться :)

эти устройства делал практически лежа, перевернулся на снегоходе и немного повредил спину, сейчас период реабилитации
+
avatar
  • dia
  • 05 апреля 2016, 13:40
0
рад стараться :)
Рад плюсануть.
И рад, что у вас не было попыток сочинить даташит на микруху. Все ровно и чинно…
+
avatar
  • manki
  • 05 апреля 2016, 13:03
0
в обзор осилите оформить? тоже жалко родителей, страдающих без автоматизации
+
avatar
0
Не знаю, можно попробовать. Разве что проверки в боевых условиях пока не было
+
avatar
  • manki
  • 05 апреля 2016, 13:12
0
я думаю большинству любопытствующих хватит описания используемых компонентов, скетча и стенда
+
avatar
+3
Ну, скетч там здоровый… 1200 строк, или около того. Задействованы почти все пины на arduino nano, хотя по большому счету как-то и нету ничего особенного. 4 электромагнитных клапана, насос, управление клапанами ручное и по расписанию, несколько датчиков температуры/влажности, часы, экран. Короче, когда расходомер придет — попробую че-нть написать про эту поделку
+
avatar
  • manki
  • 05 апреля 2016, 14:09
0
круто. спс
+
avatar
  • sir0ta
  • 05 апреля 2016, 21:27
0
Я лабораторник сегодня на 0,5 закончил. тоже думал — Сделаю основу по нормальному, все есть для этого, потом посмотрел… ну что там, вход — диодная сборка, предохранитель, понижающий преобразователь, выход на вентиляторы с него и выход после преда на контроллер… да ну его и вляпал на макетке. Так что и с предыдущими проектами. С оной стороны — кайф протравить, пропаять, с другой стороны смысл? У меня все бралось модульно для отладки, сейчас докупать новое? Так ценник выходит на запчасти как я покупал целиком. Выпаивать? Стоит ли игра свеч? Так и оставляю все на макетах да проводках… Все зависит от объема компонентов и их наличия.
+
avatar
0
del
+
avatar
  • Rzzz
  • 05 апреля 2016, 12:55
+1
Ссылку на термобумажку не дадите? Платы у вас красивые получаются.
+
avatar
  • yurok
  • 05 апреля 2016, 15:58
0
aliexpress.com/item/50pcs-PCB-circuit-board-thermal-transfer-paper-transfer-paper-A4-size-hot-sale-in-stock-Highly/1036906319.html

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

им и не пользовались года с 2000-го, даже на даче
+
avatar
  • Rzzz
  • 05 апреля 2016, 16:13
0
Некоторые, я смотрю, ламинаторами пользуются. Тоже хочу попробовать, лежит у меня текстолит совсем тонкий, как бумага. 0,3 вроде.
+
avatar
  • yurok
  • 05 апреля 2016, 16:15
0
попробуйте, его вроде дорабатывать надо
а с таким текстолитом — не уверен что хорошо выйдет — механическая прочность ему важна
+
avatar
  • dia
  • 05 апреля 2016, 17:07
0
Ламинатором фоторезист хорошо накатывается. Тонер не пробовал, нет у меня дружбы с ЛУТом. Думаю в стандартном исполнении у ламинатора температуры не хватит.
+
avatar
+1
Я глянцевой фотобумагой, для струйной печати Lomond пользуюсь, а некоторые используют глянцевые журналы позаимствованные у жен, или рекламные буклеты, и т. д. Пишут, хорошо получается.
+
avatar
  • yurok
  • 05 апреля 2016, 20:02
0
раньше тоже этой бумагой пользовался… теперь не возникает желания
+
avatar
0
Что, на столько большая разница?
+
avatar
  • yurok
  • 05 апреля 2016, 20:15
0
не очень большая — но есть
хотя… вот у меня один принтер не печатает на этой специальной желтой бумаге и она лежала мертвым грузом… когда привез с дачи другой принтер и он на ней начал печатать — проверил — получилось отлично, и желание вести эксперименты дальше не возникает. Если все хорошенько прогладить — то дефектов нет
+
avatar
0
А по плотности желтая какая?
+
avatar
  • yurok
  • 06 апреля 2016, 21:26
0
плотность там не понятна, бумага похожа на отходы от самоклеящейся пленки
+
avatar
  • sirix
  • 05 апреля 2016, 13:07
0
зачем стоит конденсатор 100nF между Gate и Source на полевике?
+
avatar
  • Aostspb
  • 05 апреля 2016, 13:34
0
Защита от самовозбуждения, вероятно.
+
avatar
  • yurok
  • 05 апреля 2016, 15:34
+3
Если в устройстве имеются подозрения на ложные открывания, понаблюдайте за напряжениями VGS, VDS и током ID. Когда нижний ключ отпирается, мы наблюдаем короткий положительный импульс на VGS и связанное с ним понижение VDS. Для борьбы с этим эффектом можно выбрать MOSFET с низкой емкостью CDG, высокой емкостью CGS и более высоким порогом отпирания. Возможна установка дополнительного конденсатора между затвором и истоком. При установке CGS увеличивается суммарный заряд затвора, необходимый для достижения порогового напряжения отпирания MOSFET. Емкость CGS ослабляет влияние эффекта Миллера, заряжаясь создаваемым им током и препятствуя возникновению тока в цепи затвора.
+
avatar
+2
Обзор супер!!!
а не смогут ли по spi работать вместе enc и Tlc? там же выборка есть cs.
+
avatar
  • yurok
  • 05 апреля 2016, 16:31
0
ну и что?
пока будут меняться данные на tlc — вы не сможете управлять устройством
+
avatar
0
очень советую на esp8266 обратить внимание… копеечная цена при классных возможностях.
+
avatar
  • yurok
  • 05 апреля 2016, 14:40
0
я их тоже использую и как нибудь напишу
не просто мне даются такие обзоры большие

при 5 вольтах с ними не хорошо
+
avatar
0
да я на 3.3 их питаю. i2c и spi на борту имеются можно по spi еще gpio наращивать.
+
avatar
  • yurok
  • 05 апреля 2016, 15:15
0
да их то понятно — а периферию остальную? :)
и сопряжения все + мне часто нужна проводная сеть
+
avatar
0
ну тогда только преобразователь уровней один полевичек и пару резиков… хотя до 4 вольт есп нормально живут. Слышал историю что проектировался как 5 но на заработал хорошо на 3.3
+
avatar
  • yurok
  • 05 апреля 2016, 15:26
0
ну вот не всегда их уместно использовать
+
avatar
  • Aostspb
  • 05 апреля 2016, 15:50
0
Один полевичок тут, один — там — вот и совсем не копеечная цена получается, это если закрыть глаза на кривизну всего остального. :) esp пока — только для гиков годится.
+
avatar
0
esp вряд ли для гиков. Скорее уже для школьников с генераторами готового кода.
Yurok, у вас данные все на сервер заводятся или прямое управление отсылкой команд с телефона или устройств?
+
avatar
  • yurok
  • 05 апреля 2016, 22:28
0
штатно — через красивый веб интерфейс сервера, но можно прямиком зайти на устройство и управлять через его корявую страницу — я писал об этом в обзорах
+
avatar
+1
Спасибо за обзор!
+
avatar
  • ALexus
  • 05 апреля 2016, 14:23
+5
Да тут не YUROK, тут целый YUREC...!!! :)
+
avatar
  • Prays
  • 05 апреля 2016, 15:22
+1
TLC5940 здесь используется как шим-контроллер, а не драйвер? По заголовку подумал что будет управление чисто диодами.
+
avatar
  • yurok
  • 05 апреля 2016, 15:25
-1
здесь как драйвер
+
avatar
  • Prays
  • 05 апреля 2016, 15:57
0
Т.е. можно подключить светодиод без токоограничивающих резисторов напрямую к мосфетам?
+
avatar
  • yurok
  • 05 апреля 2016, 16:01
0
нет, нельзя
маленькие светодиоды можно подключать к микросхеме из обзора — она способна ограничивать ток от 5 до 120 мА. Если нужен больший ток и стоят полевики — то о токе нужно иными способами думать
+
avatar
  • Prays
  • 05 апреля 2016, 16:38
0
Ну здесь ведь как раз нельзя подключить напрямую. В моем понимании драйвер светодиода = источник тока. Не пойму почему здесь как драйвер используется.
+
avatar
  • sav13
  • 05 апреля 2016, 16:33
0
Брал такую, спалил через MOSFET видимо обратным напряжением
Открыл для себя SoftPWM хоть на все выводы контроллера. Теперь в расширителях особой надобности не вижу
+
avatar
  • yurok
  • 05 апреля 2016, 20:40
0
хм… сложно это
там написано 17 Вольт
не поделитесь инфой что с ней делали?

К сожалению или к счастью выводы контроллера нужны и для других целей — и ресурсы например при подключении к локальной сети резко расходуются… так что решение имеет рправо на жизнь — нужно выбирать от конкретных условий
+
avatar
  • sav13
  • 05 апреля 2016, 21:18
0
Я не помню точно, года два назад это было, экспериментировал всего с 12В и видимо на какой-то вывод подал. Микросхема просто перестала отзываться
+
avatar
  • yurok
  • 05 апреля 2016, 21:25
0
если только на какой-то из управляющих…
+
avatar
+2
нифига не понимаю, но читать почитал и плюсик держите)))
+
avatar
  • Z2K
  • 05 апреля 2016, 18:48
0
Не совсем понятно использование 13 каналов. Это можно автоматизировать освещение всей квартиры. Но тянуть силовые низковольтные провода к контроллеру затратно и энергонеэффективно. Даже если в центре квартиры разместить. Лучше развести сигнальные провода, а силовую коммутацию производить возле нагрузки.
+
avatar
  • yurok
  • 05 апреля 2016, 19:15
+1
Каналов 14

на даче большая веранда 8 — светильников — все уже заведены в щиток + настольная лампа + требуется лампа над вторым столом + освещение 4-х ниш — вот и все — все порты будут заняты

в бане примерно та же история

12 Вольт тянуть на расстояние 5-7 метров это нормально, в квартире наверное нецелесообразно, хотя смотря какое освещение
+
avatar
  • Vipeg
  • 05 апреля 2016, 20:21
+1
Отличный обзор. И спасибо, что вспомнили мой тоже :) Очень интересная реализация, частенько слежу за Вашими реализациями. Во многом понимаю и поддерживаю Вашу концепцию. Но есть несколько вопросов. Как реализована возможность локального включения каждой конкретной нагрузки в добавок к централизованной (по сети)? Предусмотрен ли такой функционал? В сформулированных Вами же требованиях к проекту я этого вроде не нашел. Интересуюсь с целью более глубокого понимания всей концепции умного дома (её конкретной реализацией). Вы не рассматривали возможность небольшого дробления данного контроллера на несколько субмодулей? Например, как писали выше, с целью избежания потерь в проводах по линии 12 вольт + возможность локального управления процессами (например, регулировать нагрузку, находясь в бане, без необходимости посещения центра управления).
+
avatar
  • yurok
  • 05 апреля 2016, 20:29
0
спасибо!
ну я посмотрел, где упоминается данная микросхема.
Я специально постарался вывести несколько пинов контроллера — в обзоре это есть, как раз для подключения датчиков и прочего — для локальной реакции на события, у меня и сейчас на веранде стоят датчики движения и освещенности (такая операция как включение света в общем случае не требует обращения к центральным узлам). По сети например можно отключить локальную реакцию или модифицировать ее (такое во всех моих поделках реализовано — эта не исключение). И система управления водой в бане работает локально — но можно ее поведение изменить вмешавшись через сеть.

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

У Вас там прям заказ плат на производстве — все серьезно.
+
avatar
  • Vipeg
  • 05 апреля 2016, 21:04
+1
У Вас там прям заказ плат на производстве — все серьезно
:) Я просто старался сделать проект массовым. Многим, и мне в том числе, очень сложно сделать плату самому. Я искренне старался делать сам, с использованием фоторезиста. Плата получалась очень неплохая, но сверление отверстий — это выше моих сил. Отверстия получаются кривыми, под разными углами, съезжают и т.д. В этом плане я уже подсмотрел у Вас в обзоре оснастку для дремеля. У меня такой же, 3000 серии. Альтернативой отверстиям можно рассматривать SMD, но запчасти кощунственно мелкие. Нужен опыт пайки SMD, без него «ловить нечего» — как мне, так и потенциальным желающим повторить проект. Был бы опыт пайки SMD — я бы реализовал свой контроллер Arduino — очень маленький (вроде кикстартеровского на АтТайни, но с полнофункциональной Мегой), но с возможностью подключения доп. модуля с недостающими пинами, если потребуется. Мечты, мечты :)
как раз для подключения датчиков и прочего — для локальной реакции на события
Как-то, видимо, пропустил. Это очень мудрое решение. Кстати, Вы полностью довольны PIR модулями как полной заменой выключателей? Пытаюсь найти приемлемое решение, чтобы отказаться от выключателей полностью.
+
avatar
  • yurok
  • 05 апреля 2016, 21:18
+1
Станина сверлильная, полностью убирает трудности сверления, минут 5-10 и все дырочки ровные и в нужных местах, сверла не ломаются

я, если честно, не вижу большого смысла в таком модуле, в 99% случаев хватает 328 атмеги, а там где не хватает — я предпочту роутер на линуксе. Мне больше нравится прям в поделку впаять контроллер — не вижу смысла его делать съемным.

на веранде — полностью доволен — ни разу не выключился свет — я тут реализацию уже описывал, в доме выключатели сподручнее, на веранде было пару раз чуть стемнело а свет нужен был яркий — ну я спокойно включал с телефона — этот функционал то остался. Заменить в доме и квартире выключатели на датчики не готов. Везде поставил ливоловские выключатели и контроллер с передатчиком на 433 MHz — очень удобно
+
avatar
  • Z2K
  • 05 апреля 2016, 23:15
0
Можно ссылку на Ваш проект?
+
avatar
  • yurok
  • 06 апреля 2016, 21:33
0
в обзоре есть ссылка
+
avatar
0
Что-то дорожки сильно тонкие, особенно общая силовая дорожка на выход… как бы потом не пришлось наращивать её сечение. 14 выходов положим по 1А каждый… уверены что дорожка выдержит?
+
avatar
  • yurok
  • 09 апреля 2016, 23:34
0
Вы правы, от ситуации — возможно потребуется усилить силовые дорожки припаяв проводок поверх
+
avatar
  • DjPlosky
  • 04 октября 2016, 19:48
0
Здравствуйте! Собираю вашу схему, но хочу управлять плавно яркостью светодиодов, а покашто получается што светодиоды влючаютса только на полную яркость или отключаютса. Это особенность вашей схемы (што не роботает PWM), или я штото зделал не так? Надеюсь на ответ! Спасибо!
P.S. Судя по всему нужно уменьшать номинал конденсатора…
+
avatar
  • seval
  • 28 ноября 2017, 21:13
0
Здравствуйте! У меня тоже получилось без ШИМа.
Подскажите Вы решили эту проблему7
+
avatar
  • sv-roman
  • 22 февраля 2021, 16:35
0
Здравствуйте! Да, тот же вопрос. На выходах tlc ШИМ работает. А транзисторы его не отрабатывают. Почему? не могу понять… :(
+
avatar
0