inkrementalis jelado feldolgozas

Tauri elektrolista at pdg.hu
Fri Feb 10 07:46:25 CET 2006


Hi Lista

2006. február 9., 23:16:17, írtad:

Szia Arnold

> Illetve az nA, nB jeleket is fel fogom dolgozni...

Ezek a jelek ha rendesen csinalod akkor nincsenek is.

A-B-C jel van.
A jeladot rendesen fogadnod kell egy diferencialt vevovel (pl 26ls32)
ebbe a jeladorol bemegy az "A" es "B" jel valamint a negaltjai ebbol
csinal egy jelet.

http://www.pdg.hu/letolt.php?fid=encoder.gif

Kiertekeles:
3 féle van.

"1-szeres" itt csak az "A" felfuto elenel nezed a B allapotat. Ha B
magas akkor elore ha alacsony akkor hatra szamolsz.

"2-szeres" itt "A" es "B" felfuto elenel nezed a a parjat

"4-szeres" itt "A" es "B" minden valtozasara szamolsz

A jeladokon az "1-szeres" impulzus szam van megadva.
amit en adtam neked az 2500-as tehat neked 4-szeres kiertekelesnel
10000 impulzussal kell szamolnod.

Es persze a fordulat szamot ennyivel kell szoroznod es ebbol derul ki
eleg gyors-e a procis feldolgozas. /szerintem egy cpld jobb volna
amugy is biztoss kell valami logika a panelra

Visszaterve a negalt jelekre azokat a diferencialt vevovel
parhuzamossan ossze kell hasonlitani.
"A" nem lehet egyenlo "A negalt"-al. Ebbol tudod ha szar a jelado
illetve kabel szakadasod van.
De itt fontos hogy pillanatokra lesz egyforma a jel a valtasoknal, tehat nem szabad azonal tiltani vagy
sw-bol vagy hw-bol kell egy kis varakozast adni es csak ha x ideig fen
all a hiba akkor tiltani.



Ez itt egy mukodo vhdl 4-szeres kiertekelesre:
sync: process(eclk)
begin
        if eclk'event and eclk = '1' then
                sync_a <= enc1_a;
                sync_b <= enc1_b;

                old_a <= sync_a;
                old_b <= sync_b;
        end if;
end process;

count: process(eclk,clear)
begin
        if clear = '0' then
                pos <= (others => '0');

        elsif eclk'event and eclk = '1' then
                if ((old_a = old_b) and (old_a /= sync_a)) or ((old_a /= old_b) and (old_b /= sync_b)) then
                        pos <= pos -1;
                end if;
                if ((old_a = old_b) and (old_b /= sync_b)) or ((old_a /= old_b) and (old_a /= sync_a)) then
                        pos <= pos +1;
                end if;
        end if;
end process;












More information about the Elektro mailing list