Безконтактний Регулятор Яскравості

Автор Golem, 18.03.2010 21:22:28

« попередня тема - наступна тема »

0 Користувачі і 1 Гість дивляться цю тему.

Golem

Зробив на днях до свого Тавроджипа таку от примочку. Дозволяє регулювати яскравість підсвітки панелі приладів. Розмішується глибоко під пластиковою обшивкою і його ззовні не видно. Тим не менше, свою функцію він виконує на відмінно. Короткий опис:

---

Безконтакний регулятор Яскравості (БРЯ) це невелика плата із ємнісним слайдером розміщеним на одній стороні та компонентами на іншій яка дозволяє ругулювати яскравість лампи накалювання. Мікропроцесор вимірює положення пальця на слайдері та виставляє яскравість лампи відповідно до неї. Позиція пальця може відслідковуватися через більш як 4мм пластику і відповідно до неї регулюватися потужність навантаження в широких межах. Пристрій може бути заінстальований за допомогою двостороннього скотчу в інстуючу конструкцію без додаткових отворів чи елементів кріплення.

Вид зі сторони слайдера


Вид зі сторони елементів


Технічні характеристики:

-   Вхідна напруга............................7.5V - 30V
-   Вихідний Струм...................0A – 10A
-   Рівні Яскравості...........................255
-   Вихідна Частота.......................1200 Hz
-   Період запису в память..............10s
-   Товщина Оверлею....................1mm...4mm
-   Розміри плати.....................40mm x 12mm

БРЯ виставляє щілинність PWM у межах від 0 до 255 в залежності від положення пальця на слайдері. Якщо яскравість не змінювалася протягом десяти секунд то вона зберігається в памяті і виставляється під час наступного ввімкнення.

Яскравість може бути змінена двома шляхами. Позиція пальця на слайдері напряму відповідає вихідній яскравості. Це означає якщо ми поставили палець на початок слайдера то одразу ж одержимо нульову яскравість на виході. Якшо на середині – половину яскравості. Якщо в кінці – повну яскравість. Другий спосіб зміни яскравості полягає в доторканні до слайдера і плавній зміні позиції пальця.

Логічне питання: як такий маленький транзистор без радіатора може регулювати таке потужне навантаження? Відповідь: "Тому що ми використовуємо PWM". Широтно-Імпульсна Модуляція (PWM), це дуже ефективний шлях для задання рівня вихідної потужності з малими втратами.



Рівень вихідної потужності залежить від співвідношення часу вмикання і вимикання.  Потужність витрачається лише на перехідні процеси між цими двома станами.

Схема присртою показана на нижче



Вхідна напруга поступає на конектор J1 і далі йде на лінійний регулятор U2. Діод D2 захищає регулятор від напруги зворотньої полярності. Регулятор забезпечує стабільну напругу 5V для живлення мікропроцесора U1. Мікропроцесор вимірює ємність елементів слайдера Slider1....Slider8 і по цьому визначає позицію дотику. Програмний блок CSD з математичним апаратом усереднення сигналів від сусідніх сенсорів забезпечує 255 рівнів яскравості. R1 є резистором зворотнього звязку сігма-дельта модулятора. C2 це інтегруючий конденсатор для нього.

Транзистори Q1 та Q2 формують схему керування навантаженням. Транзистор Q1 ввімкнений по схемі верхнього ключа, ним керує транзистор Q2. Топологія верхнього ключа вибрана по причині необхідності керування заземленими навантаженнями, які часто зустрічаються в автомобілях. Внутрішні підтягуючі до плюча резистори всередині мікроконтроллера U1 обмежують струм бази для транзистора Q2. Коли транзистор Q2 відктритий тоді затвор транзитора Q1 зєднаний з землею і він є відкритий також. Коли транзистор Q2 є закритий тоді затвор транзистора Q1 підєднаний до витоку через резистори R2 та R4, тому транзистор Q1 є закритий. Резистори R2 і R4 визначають щвидкість закривання транзистора Q1, тобто потужність розсіювання на ньому. Менші значення цих резисторів завжди кращі, але їх зменшення обмежується граничними потужностями розсіювання на резисторах та Q2.  Світлодіод D1 призначений для моніторингу роботи пристрою без підєднання зовнішнього навантаження.

Схема підєднання пристрою показана нижче



Джерело живлення з напругою 12V показано для прикладу. Будь-яка напруга в дозволеному діапазоні може бути підєднана замість неї.

Пристрій змонтовано на двосторонній друкованій платі, яка показана нижче 1:5.






