Hlavní stránka‎ > ‎

PWM spínač pro RC modely (Assembler)

 
         Vyšlo v časopise AR Praktická Elektronika č.8/2010



 

 Úvod

Zařízení PWM spínač je navrženo jako přídavný modul do RC modelů. Pomocí inteligence softwaru tento modul načítá šířku pulzu PWM signálu a výsledek tohoto načítání je použit pro logické ovládání vnějších LED. Dva páry LED jsou ovládány jako stroboskopické majáky, jeden pár LED je ovládán jako obyčejný maják a jeden pár LED je zapojen jako přední mlhová světla. Zařízení PWM se zároveň strá o napájení RC přijímače.
 

 


Základní vlastnosti

vstupní napájecí napětí             Uin = 5-35 V
výstupní napájecí napětí         Uout = 5V
výstupní proud                        Iout = 1A
vstupní napětí PWM            Upwm = 5V
výstupní napětí RB0-5              Urb = 5V/pin
výstupní proud RB0-5                Irb = 20mA/pin
výstupní napětí RB6/BC 639    Ubc = 0V
výstupní proud RB6/BC 639      Ibc = 1A


Jak to funguje

RC vysílač převede hodnotu nastavení osazeného potenciometru (obr. 1) a

pošle ji RC přijímači jako modulovaný PWM signál. RC přijímač signál z éteru demoduluje, rozdělí na příslušné kanály a představí ho jako signál PWM. Signál PWM z výstupu RC přijímače vypadá přibližně jako na obr. 2, kde ovládání je docíleno šířkou pulzu. Dále je signál PWM převeden na vstup RA0 procesoru PIC, kde je snímkován. Nejdříve program testuje konec poslední periody signálu PWM. Po jeho zjištění program každých 500 us zkontroluje logickou úroveň pulzu a při log 1 přičte vzorek do proměnné. V okamžiku, kdy pulz snímkované periody dosáhne log 0, je snímkování ukončeno. Poté se provedou stanovené povely a snímkování začne znovu. Nové snímkování začne též, když nebyl nalezen konec staré periody nebo když nebyl nalezen začátek nové periody. Z uvedené frekvence snímkování vyplívá, že program může maximálně nasbírat 50 vzorků v jedné periodě. Ve skutečnosti je nasbíraných vzorků daleko méně, protože šířka pulzu nikdy nedosahuje 100 % šířky periody – viz z. obr. 2



Povely:

Vývod PICu RB6 – mlhovky LED je zapnut vzorkem s hodnotou 4, tj. šířka pulzu 2 ms.

Vývody PICu RB4-5 – pár strobo LED, RB0-1 – pár strobo LED 2 jsou zapnuty (strobovány), RB2-3 – pár majáků LED je zapnut (přerušován) vzorkem s hodnotou 2, tj. šířkou pulzu 1 ms.

Hodnotou vzorku 3, tj. šířkou pulzu 1,5 ms jsou aktivní všechny vývody RB0-6.

Hodnota vzorku nad 4, tj. šířka pulzu je více jak 2 ms jsou všechny vývody vypnuté.

Je patrné, že při tomto vzorkování zbývá ještě určitá část pulzu periody, která je nevyužita. 

 

trvání v ms

RB0

RB1

RB2

RB3

RB4

RB5

55

1

1

0

0

0

1

55

0

0

0

0

0

1

55

1

1

0

0

0

1

55

0

0

0

0

0

1

55

0

0

1

1

1

0

55

0

0

0

0

1

0

55

0

0

1

1

1

0

55

0

0

0

0

1

0

55

0

0

1

1

1

1



 
 
 
 
 
 
 
 
 
 
 
Sestavení a oživení

Nejprve osadíme mechanické prvky jako jsou hřebínky, vodiče a konektory. Pro procesor můžete použít patici. Dále osadíme až na procesor zbylé součástky. K napájecímu konektoru K1 připojíme vstupní napájecí napětí a vyzkoušíme, zda na vývodech pro procesor VDD/14 GND/5 je stabilizované napětí Uout = 5 V. Je-li vše v pořádku odpojíme vstupní napětí od modulu a zasuneme procesor PIC16F84A do patice nebo jej zaletujeme. Po připojení programátoru (např. PRESTO od ASIXU) ke konektoru ICSP dle obr. 3 a nastavení konfigurace dle obr. 4 můžeme nahrát program do procesoru. Pak už stačí modul PWM spínač zapojit do RC modelu podle obr. 3 a je hotovo.
 

 

        Obr. 4
        Konfigurace programátoru 3FF1
        Oscilátor = XT
        WDT = off
        PWRTE = on
        CP = off
        Procesor = PIC16F84A/ 4 Mhz
 
 
 
 
 
 
 
 
 
 
