» »

Motnje v vezju in USB

Motnje v vezju in USB

roli ::

Torej imam majčekn problemček. Imam neko custom dizajnirano tiskano vezje, ki je sestavljeno iz dveh mikrokontrolerjev in ostale krame potrebne za delovanje :). Eden izmed mikrokontrolerjev je preko okoli 10m dolgega kabla (nek telefonski kabel zaščiten z folijo) povezan na dva IR senzorja. Kar ta mikrokontroler dela je, da spremlja stanje IR senzorjev s pomočjo prekinitev. Torej, ko pride do prekinitve pač naredi kar ima za narediti in pošlje ostale podatke na drug mikrokontroler. Ta drugi mikrokontroler pa je preko USB kabla (in določenega vezja, ki se skriva v Nokia DKU5 kablu) povezan na računalnik. Samo vezje pa se napaja preko zunanjega 12V napajalnika.

In sedaj zanimiv problem. Sami senzorji delujejo kot morajo z majčkeno napako. V primeru, da prižgem v sobi luč (dobra stara "neonka") se na prvem mikrokontrolerju sproži prekinitev in rezultati gredo nekam... Ampak to se zgodi samo v primeru, ko prižgem luč in je USB kabel vklopljen v računalnik. V primeru, da USB ni vklopljen se ne zgodi nič (kar je tudi prav). Zanima me kako bi se rešil tega problema, ker mi žre živce. Kar me čudi je, da do tega sploh pride. Konec koncev so senzorji digitalni.

Še tole - že v fazi testiranja sem imel podoben problem. Zadeva je bila sicer takrat malo hujša. Uporabljal sem čisto nezaščitene žice in, ko je nekdo v hiši vklopil kakršnokoli električno napravo se zgodilo to kar se dogaja sedaj. Zadevo sem takrat rešil programsko (preverjal sem, če je bil čas med aktivacijama senzorjev večji od 5ms - v primeru, da ne sem rezultate preprosto ignoriral). Nažalost pa to ne deluje več tako, da sklepam da se gre za različen problem.
http://www.r00li.com

PPG78 ::

Kako imaš povezan USB konektor, imaš oklop povezan z GND? Kako je z napajanjem vezja, en regulator za vse, ločeno, kondenzatorji 100nF, ... ?

LP, Peter

Zgodovina sprememb…

  • spremenil: PPG78 ()

roli ::

Torej USB kabel nima nobenega oklopa. Ima samo tri linije - tx, rx in GND. Ti so pac povezani na mikrokontroler in na skupni GND. Celotno vezje (oba mikrokontrolerja) napaja en regulator. Pred njim je en 10uF kondenzator in za njim se eden.
http://www.r00li.com

TESKAn ::

Če so vse napetosti, ki jih rabiš, 5V ali manj, napajaj vezje z USBja. Drugače si pa tole orenk prezakompliciral, ne bi bilo lažje uporabit USB na RS232 čipa, recimo FT232BL, enega mikrokontrolerja in teh dveh senzorjev?

Drugače pa zveni tvoj problem, da se ti na kablu do senzorja inducira napetost, ti jo pa zaznaš kot sprememba stanja senzorja. Ker prihaja do tega, ko imaš USB kabel priklopljen, je verjetno "krivec" kaka lepa zanka od napajalnika tvojega računalnika, prek USBja, prek vezja, do senzorja po GND liniji, nazaj do vezja, v napajalnik vezja in naprej v omrežje. Da se tega rešiš, preveri po prekinitvi po nekem času stanje senzorja - recimo v prekinitvi senzorja poženeš timer, ta ti prešteje recimo 2 ms, po teh dveh ms še enkrat preveriš stanje in če se ujema, pošlješ informacijo naprej - drugače jo ignoriraš. To preverjanje lahko narediš poljubno, pač odvisno od tega, kakšen je ta signal, ki ga opazuješ - če traja par ms, boš imel manj manevrskega prostora, če pa zadeva traja par 100 ms, pa ni nobene ovire, da ne bi tega preverjal recimo petkrat v razmakih po 2 ms in se potem na podlagi petih rezultatov naprej odločal.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.

roli ::