Всі компоненти розміщені на нижній стороні ДП. Лише вісім перехідних отворів зєднують елементи слайдера з мікроконтроллером.

Компактний дизайн дозволяє розмістити пристрій під паненню автомобіля. Кріплення може здіснюватися за допомогою двостороннього скотчу або клею. Ззовні на панель наклеюється декоративна прозора наклейка для візуального розпізнавання місця розташування регулятора та для кращого намацування в темноті.

Вид під панеллю


Вид ззовні


Код програми дуже простий, містить лише одну головну функцію.


void main(void)
{  
   //--> Initialization
   PWM8_WritePulseWidth(bBrightness);            // Read stored in ROM value
   PWM8_Start();                                 // Start PWM8
   
   Drive_1_GlobalSelect_ADDR |= (Drive_1_MASK | Drive_2_MASK);    // Connect pin to bus
   
   M8C_ClearWDTAndSleep;              // Clear Watchdog and Sleep Timer
  M8C_EnableWatchDog;              // Enable Watchdog
   M8C_EnableGInt;                               // Enable Global Interrupts
   
   TX8SW_Start();                                // Start Debug Information transmitter
   
  CSDADC_Start();                                // Start CSD user module
  CSDADC_SetDefaultFingerThresholds();           // Initialize filger thresholds
  CSDADC_InitializeBaselines();                  // Initialize sensors baselines
 
   // --> Non-ending loop is here
   while (1)
   {  
     CSDADC_ScanAllSensors();                     // Scan All sensors
   CSDADC_UpdateAllBaselines();                 // Update all baselines for them
   
     //--> Position calculation
     if(CSDADC_bIsAnySensorActive())              // Check for touch
       {  
        wPosition=CSDADC_wGetCentroidPos(1);     // Calculate touch position
      
       if (wPosition != 0xFFFF)                 // Check for error
          {
           if (wPosition > RESOLUTION) wPosition=RESOLUTION; // Check for over range
         
           bWriteFlashFlag=1;                            // Set Flash write flag
         
           PWM8_Stop();                                  // Stop PWM8
           bCurBrightness=(BYTE)wPosition;               // Convert position to BYTE
           PWM8_WritePulseWidth(bCurBrightness);         // Write new brightness
           PWM8_Start();                                 // Start PWM8
         } // end if wPosition
      } // end if SensorActive

   //--> Flash Writing
    if (bWriteFlashFlag != 0)             // Check is writing to flash new brightness
      {
       bWriteFlashFlag++;            // Increase flash flag that add some delay
      
       if (bWriteFlashFlag == SAVETIME)        // Check for write condition
          {
          bWriteFlashFlag=0;              // Do not write to flash next time
         
          fwStruct.bARG_BlockId = 127;    // Block Id to write, use last block
          fwStruct.pARG_FlashBuffer = (char *)(&bCurBrightness);
          fwStruct.cARG_Temperature = 20;                          

          bFlashWriteBlock(&fwStruct);                  // write new brightness
         }
      } // end bWriteFlash
      
    //--> Transmit Data
    TX8SW_PutCRLF();                     // Start condition
      
    TX8SW_Write((char *)(&CSDADC_waSnsResult), CSDADC_TotalSensorCount*2);   // RawCounts
    TX8SW_Write((char *)(&CSDADC_waSnsBaseline), CSDADC_TotalSensorCount*2);   // Baselines
    TX8SW_Write((char *)(&CSDADC_waSnsDiff), CSDADC_TotalSensorCount*2);     // Differences
      
    TX8SW_PutChar(0xFF);                   // Stop Conditions
   TX8SW_PutChar(0xFF);
   
    M8C_ClearWDTAndSleep;                                 // Reset WatchDowg
  } // end while(1)
} // end main function


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

Чутливість може бути змінена шляхом модифікації параметра "Finger Threshold" в CSD модулі. Мікропроцесор посилає рав дані, бейслайни та діференси через пін P1[0] (SDA точка). Стандартний UART TX може приймати дані, швидкість передачі 115200 baud, 8 bit даних, no parity. Програма "Multichart" є рекомендованою для використання при ввідлагодження. Тим не менше будь-яка інша відповідна програма може бути використана..

Покрокова інструкція першого ввімкнення:
-   Підєднати 12V живлення до J1
-   Виміряти напругу на C5.Повинно бути 5V. якшо ні – слід перевірити полярність і правильність монтажу.
-   Виміряти анпругу на C2. Повинна бути 1.2V. Якшо ні – перевірити чи запрограмований мікроконтроллер та правильність монтажу.
-   Підєднати до піна P1[0] (точка SDA) до входу UART RX використовуючи зовнішній транслятор рівнів або USB-UART місток.
-   Запустити програму "Multichart" або будь-яку іншу підходящу утиліту.
-   Рав Дані повинні бути в діапазоні 300...3000. Бейслайни повинні бути рівними рав даним а діференси - нуль



