Beschermen van IO pinnen PIC/AVR...

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • craio
  • Registratie: November 2002
  • Laatst online: 09-06 15:16
Ik probeer zoals zovele een eigen domotica print te maken, het 'hart' ervan is een dsPIC33EP256MU806.
Nu kan ik daar op zich al een topic aan wijden maar mijn vraag is de volgende, hoe ga je het 'best' te werk om de ingangen van die µc te beveiligen tegen het feit dat de bekabeling naar de drukknoppen lang zal zijn?
Na verschillende zoekacties via google kwam ik uiteindelijk tot 2 min of meer artikels tegen die relatief compleet zijn omtrent deze kwestie:
Met name een digikey item en een blog.

Afweging tussen kosten en bescherming, kwam ik tot Afbeeldingslocatie: http://i.imgur.com/YJ3og8L.jpg
(min of meer gelijk aan eindresultaat in digikey link).
In x naar de PIC, SW x naar een drukknop die dit naar massa trekt. Dit wordt dan een stuk of 16 keer herhaald.

Maar als ik aan die info nog toevoeg wat ik op andere plaatsen las (link niet bewaard), dan:
- Moet die 1k weerstand voor die twee diodes komen ipv erachter (en dan die 10ohm niet).
- Is met die dioden werken eigenlijk niet zo goed (stroom geleiden naar de voedingsbron kan zorgen voor een daling van de spanning als dit teveel wordt, niet onmogelijk gezien het aantal inputs)
- De dioden opstelling gebruik je bij voorkeur enkel voor transients, als je een 5V toestel op die manier wil inlezen is dit niet goed. (bvb ipv een drukknop hangt er een int pin aan van een 5V IC).

Dus kort samengevat zijn mijn vragen:
- Wat gebruiken jullie voor bescherming van de inputs?
- Voor 3V3 en 5V logica te communiceren (uitgaande van niet 5V tolerant inputs), hoe doe je die conversie?

Acties:
  • 0 Henk 'm!

  • LED-Maniak
  • Registratie: Oktober 2003
  • Nu online
- 1k weerstand er voor plaatsen inderdaad. Dan limiteer je de stroom die door de diodes kan lopen in het geval van een te hoge input spanning. Afhankelijk van waar je input verder naar toe loopt, dimensioneer ik hem vaak groter.

- Als je diodes de stroom gaan leveren, dan gaat je Vreg bijstellen. Je moet er dan zeker van zijn dat het hele systeem meer verbruikt dan dat de diode gaat leveren.

Van 3V3 naar 5V en visa versa ligt aan de IC's en de datasnelheid. Sommige 5V IC's zien 3V3 prima als een 1. Van 5V naar 3V3 gebruik ik vaak een weerstandsdeler. Mooier is nog een level translator/buffer van een duppie of een fet.

Mitsubishi externe temperatuur sensor (Home Assistant compatible): V&A - ClimaControl - Ook voor Panasonic & LG.


Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Meestal doe ik geen bescherming, microcontrollers kunnen best wel wat hebben. Met lange lijnen naar een drukknop een condensator bij de input, en mogelijk ook een weerstand inderdaad.

En wat Maniak zegt over 3.3V-5V, al blijft mijn favoriete oplossing gewoon alles op 3.3V draaien als dat mogelijk is.

Acties:
  • 0 Henk 'm!

  • craio
  • Registratie: November 2002
  • Laatst online: 09-06 15:16
@LED-Maniak: De weerstand erna ook laten staan? Of is één ervoor genoeg?
Hm, als de bron van die stroom hetzelfde is als het 'doel' ervan is er dus geen probleem?

@furby-killer: Inderdaad misschien beter om te voorkomen dan te genezen. Ik probeer het schema aan te passen, sommige componenten kunnen ook op 3V3 werken maar voor andere moet ik een alternatief zoeken.

Acties:
  • 0 Henk 'm!

  • RocketKoen
  • Registratie: December 2001
  • Laatst online: 08-10 21:08