Hotový program můžete stáhnout zde nebo z webu www.Aradio.cz.

Rezistory R1-R2 s hodnotou 300 ohm jsou určeny pro LED (např. L-1553EDT) 2V/10 mA.
Rezistory R2-R3 s hodnotou 90 ohm jsou určeny pro LED (např. L-538WC-FXG) 3,2V/20 mA.
Rezistory R5-R6 s hodnotou 70 ohm jsou určeny pro LED (např. L-53SWC-E/WA*G) 3,6 V/20 mA.
Vývod mlhovky spíná kostru do proudu 1 A, tzn. odpor k LED mlhovky volte podle použitých LED a napájecího napětí.
 
 
Mechanické zapojení modulu

Do volného kanálu RC vysílače osadíme dle obr. 1 potenciometr nebo vhodně vytvořené seskupení vypínačů a odporů. Tím je zajištěna ovládací část na straně vysílače.
Na straně přijímače připojíme modul PWM pínač (kon. K1A) do zdířky stejného kanálu jako jsme osadili zdířku kanálu v RC vysílači.
Modul PWM spínač je primárně navržen jak pro příjem a demodulování PWM signálu tak i pro 5 Voltové napájení RC přijímače, vše přes jednu svorkovnici ( K1A). Celkové zapojení je patrné z obr. 3. 
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 


  list    c=150,n=0,f=inhx8m,p=16F84a,r=dec,x=on,fixed

    __config  3FF1h

   include P16F84A.INC

; Takt = 4MHz

;*******************************************************************

; PWM spinac_2_4_1 by Petr Nosek 2010

;*******************************************************************

;                definice konstant

#define bank0   bcf  STATUS,RP0                      ;prepnuti do banky 0 v pameti dat

#define bank1   bsf  STATUS,RP0                      ;prepnuti do banky 1 v pameti dat

;*******************************************************************

;           definice portu

#define  ovlRA0  PORTA,0                                  ;Spínaní programu pinem RA0 (pulz ?ms)          

;*******************************************************************

;                definice uživatelských registrů

OffRam             EQU         20h                            ;První adresa paměti RAM pro PIC16F873 - 368 bajtů (20h - 7Fh)

TMP0               EQU         OffRam+1                 ;Nacítání casových smycek

TMP1               EQU         OffRam+2                 ;Nacítání casových smycek

TMP2               EQU         OffRam+3                 ;Nacítání casových smycek

IMPwidth        EQU         OffRam+4                 ;Načtená šířka ovládacího impulzu

Imp50m            EQU         OffRam+5                 ;Proměnná pro smyčku analiz

;******************************************************************************************

org       2100h                                                  ;přednast. adr. v EEPROM

;**************************************************************************

                        ; podepsání SW,Created by Petr Nosek 2010 ®

de 67,114,101,97,116,101,100,32,98,121,32,80,101,116,114,32,78,111,115,101,107,32,32,32,50,48,49,48,32,32,174,32   

;*************************************************************************

org 0h                                                              ;začátek programu

Ini                   

                        bank1                       ;přepnutí do bank 1 v pameti dat

                        movlw               255

                         movwf              TRISA                ;A0-7 jako vstup

                         clrf                  TRISB                  ;B0-7 jako výstup

                         bcf                  INTCON,GIE     ;zakazat vsechna preruseni

                         bank0                                         ;přepnutí do bank 0 v pameti dat                       

                         clrw                          ;vynulování pracovního registru

                        clrf                   PORTA             ;vynulování portu A

                        clrf                   PORTB             ;vynulování portu B

;-------------------------------------------------------------------------------------------------

Start   

                        call                   Cek40m

                        movlw               b'00000000'

                        movwf               PORTB

                       

;--------Test vstupu----------

                                              

