PWM в управлении LED
- Сычевский Виталий
- 11 янв. 2017 г.
- 2 мин. чтения
Сейчас уже много готовых решений (как микросхемы, например: MT7201, PT4115 и т.д., так и субмодули) в питании LED постоянным током и управлению яркости с помощью PWM. Для разработки и отладки светодиодных устройств с PWM управлением я создал простой тестер на основе микроконтроллера с гальванической развязкой на оптопарах PC817. Оптопары предназначены для защиты контроллера от некоторых повреждений микросхемы питания LED.
Тестер состоит из:
1. Макетной платы.
2. Модуля 7805 (с 2мя конденсаторами), который позволяет использовать отдельный источник питания на напряжение 7.5-15В.
3. Arduino Pro Mini 168й 16МГц контроллера установленного в разъемное соединение.
4. Панельки с оптопарами.
5. 12шт. резисторов в обвязке оптопар.
6. Разъемного соединения.


Тестер подключается вместо "родного" контроллера и работает в автоматическом режиме перебирая каналы светодиодов.

Вот программа в которой видно, к каким выводам контроллера подключать светодиоды.
// Для управления цветом светодиодов используем 4 ШИМ порта int redPin = 3; int greenPin = 5; int bluePin = 6; int whitePin = 9; void setup() { // Инициализируем выходы для нашего RGB светодиода pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); pinMode(whitePin, OUTPUT); } void loop() { // Вызываем функцию установки цвета и в качестве параметров передаем номер пина. // Используем вызов 4 раза со сменой пинов, для перетекания из одного цвета в другой. setFadeColor(redPin, greenPin, bluePin, whitePin); // setFadeColor(whitePin,redPin,greenPin,bluePin); // setFadeColor(bluePin,whitePin,redPin,greenPin); // setFadeColor(greenPin,bluePin,whitePin,redPin);
setPolice (cPin1, cPin3, 15); } // Функция, которая устанавливает для каждого пина(RGBW канала) // свой алгоритм изменения цвета void setFadeColor(int cPin1, int cPin2, int cPin3, int cPin4) { setIncrP(cPin1); setIncrP(cPin2); setIncrP(cPin3); setIncrP(cPin4); setIncrM(cPin4); setIncrM(cPin3); setIncrM(cPin2); setIncrM(cPin1); setIncrP(cPin1); setIncrP(cPin2); setIncrP(cPin3); setIncrP(cPin4); setIncrM(cPin1); setIncrM(cPin2); setIncrM(cPin3); setIncrM(cPin4); } void setIncrP(int cPin) { for (int i = 1; i <= 255; i = i + i) { analogWrite(cPin, i); delay(30); } analogWrite(cPin, 255); } void setIncrM(int cPin) { int t = 1; for (int i = 255; i > 0; i = i - t) { t = t + t; analogWrite(cPin, i); delay(40); } analogWrite(cPin, 0); } void setPolice(int cPinR, int cPinB, int Pcycle) { int dl = 50; for (int i = 1; i <= Pcycle; i++) { for (int r = 1; r <= 2; r++) { analogWrite(cPinR, 255); delay(dl + 30); analogWrite(cPinR, 0); delay(dl + 30); } for (int b = 1; b <= 2; b++) { analogWrite(cPinB, 255); delay(dl); analogWrite(cPinB, 0); delay(dl); } } }
Comments