6-канален LED ШИМ контролер за фоново осветление с PIC16F870

Настоящият проект представлява шест-канален ШИМ контролер за светодиодно фоново осветление на базата на микроконтролер PIC16F870. Реализирано е управление на две линии пълноцветни светодиодни модули. Използван е софтуерен ШИМ генератор, тъй като хардуерният е само един. Управлението се извършва чрез четири сензорни бутона. Налична е светодиодна индикация за режим на ръчна настройка на генератора. Текущите настройки могат да бъдат запаметявани и зареждани отново в желан момент, както и автоматично при подаване на захранващо напрежение.

Забележки:

1.) Описанието на този проект е дадено с образователна цел или да ви даде идеи за ваши проекти. Програмното осигуряване на микроконтролера не е достъпно безплатно. В момента не мога да предложа изпращане на програмирани чипове, но въпреки това ако имате такова желание, моля пишете ми, за да получите прясна информация.
2.) Всички изображения са също и препратки към по-голям размер на същите изображения.

Целта на този проект е да се изработи сравнително проста схема за контрол на пълноцветно фоново осветление за стая с разнообразни програми на светене, както и възможност за ръчна настройка на двете линии светодиоди за постигане на желания цвят. Използваният микроконтролер е от среден клас, но въпреки това е на достъпна цена. Повече информация за него можете да намерите ТУК. На чертежите по-долу са представени принципните схеми на управляващия модул и на светодиодните линии.

led_rgb_pwm_16f870_control

led_rgb_pwm_16f870_led_rgb_module

Ще изясня първо светодиодните линии като по-проста схема. Както е видно от самата схема (надписите) са налични две линии светодиодни модули. Всяка от линиите се състои от два модула, а всеки модул от 3 групи по 3 светодиода за всеки цвят. Директно се подава +12V за захранване на светодиодите, а към маса токът протича през транзисторите в управляващия модул. За всеки цвят е използван определен резистор, чиято стойност зависи от параметрите на светодиодите и в случая е опитно определена. Умишлено се използват два подаващи напрежение проводника, за да е възможно отдалечено разполагане на двете линии отделно една от друга (например на две от стените в една стая). Останалите изводи на конектора са маркирани на схемата и служат за контрол на двете линии. Броят светодиоди е 36, като максималният брой светодиодни модули се ограничава от използваните транзистори в управляващия модул. На снимката по-долу са показани използваните светодиодни модули.

16f870demo9

Използваният микроконтролер вече беше споменат, затова ще се насоча направо към описанието на схемата на управляващия модул. Този микроконтролер разполага с 3 порта, като единият е с намален брой изводи (порт А). Първият порт (порт А) се използва за светодиодната индикация. Тя се състои от един трицветен светодиод, показващ настройвания цвят в ръчен режим и два светодиода, показващи линията, която се настройва в този момент. Когато се използва програмен режим (вградени програми), индикацията не свети. Вторият порт (порт В) отговаря за сензорните бутони. Те са четири на брой (Режим, Цвят, Увеличаване, Намаляване). Тези бутони са същите като бутона в проекта за светорегулатор. Принципът на работа също не се различава. Използваните тук резистори са оптимизирани за работа с проводници, а не бутони монтирани директно на платката. Също така и програмният код е оптимизиран, за да не се получава самовъзбуждане при използване на проводници с размер до 10см (въпреки това увеличаването на дължината води до по-ниска шумозащитеност). Третият порт (порт С) управлява транзисторите, които включват и изключват шестте групи светодиоди (2 линии по 3 цвята). Използваните транзистори, както и в предните два проекта са BC548C с номинален ток 100мА и напрежение колектор-емитер 45V. Няма отново да обяснявам подробностите около транзисторите. И в този случай те могат да бъдат заменени с по-мощни, стига базовият им ток да е под 20мА, за да не се повреди порта на микроконтролера. За използване на MOSFET трябва да се изберат такива транзистори, че да се отпушват с напрежение до 5V (ТТЛ нива).

Ще разясня и в този проект принципа на работа на сензорните бутони. Микроконтролерът конфигурира избран извод като изход и подава високо ниво към него (5V). Това състояние се задържа за кратко, за да се “зареди” пръстът на потребителя с енергия. След това изводът се конфигурира като вход и се проверява нивото. Ако то е високо, значи бутонът е бил натиснат (пръстът на потребителя се разрежда за известно време, като в началото поддържа високото ниво на извода). Важното при писане на код за обработка състоянието на бутоните е да се подберат подходящи паузи между отделните операции, за да не се получават грешки. Времето отредено за “зареждане” на потребителя трябва да бъде поне няколко микросекунди. Времето за разреждане до нула при минимална дължина на проводника (под 1см) е от порядъка на 5-10μс, като зависи от влажността на кожата и физиологичното състояние на човека. Ако по време на допир до сензорен бутон от този тип човекът е заземен, то времето за разреждане би следвало да бъде много по-кратко. Допълнителен фактор, който трябва да бъде взет под внимание е дължината на свързващите проводници. Колкото са по-дълги те, толкова е по-голям капацитетът на входа на микроконтролера. Също така схемата става по-чувствителна към външни смущения (например минаващи наблизо мрежови кабели). Използването на предпазни диоди за защита на изводите на микроконтролера от своя страна води до допълнително увеличаване на капацитета и трябва да се вземе в предвид при избирането на паузите. За получаване на оптимални резултати е препоръчително да се правят тестове при различни условия. Това ще помогне за коректната работа на завършената схема.

