Odečítání pulzů z HALL sond

Dobrý den,

řeším problém s odečítáním impulzů z hallových sond (8ks) skrze MCU. Potřeboval bych nějaký šváb, záchytný registrující prvek který by fungoval tak aby nebylo možné ztratit jediný pulz. V existujícím zapojení je 74HC573N nicméně jsem buďto nepochopil jeho funkci nebo nerozumím tomu jak to provést aby se nemohlo stát že některý impulz ztratím.
Pokud chápu funkci správně -
log.1 na LE a zárověn log.0 na OE - hodnoty ze snímačů se zrcadlí na ten šváb a na výstupu je vysoká impedance
log.0 na LE a zárověn loh.1 na OE - hodnoty ze snímačů jsou ingorovány a ve švábu je zapamatován stav těsně pred negací LE a hodnoty lze číst
obě nožky v log.1 - transparetní mód (jakoby tam šváb ani nebyl) .

Pokud sem funkci pochopil správně tak si nevím rady s programem. Předem děkuji za rady.

Jaký máš procesor? Naprostá většina novějších meg(88, 162, 164, 168…) má přerušení na každém pinu. Je to tzv. “pin change interrupt”, tedy přerušení při každé změně pinu. Piny jsou ve skupinách po 8 a změna kteréhokoli z daných 8 pinů vyvolá přerušení (jedno společné pro celou osmici). Nebylo by toto vhodnější? Vzhledem k reakční době procesoru, která je maximálně v jednotkách us ti určitě žádný pulz neuteče.

Alebo pre 8 snimacov pouzi 4x 74HC393 a nestratis ani jeden impulz, aj keby chodil 15x rychlejsie ako si schopny spracovat.
Popravde absolutne si neviem predstavit,ako by Ti mohla 573-ka s tymto problemom pomoct. Predpokladam, ze nijako, lebo sa jedna o latch register a nie o delicku.

Mám Atmegu32 a ten šváb byl použit v originálním zapojení na originální desce které ovšem chybí mikroprocesor. Původně tam měl být AT89C55. Vzhledem k tomu že je poměrně drahý a mega32 se mi tu válí ve 3 kusech tak bych rád použil tu ale pokud to jinak nepůjde koupím některý jiný procík i za cenu že nebude DIL 40. Každopádně mi vrtá hlavou jak to fungovalo předtím. Nějak muselo. Byl to komerční produkt. Další řešení je navrhnout novou desku. Ovšem do toho se mi moc nechce.

Díval jsem se na ty nové megy a vyhovující je ATMEGA162-16PU. Cena je akorátní. Jen by mě opravdu zajímalo jak to fungovalo původně. Jestli se nehrálo na absolutní přesnost a prostě nejaký impulz vypadl. K čemu tam pak ten šváb byl. Vžyď by ho nebylo potřeba. Moc té jeho funkci nerozumím.

Fungovalo to nejspíš tak, že procesor periodicky četl stavy. Stačí znát maximální frekvenci změn. Pak víš, jak často musíš port kontrolovat.
Zpracování stavů mohlo probíhat nezávisle, zatímco v přesných intervalech (třeba přerušením od timeru) se stav snímačů vždy uložil do onoho bufferu. Procesor si ho vyzvedl jakmile byl čas.

Dobře to mi přijde logické a jistě to tak bylo. Čas za který může dojít ke změně není nijak malý. Nicméně 8 motorů běží nezávisle na sobě, jsou spínány nezávisle na sobě a né všechny se musí točit stejnou rychlostí či se vůbec točit. Takže jediná opravdu spolehlivá perioda je o chlup menší než délka jednoho pulzu při plné rychlosti což je určitě nějaká milisekunda. Pokud jsem toto všechno dobře pochopil, tak si dejme tomu tu mikrosekundu odpočítám nějakým timerem, dojde k přerušení ve kterém se otestuje stav všech těch pinů. Šváb tam slouží jako pamětový prvek v době před samotným čtením.
Pochopil jsem to správně ? Moc se v elektronice nepohybuju.

Asi nějak tak. Přijde mi tam ale další šváb zbytečnej, ten buffer se dá udělat programově. Bez zapojení se nedá říct, jesli tam nemá nějakou jinou funkci.

Musi poznat cas zopnutia halovej sondy. Ten zavisi od uhlovej dlzky na obvode toho elemnetu, na ktory sonda reaguje.
Ak by si dal za sondu delicku dvoma, mas istotu, ze vystup z delicky bude zopnuty pocas celej otacky motora.

Priklad:

ak je element na ktory sonda reafuje dlhy 5mm a nachadza sa na hriadeli s priemerom 100mm, potom pri 1000 otackach za minutu bude vystup sondy
zopnuty:

60/1000 = 0,06s = 60ms bude trva jedna otacka

60ms * 5/(3,1416*100) = 60ms * 0,0159 =0,954ms.

Pri delicke dvoma na vystupe snimaca budes mat 60ms casu zistit vytupny stav.
Bez delicky na to mas necelu ms, ale aj to je relativne slusny cas.

Bezne pracujem s procesorom ATmega taktovanym na 18,432MHz tak, ze mam prerusenie kazdych 100us, vybevim najnutnejsie veci a potom bezi vsetko ostatne (graficky display, komunikacia RS485, AD, …). Vyhodnotenie 8 bin vstupv sa do dohto casu bezproblemov zmesti a tak si este mozes dovoli naprogramovat stavovu filtraciu.

Vyhodou spracovania bin. signalov od ich interupru ma vyhodu v maximalne rychlosti. Nevyhodou je mozne zahltenie procesora nevhodnym vstupnym signalom.

Vyhodou spracovania bin. vstupov pod CZ je nemoznost zahltenia spracovania vplyvom nevhodneho signalu - system sa sprava omnoho determinovanejsie. Nevyhodou je nizsia dosiahnuta rychlost sledovanej zmeny, napriklad v mojom pripade do 5kHz pri striede 1:1.

Ak by som mal snimat vyssie frekvencie ako 5kHz, urcite by som pouzil preddelice, napriklad uz spomynane 74HC393.

Ak procesor nema vobec co ine robit, mozes dosiahnut tych 20-30kHz. To si uz ale odskusaj sam :slight_smile:

Našel jsem dokument o zpracování signálů z snímače IRC:
Enkoder.pdf (132 KB)

Taky mi tam ten šváb přijde zbytečný. Protože se snažím použít tu desku kde je všechno už profesiálně hotové a nemusel bych se piplat s vlastním bastlem přepnu švába do transparentního módu. Jinak je zapojený tak že ovládací prvky jdou do uP a na vstupy jde signál ze snímačů a výstup je taktéž připojen do uP.
Ty motory jsou menší. Tipuju že rychlost nepřesahuje 600ot za minutu. A výstupní snímač je malý. V průměru tak 4cm a uvnitř je taková hvězdička se 4rmi magnety. Každý tak 2 mm. Takže si myslím že času bude dost. Pro zjištění přesné periody přerušení si nechám snímač vyměřit na osciloskopu.
Tudíž ty děličky ač by byly dobrý nápad, vzhledem k tomu že bych rád použil originální desku byl by s něma problém je tam přidělat. uP kromě pár měnších výpočtů, komunikace s PC, rozběhem motorů ovládáných můstkem a se zobrazením na display nebude mít jinou funkci při taktu asi 16MHz to musí všechno stihnout v pohodě. Doufám
Chci poděkovat všem za rady. Velmi si jich vážím