Novinka:Dvojitý schodišťový spínač s MSP430G2112
(Kategorie: Konstrukce)
Napsal majkls
20.05.2017 00:00

Protože již delší dobu pozoruji nedostatky schodišťového spínače, který jsem koupil kdesi v obchodě (mimo jiné 2x odešel, co odešla žárovka - vyhodila jistič a vzala s sebou schodišťový spínač), tak jsem se rozhodl pro vlastní konstrukci.

Mikroporocesory jsou dnes poměrně levná záležitost a tak není důvod se jim vyhýbat v různých konstrukcích. To platí i o mém schodišťovém spínači. Práce je pak poměrně elegantní - lze například naprogramovat délku svícení v závislosti na délce stisknutí tlačítka nebo Vypnutí při opakovaném stisku. A nemusíte kvůli tomu měnit součástky. Což je jistě nesporná výhoda. Celá konstrukce lze předělat (po výměně několika odporů a použití jiných relátek) i na provoz s 24V napájením. Jedinou nevýhodu konstrukce lze spatřovat v jejích rozměrech (relátka jsou vysoká), takže se asi nebude vejít do každé krabice.
Schéma je celkem jednoduché, ale protože jsem chtěl, aby mělo minimum věcí šanci odejít, použil jsem relé na 230V. Zapojení je usměrněno jednocestně, protože při usměrnění Graetzovým můstkem se relátka příliš hřála (asi proto, že nejsou určena na střídavý provoz) a bylo riziko, že by mohla odcházet.



Mikroprocesor je napájen přes relátka, aby nebylo třeba používat výkonové odpory. Díky mechanickému kontaktu relátek je během nečinnosti celá elektronika odpojena od sítě a je tedy minimalizováno riziko, že bude odcházet během napěťových špiček. Také díky tomu v klidu nic nespotřebovává. Většinu součástek jsem použil ze šuplíku. Tranzistory Q2 a Q4, které spínají relé jsou klasické z polomostu počítačových spínaných zdrojů, v mém případě 2SC4106. Funguje to s nimi bez problémů. Jediná významnější investice je mechanické relé 230V. Na vstupech jsou rezistory, vždy 2 do série, aby se zlepšila odolnost vůči vyššímu napětí a blokovací kondenzátory - proti špičkám na vedení.

Popis funkce
Při stisku tlačítka se objeví na relé napětí. Protože tranzistory Q1 a Q3 jsou normálně zavřeny, může se Q2 nebo Q4 otevřít. Tím začne procházet proud a napájet mikroprocesor. Zároveň relé přitáhne a tím si zajistí napájení i bez držení tlačítka. Mikroprocesor pak změří přes vstupní port P1.2 nebo P2.6 délku stisku a podle toho odpočítá čas do vypnutí. Ve chvíli vypnutí otevře Q1 nebo Q3 a tím dojde k zavření Q2 nebo Q4. Relé odpadne a přeruší přívod napětí.
Program je jednoduchá smyčka. Proměnnou power delay jsem musel přidat, aby se stihnul nabít napájecí kondenzátor. Proměnné off_time slouží jako zpoždění pro uvolnění tlačítka pro funkci vypnutí.

Zdrojový kód pro MSP430G2112:


#include <stdlib.h>#include <stdint.h>#include <msp430.h>/* pauza pro nabiti kondenzatoru */
#define POWER_DELAY_TOP 50000
/* pauza mezi ON/OFF funkci tlacitka */
#define SWITCHOFF_DELAY 5000

int main(void){
        volatile uint32_t time1 =0, time2 = 0, power_delay = 0;
        volatile unsigned off1_time = 0, off2_time = 0;
        WDTCTL = WDTPW|WDTCNTCL;
        P1DIR = 0xfb;
        P2DIR = 0xbf;
        P1SEL = 0;
        P2SEL = 0;
        P1OUT = 0;
        P2OUT = 0;
        while(1){
                /* resetovat watchdog */
                WDTCTL = WDTPW|WDTCNTCL;
                /* kvuli radnemu nabiti kondiku */
                if(power_delay < POWER_DELAY_TOP){
                        power_delay++;
                }
                /* vypinac 1 */
                if(P1IN & 0x04){
                        if(off1_time == SWITCHOFF_DELAY){
                                time1 = 0;
                        }else{
                                off1_time = 0;
                                if(time1 == 0){
                                        time1 = SWITCHOFF_DELAY;
                                }else{
                                        time1 += 30;
                                }
                                P1OUT = 0x0;
                        }
                /* povolit vypnuti */
                }else if(time1 > 0){
                        if(off1_time < SWITCHOFF_DELAY){
                                off1_time++;
                        }
                        time1--;
                        P1OUT = 0x0;
                /* prodleva mezi vypnutim a moznym opetovnym zapnutim */
                }else if(time1 == 0){
                        if(off1_time > 0)
                                off1_time--;
                        /* vypnout rele, ale ay mame nabitej kondik */
                        if(power_delay == POWER_DELAY_TOP){
                                P1OUT = 0x01;
                        }
                }

                WDTCTL = WDTPW|WDTCNTCL;
                /* vypinac 2 */
                if(P2IN & 0x40){
                        if(off2_time == SWITCHOFF_DELAY){
                                time2 = 0;
                        }else{
                                off2_time = 0;
                                if(time2 == 0){
                                        time2 = SWITCHOFF_DELAY;
                                }else{
                                        time2 += 30;
                                }
                                P2OUT = 0x0;
                        }
                /* povolit vypnuti */
                }else if(time2 > 0){
                        if(off2_time < SWITCHOFF_DELAY){
                                off2_time++;
                        }
                        time2--;
                        P2OUT = 0x0;
                /* prodleva mezi vypnutim a moznym opetovnym zapnutim */
                }else if(time2 == 0){
                        if(off2_time > 0)
                                off2_time--;
                        /* vypnout rele */
                        if(power_delay == POWER_DELAY_TOP){
                                P2OUT = 0x80;
                        }
                }                              
        }
        return 0;
}

 


Dokumentace včetně zdroje zabalena zde.


Tato novinka je z -MCU-mikroelektronika
( http://mcu.cz/news.php?extend.4004 )