Napetosti so večinoma sicer 5V razen ena zadevica, ki je sicer vezana preko releja rabi 12V. USB napajanje mmislim, da je malenkost švohtno za releje (čeprav po testih sicer deluje vendar ne najbolje. Na enega izmed mikrokontrolerjev imam priklopljene še LCD, svetlobne senzorje, ... Tako, da en mikrokontroler nebi bil dovolj. Za komunikacijo z računalnikom pa uporabljam USB nokia DKU5 kabel. Ker lahko za razliko od ostalih zadev vežem Rx in Tx port direktno na vezje (zadeva ima namreč vgrajen priročen level converter - pa še zelo poceni je).

Tale ideja z ms ali 2 zakasnitve bi bila pa zanimiva. Bom pogledal, če je mogoče, da tole dela.
http://www.r00li.com

TESKAn ::

FT232BL ima 3,3V izhode in ga lahko priklopiš direkt na vezje. Koliko pinov pa rabiš, da ti en mikrokontroler ne zadostuje?
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.

roli ::

Ni problem v pinih toliko. Večji problem je, ker je mikrokontroler, ki skrbi za senzorje zaposlen z generiranjem 38kHz signala (za IR senzorje) in to mu požre večino časa. To pa seveda pomeni, da je neuporaben za kaj drugega.

FTDI vezje, ki ga omenjaš je sicer dobro ampak je narejeno v SMD tehniki in je dražje kot poceni Nokia DKU5 kabel (oziroma ponaredek le tega). Plus na tiskanem vezju zasede nekaj prostora.
http://www.r00li.com

TESKAn ::

Čaki, generiranje 38 kHz signala ti vzame večino časa? Kako pa delaš, vmes daš programsko zakasnitev? Te zadeve se dela z timerji, ti nima vzet kaj več kot par deset ciklov na vsako periodo, če je perioda 26 us in imaš počasen, 4 MHz mikrokontroler, ti generiranje signala pobere v najslabšem primeru 20% procesorskega časa. Če pa imaš kaj spodobnejšega, kar ima v sebi še PWM generatorje, ti pa porabi 0% procesorskega časa. No, v vsakem primeru, če ti generiranje 38 kHz signala povsem zabaše procesor, potem delaš nekaj narobe.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.

roli ::

Gre se sicer za Atmego 168 (16MHz kristal) programirano z Arduinom. Kako zadeva dela signal ne vem - po pravici povedano me niti ne briga (:D). Zadeva sicer ne vzame vsega procesorskega časa (tole sem se malo narobe izrazil) ampak se pa pozna malenkost, ko hočeš uporabljat potem hkrati še kak LCD, beeper, IR sprejemnik za daljinec, ... Poleg tega pa tako ali tako nima dovolj programskega prostora, da bi celoten program šel samo na en mikrokontroler.

Samo to niti ni problem - glede na to, da se motnja pojavi v sami prekinitvi bi se to zgodilo tudi, če bi imel samo en mikrokontroler.
http://www.r00li.com

Zgodovina sprememb…

  • spremenil: roli ()

TESKAn ::

No, kot sem rekel, poskusi s programskim filtriranjem signala, lahko daš pa tudi hardwerski filter (RC člen).
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.

roli ::

Sem preizkusil programsko filtriranje nažalost ne pomaga. Problem je, ker se mi zdi, da IR senzor sporoča naprej spremembe. Torej tak način niti ne more delovat. RC člen pa je kaj? HW način bi bil po mojem mnenju bolj učinkovit.
http://www.r00li.com

TESKAn ::

na signalno linijo iz senzorja daš upor, drugo stran upora na eno stran kondenzator in vhod mikrokontrolerja, drugo stran kondenzatorja pa vežeš na maso. Drugače je wikipedia za take stvari.
In pomagalo bi, če bi pripel shemo tvojega vezja in katere komponente si uporabil.
Uf! Uf! Je rekel Vinetou in se skril za skalo,
ki jo je prav v ta namen nosil s seboj.

roli ::

Na arduino forumu sem dobil nasvet naj med vhod iz senzorjev in GND vežem 0.1uF kondenzator. Po tistem, ko sem to naredil je problemček izginil.
http://www.r00li.com


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Puška za PC

Oddelek: Programiranje
172314 (1511) TEDY
»

DS18B20, meritve v mraziščih (strani: 1 2 )

Oddelek: Elektrotehnika in elektronika
828724 (7239) TESKAn
»

Termometer na USB vodilu (načrt, vezja, izkušnje in slike) :P (strani: 1 2 3 4 5 )

Oddelek: Elektrotehnika in elektronika
23035327 (23503) SloMusty
»

programiranje procesorja (strani: 1 2 3 48 9 10 11 )

Oddelek: Elektrotehnika in elektronika
50536531 (25932) icek
»

rs-232

Oddelek: Elektrotehnika in elektronika
121970 (1589) VolkD

Več podobnih tem