Railnet

Detekce obsazení pro Loconet

Elektronika | Zdeno Janeček, 21. 02. 2018 (4115 zhliadnutí)

Mám ve zvyku dělat věci jednoduše a tak trochu nadčasově. Není to nové, jen je to udělané trošku jinak. Tím myslím připojení do layoutu. Největší výhoda je, že se nemusí nic nastavovat pomocí jiného programu.Tento modul neumí nic jiné než detekovat a poslat správu, o změně obsazení, paketem s opcode B2.

Teda je možné použít dělenou inteligenci a například shazovat návěstidlo nebo rozsvítit LEDku na panelu pomocí LocoIo. Jinak se tento modul bude dát použít na autoblok, pokud si ho někdo naplánuje, protože je dost univerzální.

Protokol Loconetu je velmi univerzální, tak jsem to využil při stavbě a tak lze modul detekce použít všeobecně, tam, kde se to bude hodit. Přednostně na automatizaci kolejiště pomocí PC nebo dělené inteligence.

Schéma

Popis součástek

Obvod je určený na trvalé připojení na Loconet, odkud bere energii na svůj chod a proto musí být navržený velice úsporně. Pokud se použijí předepsané součástky, tak je odběr proudu pod 4mA a to celkem vyhovuje. Stejně ale doporučuji provoz na paralelní sběrnici Loconet (X2), kterou celkem v pohodě obejdete všechny problémy, včetně neústupných “puristů”.

Klíčové součástky jsou procesor a stabilizátor. Pokud se použije stabilizátor na 3V3 typu drop-out, tak provoz procesoru na 8MHz / 2 je velmi úsporný a to doplňuje LM339, který má sám velmi nízkou spotřebu. Dále se musí použít tranzistory (BC337-40) s vysokým h21(min 450), které dokáží spolehlivě stáhnout zdroj proudu v Loconetu.

Na nastavování adresy slouží konfigurační lišta 2x9 jehel a ta se nastavuje pomoci zkratovacích spojek.

Je to klasika 4, 8, 16, 32, 64, 128, 256, 512, 1024 podle binární soustavy. Bity 1 a 2 se používají interně. Spojené piny znamenají zapnutá hodnota. Myslím, že trošku binární matematiky nikomu neuškodí.

Kondensátory ve vstupech jsou keramika 2.2nF a diody Zenerky 3V3, na ochranu vstupů.

Toroidy jsou namotané 2 + 6 závitu (primár, sekundár), to podle hodnoty Q toroidu. Tady je Q 1500.

Pojistka Polyswitch je na 100mA, to jen pro jistotu.

Popis funkce

Na vstupy toroidů se připojí do série detekovaná kolej a na výstupu LM339 se objeví kladný impuls při odběru. Ten se detekuje na vstupech procesoru a ten ho vyhodnotí a pošle příslušný paket s opcode B2.

Největší výhoda tohoto návrhu je absence nastavování pomocí cizího programu. Na portech B.0 až B.7 a D.6 se pomocí spojek vybere adresa, na kterou se posílají pakety s opcode B2. To znamená, že pomocí binární soustavy můžete nastavit čtveřici adres od 1-4 až po 2045-2048 včetně. Nejnižší bit LSB je na PD.6 a nejvyšší bit MSB je na PB.7. Nastavujeme teda 9 bitů, plus dva bity adresy interně, teda celkem 11-bitové adresování. Norma dovoluje adresovat až do 4096, ale na to už nemám volný pin. Ale myslím, že za cenu jednoduchého nastavování spojkami na switchi se to oplatí.

Nejmenší spolehlivě detekovaný proud je asi 750uA, teda 15V / 20k ohmů. Zakázané pásmo, kdy není jistota výstupního stavu je až do 25k ohmů, teda je nutné zabezpečit, aby parazitní odběr nikdy nepřekročil hodnotu 600uA. Hodnoty pod 600uA už obvod nedetekuje. Je tam poměrně dobře vyřešená hystereze, takže pokud není odběr přesně mezi 600 až 750uA, tak je údaj o <obsazení / neobsazení> velmi stabilní.

V zásadě by se to dalo udělat ještě citlivější, ale mam dojem, že by to už detekovalo i zapnutí konvice na čaj, což by asi nebylo dobré.