Waar probeer je precies tegen te beveiligen?
Een dun signaal kabeltje binnenshuis, zal echt niet zoveel signalen oppikken dat het je IC kan beschadigen. Je hebt al genoeg demping van de weestand van je draad.
Je hebt wel een kans dat je zoveel ruis oppikt, dat je signaal fouten gaat geven.
Hier zijn verschillende oplossingen voor te verzinnen.
) Geisoleerde kabel
) 2e kabeltje om de 1e, en dan beide aansluiten op een verschilversterker schakeling (bijvoorbeeld UTP)
) Digitaal signaal. Dus ipv 5V voor als je het knopje indrukt en 0V voor als je dat niet doet, het signaal versturen als een serie van pulsjes. En dan foutcorrectie toepassen bij de ontvanger.

Maar voor je aan dit alles begint. Kijk eerst maar eens hoeveel ruis je in de praktijk op je lijn krijgt. En of het dus uberhaubt zinvol is om er wat aan te doen.

TheS4ndm4n#1919


Acties:
  • 0 Henk 'm!

  • craio
  • Registratie: November 2002
  • Laatst online: 09-06 15:16
Diameter van de kabel is 0.5mm² of 0.8mm² (ligt nog niet vast) maar geen twisted pairs.
Als test heb ik een eind terug eens gewoon 30m van dergelijke kabel rechtstreeks op een pin aangesloten met een drukknop op het einde. Zo nu en dan (paar keer per dag) gaf de µcontroller een interrupt omwille van die pin. Dus een filter is het minimum.

Digitaal signaal vereist ofwel intelligentie bij de drukknop of hoger voltage bij de µcontroller maar is misschien haalbaar, ik zal het eens grondiger bekijken.

Acties:
  • 0 Henk 'm!

  • RocketKoen
  • Registratie: December 2001
  • Laatst online: 08-10 21:08
craio schreef op maandag 25 maart 2013 @ 09:37:
Diameter van de kabel is 0.5mm² of 0.8mm² (ligt nog niet vast) maar geen twisted pairs.
Als test heb ik een eind terug eens gewoon 30m van dergelijke kabel rechtstreeks op een pin aangesloten met een drukknop op het einde. Zo nu en dan (paar keer per dag) gaf de µcontroller een interrupt omwille van die pin. Dus een filter is het minimum.

Digitaal signaal vereist ofwel intelligentie bij de drukknop of hoger voltage bij de µcontroller maar is misschien haalbaar, ik zal het eens grondiger bekijken.
Een condensatortje tussen je signaal lijn en VDD?
Hoe groot mag je zelf uitzoeken. Te klein en het doet niks. Te groot en je moet de knop een eeuw indrukken voordat het iets doet.

Als digitaal te lastig wordt:. Je kan wisselspanning op de lijn zetten (een exotische frequentie). En dan een LC filter op de lijningang.

TheS4ndm4n#1919


Acties:
  • 0 Henk 'm!

  • Hans1990
  • Registratie: Maart 2004
  • Niet online
Als je het enkel voer drukknoppen hebt; je sluit een pull-up bij je uC naar de knop (kan ook intern, zijn vaak 100k ofzo), en de schakelaar trekt dat signaal naar GND. De maximum stroom die van VCC naar GND dan gaat lopen is zeer beperkt, want zo'n pull-up is vaak groot, dus wat dat betreft kan er weinig stuk gaan.

Als je per ongeluk een ext. spanning aanbiedt, kan je een serie weerstand opnemen. Moet je wel uitkijken dat als je dan een spanningsdeler vormt als je de pull-up weer direct op de pin zet, dus mogelijk moet je die voor de serieweerstand plaatsen.

De clamping diodes zitten vaak ook in een uC, maar zijn niet erg sterk o.i.d. Liever niet teveel spanning op een pin van een uC zetten dus.

Buiten dat, zolang er weinig stroom loopt kan er weinig stuk gaan. Serie weerstanden beetje hoogohmig houden en je kan beste pieken verwerken..

Anti-dender lijkt me kwestie van condensatortje neerzetten, danwel software matig niet te snel je knop uitlezen.. (b.v. : knop is nu ingedrukt, 50ms/100ms/250ms later nog? ok -> doeActie() )

[ Voor 8% gewijzigd door Hans1990 op 25-03-2013 21:48 ]


Acties:
  • 0 Henk 'm!

  • Piepersnijder
  • Registratie: December 2009
  • Niet online
[quote]Hans1990 schreef op maandag 25 maart 2013 @ 21:46:

Buiten dat, zolang er weinig stroom loopt kan er weinig stuk gaan. Serie weerstanden beetje hoogohmig houden en je kan beste pieken verwerken..
/quote]