-   Шум рав даних повинен бути не більше 10 точок від піку до піку
-   Тепер слід доторкнутися до слайдера. Відношення сигнал.шум повинно бути в межах 5...15



Якшо діференси значно вищі за це значення слід збільшити параметр Finger Threshold. Якшо діференси значно нижчі тоді слід збільшити роздільну здатність та час сканування. Більше деталей про тюнінг чутливості можна дізнатися з документації до CSD.

Відео на YouTube що демонструє роботу ємінсного регулятора яскравості.



Дизайно повністю Open Source. Скачати всі потрібні файли можна тут:

Проект
Плата
Опис на Українській
Опис на Англійській

Думаю якби занести на якийсь автобазар чи мебельний магазин (там теж 12В лампочки в шафи встроюють) розійшлися б як пиріжки. Інше застосування - регулювання швидкості обертів вентилятора пічки, дуже часто дискретні позиції не відповідають бажаному.
Дігери всіх країн єднайтеся!

inkognito

слів нема...красиво! а як до тої цяці прикрутити ше автоРОГУЛЮвання яскравості у залежності від рівня зовн. освітлення?
Resistance is futile

YserL

А хто розробник? Доречі файна ідея викладати радіосхеми перевірені у дії. Від мене +.
Вартість екземпляру без роботи:
cy8c21434 5.82$
IRF5210 1.74$
BC817 0.04$
LM78M05CT 0.45$
плата 5.68к.дм - 0.15Є
=8.05$+0.15Є=66uah
Основна вартість пристрою мікропроцесор)
По 120-150 грн бралиб як пирішки

Golem

До Інкогніто:
- Так, це зовсім неважко. Але в автомобілі освітленість поняття дуже відносне, часто міняється в залежності від обставин та й сприйняття в кожного своє. Тут краще стабільно самому виставляти. А от регулятор пічки зі зворотнім звязком зробити зовсім не тяжко :)

До ЮзерЛ:
Ціни троха завищені. Процесори недавно купували 100 штук по 2 бакси в китаї.
Транзистор IRF5210 троха дорогуватий, але ставив який був під рукою. На його місце підійдуть і значно дешевші аналоги по 2-3 гривні. Тобто навар може бути ще більший.

Масове виробництво не проблема. З задоволенням цим би зайнявся, проінвестував свої гроші. Правда потрібно людину, яка серйозно займатиметься дистрибюцією. Тоді можна було б починати, наприклад з партії 100 штук. Також для масового виробництва додав би на плату мініатюрний змінний резистор для плавного регулювання яскравості при роботі з пластиком різної товщини. Щоб людина купила собі, накрутила скільки їй потрібно і тішилася :)

А покишо най їздить в мене і ше кількох людей, подивимся як покаже себе в експлуатації.
Дігери всіх країн єднайтеся!

zelja

Суперова шняга можна пристроїти до любого девайса :) 
від мене теж +

Golem

Дякую. Додав ше дві фотки як воно в машині виглядає. І замовив ше 10 платок. Можна буде спробувати кудись занести, подивимся як підуть. На нових платах вже буде резистор для регулювання яскравості.
Дігери всіх країн єднайтеся!

YserL

Попитаюся допомогти із реалізацією.

t309

Суперова штука, можна ще фотодіод туди втулити щоб від освітленості яскравість мінялась

Golem

Зробив 10 штучок. Додав змінний резистор для регулювання чутливості при різній товщині пластику. Причому використав один хитрий прийом. Під час ввімкнення пристрій вимірює опір резистора і згідно нього виставляє значення чутливості. Далі зберігає це значення в флеш память. Тепер користувач при вимкненому живленні може вивернути резистор в одне з крайніх положень. Процесор побачивши це не буде приймати його за нове значення чутливості і користуватиметься збереженим. А якшо потрібно знову шось порегулювати - просто виводимо його з крайніх положень і все.

Шо це нам дає? Змінний Резистор - ненадійний елемент. В процесі експлуатації він може втратити контакт, чи просто зміститися від вібрації. Тому вивівши його в крайнє положення де його опір завжди стабільний ми значно знижуємо ймовірність відмови.

ПС: правда резистори приїхали троха більші ніж закладалося, прийшлося кидати дротик :(
Дігери всіх країн єднайтеся!

228 Гості, 0 Користувачів