Pokud dojde k přeslechům mezi kanály detekce, musí se osadit železné plechy mezi jednotlivé toroidy, aby se obmezil magnetický přenos. Jsou tam vedeny zemnící spoje, aby se to dalo připájet. Hodně taky pomůže natočení nesouhlasně o 90 stupňů, které to obmezí.

Návod na stavbu

Mám dojem, že toto je celkem vhodné na stavbu i pro začátečníky, tak zkusím napsat návod a dám podklady na stavbu. Zkontroluje se plošný spoj na zkraty a praskliny proti ostrému světlu. Součástky se osazují od nejnižších, teda od drátové spojky až po konektory RJ12 6/6. Celkem doporučuji mikropájku, ale dá se to i pistolovkou. Zapojení nemá záludnosti, jen je třeba pracovat pečlivě.

Jediná věc, která se nedá koupit jsou namotané toroidy, ty si musíme vyrobit sami. Použije se obyčejný telefonní drát 0,5mm v bužírce, z kterého se namotá 2 + 6 závitů a osadí se hotový toroid na plošný spoj. Toroidy se dají sehnat na starých motherboardech anebo se dají koupit v e-obchodech. Soupis a popis součástek je v souborech Eagle. Pokud něco nevíte, zkuste mi napsat, pokud budu vědět, poradím.

Programové vybavení

Toto je naprosto klíčové, protože falešné ohlasy, teda hazardy dělají velké problémy při automatizaci kolejiště. Určitý počet hazardů teda musíme tolerovat a počítat s nimi. Další problém je vynechání impulsů detekce nějakou dobu, například BMF, když se měří otáčky motoru naprázdno a motor teda funguje jako generátor napětí a loko neodebírá proud. Toto vše se musí vzít do úvahy při psaní programu.

Pokud obvod detekce zjisti nad 50 impulsu, tak se usek považuje za obsazený. Maximum detekovaných impulsů za 20mS může být asi 300, proto hodnota 50 je tak nějak odpovídající. (0,02 / 0,00006 = 333).

Zapojení do layoutu

Obvod je navrhnutý trošku univerzálně a tak se to musí vzít do úvahy při zapojení do kolejiště. Tím myslím, že to není typická jednoúčelovka, takže při zapojování je nutné trošku přemýšlet.

Důležité je si uvědomit, že se to zapojuje do série s kolejí !!

Tu například zapojeni detekce 4 modulu, kde leva kolej je zapojená průběžně a pravá kolej přes detekci obsazeni. To znamená, že se 4 vývody do toroidů zapojí paralelně na vstup DCC a každý výstup toroidu se zapojí samostatně na jednotlivý modul, viz obrázek.

Poznámky

Obvod neumí nic jiné, než poslat paket s opcode B2 o obsazení nebo uvolnění úseku. Teda musí existovat další obvod, který to vyhodnotí. V současnosti pracuji na LocoIo pro Atmega, která bude umožňovat použití a napojení tohoto modulu. Přikládám RAR soubor, kde jsou podklady pro EAGLE a HEX soubor pro Attiny2313A. Původně byl tento modul plánovaný na DCC GateWay, ale přišel jsem na jednodušší řešení, tak to dávám samostatně.

 

‚--------------------------------------------------------------------------------------------------------------------
Program na Attiny 2313A, napsaný v BascomBasic, který je do 4kB kódu  FREE.
https://www.mcselec.com/index.php?option=com_docman&task=cat_view&gid=99&Itemid=54 
'--------------------------------------------------------------
'---------- At2313A na detekci obsazeni -----------------------
'--------------------------------------------------------------
'---------- 4x detekce obsazeni -------------------------------
'--------------------------------------------------------------
 'obsazeni pinů
 '1 - reset                                 20 - VCC
 '2 - pind.0 RxD Loconet        19 - pinb.7  adresa 10.bit
 '3 - pind.1 TxD Loconet        18 - pinb.6  adresa  9.bit
 '4 - pina.1 krystal 8 MHz      17 - pinb.5  adresa  8.bit
 '5 - pina.0 krystal 8 MHz      16 - pinb.4  adresa  7.bit
 '6 - pind.2 vstup detekce       15 - pinb.3  adresa  6.bit
 '7 - pind.3 vstup detekce       14 - pinb.2  adresa  5.bit
 '8 - pind.4 vstup detekce       13 - pinb.1  adresa  4.bit
 '9 - pind.5 vstup detekce       12 - pinb.0  adresa  3.bit
 '10- zem                                11 - pind.6  adresa  2 bit