tstin                            

                        movlw               50                                           

                        movwf               Imp50m            ;Proměnná - počet vzorků v jednom snímku

                        clrf                   IMPwidth

                       

                        btfsc                 ovlRA0              ;Test konce periody před spuštěním načítání pulzu               

                                                                                                                                         periody nové

                        goto                 tstin

 

                        btfss                 ovlRA0              ;Test začátku  pulzu PWM nové periody

                        goto                 tstin

 

analiz 

                        btfss                 ovlRA0              ;Spuštění kontroly  pulzu PWM a načtení jeho šířky

                                                                                     0,5m -sekundovým vzorkováním do proměnné  

                                                                                                                                              IMPwidth

                        goto                 kmpr1

                        incf                   IMPwidth                     

                        call                   Cek0.5m

                        decfsz              Imp50m                        ;Odčítání 25ms z šířky jedné peroidy

                        goto                 analiz

                       

;--------komparace pulzu----------              

                       

                                                                       ;IMPwidth 1 = 0,5ms

kmpr1 

                        movfw               IMPwidth          ;Test zda IMPwidth (šíka pulzu) je/není 2ms )

                        xorlw                4                                  ;Jestli, že IMPwidth je 4 výsledek XOR =0 potom Z =1

                        btfss                 STATUS,Z       

                        goto                 kmpr2               ;IMPwidth není 4

                        call                   mlhovky                                  

                        goto                 tstin     

                       

                       

kmpr2 

                        movfw               IMPwidth          ;Test zda IMPwidth (šíka pulzu) je/není 1,5ms)

                        Xorlw                3                                  ;Jestli, že IMPwidth je 3 výsledek XOR =0 potom Z =1

                        btfss                 STATUS,Z                   

                        goto                 kmpr3               ;IMPwidth není 3

                        call                   S_ML

                        goto                 tstin     

                       

                       

kmpr3 

                        movfw               IMPwidth          ;Test zda IMPwidth (šíka pulzu) je/není 1ms)

                        Xorlw                2                                  ; Jestli, že IMPwidth je 2 výsledek XOR =0 potom Z =1

                        btfss                 STATUS,Z                   

                        goto                 Start                 ;IMPwidth není 2

                        call                   strobo

                        goto                 tstin                            

                       

;--------Ovládání výstupů----------               

                       

mlhovky                     

                        movlw               b'01000000'

                        movwf               PORTB

                        Return

                       

strobo             

                        Movlw               b'00100011'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'00100000'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'00100011'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'00100000'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                       

                        movlw               b'00011100'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'00010000'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'00011100'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'00010000'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        Movlw               b'00111100'

                        movwf               PORTB

                        Return

                       

S_ML              

                        Movlw               b'01100011'

                        movwf               PORTB

                        Call                  Cek40m

                        call                   Cek15m

                        movlw               b'01100000'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'01100011'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'01100000'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                       

                        movlw               b'01011100'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'01010000'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'01011100'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'01010000'

                        movwf               PORTB

                        call                   Cek40m

                        call                   Cek15m

                        movlw               b'01111100'

                        movwf               PORTB

                        Return             

                       

;------------------------------------------------------------------------------------------------

;                                              PODPROGRAMY

;------------------------------------------------------------------------------------------------

;-------- cas = 39,2 ms ----------    

Cek40m          

                        movlw               51                   

                        movwf               TMP0

                        movlw               255

                        movwf               TMP1

                        goto                 Smycka

;-------- cas = 14,9 ms ----------    

Cek15m          

                        movlw               33                                           

                        movwf               TMP0

                        Movlw               145

                        movwf               TMP1

                        goto                 Smycka

;-------- cas = 0,49 ms ----------    

Cek0.5m         

                        movlw               3                     

                        movwf               TMP0

                        movlw               37

                        movwf               TMP1

                        goto                 Smycka

;-------------------------------

Smycka          

                        movf                 TMP0,W

                        movwf               TMP2

;       ------------------------

Smycka1

                        decfsz              TMP2,F                        ; mala smycka

                        goto                 Smycka1

;       ------------------------

                        decfsz              TMP1,F                        ; velka smycka

                        goto                 Smycka

;       ------------------------

                        RETURN

;--------------------------------------------------------------------------------------------            

                       

                 end