Избраният за проекта контролер има отделен извод MCLR, който задължително трябва да се свърже с резистор (около 10кΩ) към плюс захранване. В противен случай ще се получават почти непрестанни рестартирания. За работата на схемата е нужен и кварцов резонатор, тъй като в микроконтролера няма вграден генератор.

Захранването се осигурява от един 12V-ов източник на напрежение. Нужното за захранване на контролера напрежение от 5V се получава чрез стабилизатора 78L05. Избран е стабилизатор с номинален ток 100мА, защото схемата има малка консумация, съставена от микроконтролера, индикаторните светодиоди и базовите токове на ключовите транзистори. Последните провеждат ток директно от захранващия източник, управлявайки светодиодните модули и следователно не товарят стабилизатора с този ток.

За управлението на схемата са използвани само четири бутона, както беше споменато по-рано. Бутонът означен с Mode на схемата служи за смяна на режима на работа. Налични са два режима – програмен и ръчен. При програмния се избират предварително направени програми за светене, а при ръчния се настройват шестте ШИМ генератора. Този бутон служи също за запаметяване на текущите настройки. Задържането му за повече от 3 секунди води до запаметяване на режима, програмата и коефициентите на запълване на шестте ШИМ генератора. Завършеното запаметяване се известява с еднократно примигване на двата светодиода, показващи линията, която се настройва в момента. Бутонът цвят служи за избор на цвета, който да бъде настроен в ръчен режим. Всяко натискане на бутона сменя цвета, като се минава през трите цвята на всяка линия и това се индицира постоянно с трицветния индикаторен светодиод и двата светодиода показващи линията, която се настройва. Задържането на бутона цвят за повече от 3 секунди води до зареждане на вече запаметените настройки, като успешното зареждане се индицира с последователно примигване на двата светодиода за линия. Ако бутонът бъде задържан за повече от 1 секунда, но по-малко от 3, индикаторните светодиоди биват изключени. Това може да се използва в случай, че дразнят потребителя. Включването им става чрез задържане на този бутон за същия период или краткото му натискане, което води до смяна на цвета за настройка. Бутоните увеличаване и намаляване се използват за смяна на програмата на светене в програмен режим и промяна коефициента на запълване на избрания ШИМ генератор в ръчен режим.

Програмираните в микроконтролера режими на светене са 32 на брой, като е наличен още един (първият), който е един вид режим на покой. При него нито един светодиоден модул не свети. Останалите режими включват постоянно светене на различни цвето в двете линии (може всяка линия да е с различен цвят), плавно сменящи се цветове с използване на ШИМ генераторите и един режим (последният), който включва почти всички възможни цветови комбинации и има голяма продължителност (около 10 минути). Неговата сложност е колкото на всички останали режими взети заедно. За да не обяснявам с думи всеки режим по отделно предлагам цветна таблица, даваща ясна представа за всички режими без последния. При режимите, използващи ШИМ генератора са показани увеличаванията и намаляванията на силата на светене на отделните цветове.

color-programs

На следващите две снимки можете да видите сглобената схема (за съжаление на експериментална платка) и след това вградена в кутия и монтирана.

16f870demo8

16f870demo7

Виждат се ясно сензорните бутони, които представляват лъскави кабърчета. Просто, ефективно и ефектно. За финал можете да видите и няколко снимки, показващи приложението, което определих на контролера, а именно фоново осветление във витрина.

16f870demo6

16f870demo5

16f870demo4

16f870demo3

16f870demo2

16f870demo1

4 thoughts on “6-канален LED ШИМ контролер за фоново осветление с PIC16F870

  1. very nice project . how can i build this project for my room?
    i want to decorate my room with light . do you have hex for this project?

  2. I am glad that you like it. It is not very difficult to build the circuit. Nevertheless it is tricky to make the sensor buttons running reliably. In the article above I wrote that when I started the finished product for the first time it was not responding to the the buttons. I had to fine tune some parameters in the source to make it running fine. This depends mostly on the length of the wires connecting the buttons to the PCB as well as their placement in the box. This is one reason that I did not provided HEX for this project. I also realized that this is not a bad project which can easily be converted to commercial product and I don’t like that. So I decided not to provide the HEX or source. A few months ago I also found that PIC16F870 is discontinued.

    If you really want to build something simple and looking nice you can try another project from my web site. You can find it here: https://penoff.wordpress.com/2009/01/07/led_rgb_light_effects_pic12f629/

  3. i wrote to you because i have one piece of 16f870 and i don’t know for what i will use .
    if you don’t share your hex, i understand , for me was an opportunity to decorate my room in a different mode like regular light effects build on on single little pic .

  4. You are not the first one asking me for hex or source of this project. I would be happy to see this project used in different places by some enthusiasts but I am worried that someone will use it for commercial purposes and I don’t want that. This is why I am not sharing the code or hex for the microcontroller. Even the other project with PIC12F629 can be used for commercial products but at least I spend less than two days writing the source for it while it took me almost two weeks to finish and clear all bugs for the project with PIC16F870.

    I am really sorry for disappointing you but I would like to keep the code and hex for personal use only.

Your comment:

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s