'--------------------------------------------------------------
 'obvod ma 4 detekce obsazeni, proto adresa zacina kazdy 4 byte
 'teda nasobky 4 =0, 4, 8, 12, 16 ....2044
 'celkovy adresovy prostor je teda 11 bitu = 0 - 2047 adres po skocich 4 adres
 '<0xB2>, , ,   ' =<0,A6,A5,A4- A3,A2,A1,A0>, 7 ls adr bits. A1,A0 select 1 of 4 inputs pairs in a DS54  ' =<0,X,I,L- A10,A9,A8,A7> Report/status bits and 4 MS adr bits.  '"I"=0 for DS54 "aux" inputs and 1 for "switch" inputs mapped to 4K SENSOR space.  ' (This is effectively a least significant adr bit when using DS54 input configuration)  '"L"=0 for input SENSOR now 0V (LO) , 1 for Input sensor >=+6V (HI)  '"X"=1, control bit , 0 is RESERVED for future!   $regfile = "Attiny2313a.dat"           'Soubor s deklaracemi  $crystal = 4000000                     'Kmitočet krystalu v Hz  Config Clockdiv = 2                    'basic 8MHz /2  $hwstack = 24  $swstack = 16  $framesize = 16  $baud = 16666    Ddrb = 0   Portb = 255                           'portB vstupy s pull-up   Ddrd = 2                              'TxD   Portd = &B0111_1110                   'RxD = 0 a zbytek = pull-up    'premenne   Dim Acc As Byte   Dim Chk As Byte   Dim Adrl As Byte   Dim Adrh As Byte   Dim Uart(4) As Byte   Dim Rxd As Byte   Dim Wcc As Word   'nulovani Timer1 od hrany Loconetu, tady je zvlastnost prepinani PCMSK2, viz program   On Pcint2 Hrana Nosave                'preruseni od PCINT2   Pcmsk2 = 1                            'pin RxD   Enable Pcint2                         'povoleni PCINT2   'nastaveni Timer1 na casovani Loconetu, povoleni vysilani do Loconetu   Config Timer1 = Timer , Prescale = 1 , Clear Timer = 1   On Oc1a Cas1 Nosave                   '250nS x 6240 = 1560 uS   Wcc = Pinb * 8                        '250nS * 8 = 2uS, použije se adresa na rozliseni po 2uS   Ocr1a = 6240 + Wcc                    'cas priorit po 2uS   Enable Oc1a   'ziskani adresy pro paket B2 z portB.0 až B.7 a D.6 do formatu Loconet  'je to pomerne slozite, vsak norma Loconet je taky pekne sprasena  'napisane v ASM, protože na toto je Bascom prilis ukecany.   clr r21   in  r20,pinb                          'Adr 3 az A11   com r20   in  r22,pind                          'Adr 2   com r22   lsl r20   rol r21   lsl r20   rol r21   lsl r20   rol r21   lsr r20   bst r22,6   bld r20,1   Sbr r21,64                            'bit X podle normy   sts {adrl},r20   sts {adrh},r21    Enable Interrupts  '***************************************************************  'hlavni program  '***************************************************************  'tady se volaji jednotlive detekce jedna po druhe a nasledne se vyhodnocuji  'protoze do smycky vstupuji ruzne hazard impulsy a taky treba BMF,  'je nutne to pocitat a spravne vyhodnotit.  'tu to probehne 4x pro kazdy vstup detekce samostatne, podle PCMSK2  Do    Pcmsk2 = 4                           'preruseni od detekce 1    Wcc = 0                              'vynulovani pocitadla    Waitms 20                            'nascitani pocitadla detekce     If Wcc => 50 Then                   'vyhodnoceni      sbi gpior1,0                       'obsazeno     Else      cbi gpior1,0                       'neobsazeno     End If    Pcmsk2 = 1                           'pin RxD    If Gpior1.0 <> Gpior1.4 Then Gosub Prvni  '----------------------------    Pcmsk2 = 8                           'preruseni od detekce 2    Wcc = 0    Waitms 20     If Wcc => 50 Then      sbi gpior1,1     Else      cbi gpior1,1     End If    Pcmsk2 = 1                           'pin RxD   If Gpior1.1 <> Gpior1.5 Then Gosub Druha  '----------------------------    Wcc = 0    Pcmsk2 = 16                          'preruseni od detekce 3    Waitms 20     If Wcc => 50 Then      sbi gpior1,2     Else      cbi gpior1,2     End If    Pcmsk2 = 1                           'pin RxD   If Gpior1.2 <> Gpior1.6 Then Gosub Treti  '----------------------------    Pcmsk2 = 32                          'preruseni od detekce 4    Wcc = 0    Waitms 20     If Wcc => 50 Then      sbi gpior1,3     Else      cbi gpior1,3     End If    Pcmsk2 = 1                           'pin RxD   If Gpior1.3 <> Gpior1.7 Then Gosub Ctvrta   Loop  '***************************************************************  'podprogramy  '----------------------------  'priznaky se srovnaji a vysila se paket B2  'to probiha pro kazdu detekci a preruseni samostatne   Prvni:    Gpior1.4 = Gpior1.0     Reset Adrl.0     Reset Adrh.5     Adrh.4 = Gpior1.0                   '1=obsazeno / 0=neobsazeno     Uart(1) = &HB2     Uart(2) = Adrl     Uart(3) = Adrh     Gosub Vysilej   Return  '----------------------------   Druha:    Gpior1.5 = Gpior1.1     Reset Adrl.0     Set Adrh.5     Adrh.4 = Gpior1.1     Uart(1) = &HB2     Uart(2) = Adrl     Uart(3) = Adrh     Gosub Vysilej   Return  '----------------------------   Treti:    Gpior1.6 = Gpior1.2     Set Adrl.0     Reset Adrh.5     Adrh.4 = Gpior1.2     Uart(1) = &HB2     Uart(2) = Adrl     Uart(3) = Adrh     Gosub Vysilej   Return  '----------------------------   Ctvrta:    Gpior1.7 = Gpior1.3     Set Adrl.0     Set Adrh.5     Adrh.4 = Gpior1.3     Uart(1) = &HB2     Uart(2) = Adrl     Uart(3) = Adrh     Gosub Vysilej   Return  '----------------------------  'vysilani do Loconetu s kontrolu prvniho byte   Vysilej:    Chk = Uart(1) Xor Uart(2)    Chk = Chk Xor Uart(3)    Uart(4) = Not Chk    Vysi:     cbi gpior0,0                        'vynulovani priznaku vysilani     Bitwait Gpior0.0 , Set     Udr = Uart(1)      While Ischarwaiting() = 1           'splachnuti bafru prijmu       Chk = Udr     Wend      Gosub Prijmi_bajt     If Uart(1) <> Rxd Then Goto Kolize  'kontrola 1. byte     Printbin Uart(2) , 3   Return    Kolize:     Reset Ucsrb.txen                    'uvolneni pinu od funkce TxD     Reset Portd.1     Waitus 900     Set Portd.1     Set Ucsrb.txen    Goto Vysi  '---------------------------------------------------------------------------   'cekani na prijem jednoho byte od UART    Prijmi_bajt:     If Ischarwaiting() <> 1 Then Goto Prijmi_bajt        Inputbin Rxd    Return  '***************************************************************  'podprogramy od preruseni  '-----------------------------   Cas1:    sbi gpior0,0                         'povoleni vysilani do Loconet   Reti  '-----------------------------   Hrana:    push r28    push  r29    in    r29,sreg    push  r29      sbi gpior0,0                        'zakaz vysilani do Loconet      clr r28     sts tcnt1h,r28                      'vymazani citace 1     sts tcnt1l,r28     sbic pcmsk2,0                        'preskoceni detekce pri nepouzivani    rjmp Fff      lds   r28,{wcc}                     'pocitani detekce     lds   r29,{wcc+1}     adiw  r28,1     sts  {wcc},r28     sts  {wcc+1},r29     Fff:    pop  r29   !out  sreg,r29    pop  r29    pop r28   Return  '------------------------------------------------------------------------------ 
[Akt. známka: 4,33 / Počet hlasov: 6] -      + 

K tomuto článku nebol doposiaľ priradený žiadny komentár!

Pridať nový komentár