En wat dacht je van elektrostatische ontlading (ESD) ?

Acties:
  • 0 Henk 'm!

  • Hans1990
  • Registratie: Maart 2004
  • Niet online
Een chip heeft vaak ESD protection built in voor een paar kV, soms extra als het b.v. pinnen zijn die vaak voor end-user exposed zijn (denk aan USB data lijnen). Dat is dan expliciet aangegeven.

Evt. kan je ESD diodes toevoegen, en probeer je ESD ontladingen via shields af te voeren.

Wat je ook nog hebt is een extra serieweerstand en misschien een condensator voor anti-dender. Dus voor ESD ben ik niet heel erg bang voor in dit geval.

Acties:
  • 0 Henk 'm!

  • Flake
  • Registratie: Februari 2001
  • Laatst online: 01-11-2024
Het antwoord wat je zoekt zijn ESD diodes en een filtertje. ESD beschermt tegen de statische klappen, staat een blogpost over in mijn sig. Vooral bestemd voor installatie en werkzaamheden, als het eenmaal hangt hebben ze geen nut meer. Ze hebben helemaal geen nut als je het printje assembleert zonder antistatische werkplek overigens. Het filtertje haalt interferentieflanken eruit die jouw microcontroller als een onterechte low or high kunnen interpreteren.

Het schemaatje wat je hebt gepost voldoet prima, zo zou ik het ook doen. C301 staat geen waarde bij, maar als je daar 100nF keramisch voor kiest hou je de boel wel stabiel. Hou er wel rekening mee dat die R301 icm je pullup/pulldown een spanningsdeling maakt. Je zou met een multimeter moeten checken of de spanning aan de input wel laag of hoog genoeg wordt om in het gedefineerde gebied te komen. Evt moet je de pullup/down verhogen en R301 verlagen.

Debounce zou ik per definitie softwarematig doen, dat is tenslotte goedkoper omdat je geen onderdelen nodig hebt. Als je een hoog of laag detecteert (afhankelijk wat jouw initial state is, wat je defineert met een weerstandje naar VCC of GND) 10ms delay instellen en nog een keer checken of hij nog steeds hoog of laag is. Die 10ms delay gebruik je dan zodat de switch stabiel kan worden en de bounce voorbij is. Twisted pairs of afgeschermde kabels voor gelijkspanning is helemaal niet nodig, twisten zal in dit geval ook niks oplossen.

Overigens heb je echt geen 2 inputs nodig voor een switch, 1tje is voldoende. Met de wet v. Ohm kun je de maximale stroom door die schakelaar instellen, voor microcontroller toepassingen pik ik meestal een halve milliampere (500uA). Als je dit 16x herhaalt zou ik een mux gebruiken, bespaart je een hoop inputs!

[ Voor 65% gewijzigd door Flake op 27-03-2013 09:20 ]


Acties:
  • 0 Henk 'm!

  • craio
  • Registratie: November 2002
  • Laatst online: 09-06 15:16
Hm, dus in feite is wat ik toonde al voldoende, hoogstens mss nog ESD diodes (TVS ofzo noemt dit dacht ik).

@Flake:
C301, ging ik nog experimenteel uitzoeken. Ik had al met 100nF getest, maar leek me net niet genoeg.
Debounce ging ik eerst puur hardware proberen maar de gebruikte PIC heeft 8 timers ofzo, dus kan er wel één debounce doen.
Ik gebruik maar één input per switch, er staan er gewoon twee getekend omdat de diode ic 2 paar bevat.
De bedoeling is een stuk meer io dan die 16, ik gebruik MCP230017 voor extra IO.

Voorlopig ziet de print er zo uit. Afbeeldingslocatie: http://i.imgur.com/r4PvtVN.png
Bovenaan zitten er 8 IO's met die voorgestelde schakeling, de overige komen op een tweede pcb.

Bedankt iedereen voor de tips/info!

Acties:
  • 0 Henk 'm!

  • Flake
  • Registratie: Februari 2001
  • Laatst online: 01-11-2024
Je hebt niet eens een timer nodig daarvoor, je kunt gewoon de delay-routine van de PIC compiler gebruiken of een kort for lusje, mits je dat in je mainloop uitvoert. Succes ermee.
Pagina: 1