Gå til innhold

lage teller med JK-vipper som styrer motor


Anbefalte innlegg

skal lage en sekvenskrets som styrer en steppmotor.

Fire signaler Q1,Q2,Q3,Q4 skal styre denne.

 

Må bruke 4 JK-vipper ( negative edge triggered with clear and Preset )

 

sekvenstabell :

 

1. 1010

2. 1000

3. 1001

4. 0001

5. 0101

6. 0100

7. 0110

8. 0010

1. 1010

 

 

må bruke felles klokkesignal inn på vippene.

 

jeg lager karnaugh - diagram men vet ikke hvor Preset og Clear skal kobles

 

noen som vet ?

Endret av kennien
Lenke til kommentar
Videoannonse
Annonse

Clear og Preset kan du koble som du vil dersom oppgaven ikke sier noe spesifikt.

 

Du kan f.eks ha 8 brytere der 2 og 2 styrer hver vippe. En bryter er koblet til clear og en til preset. Eventuelt kan du cleare/presette alle samtidig.

 

Vil anta du skal koble en til hver, slik at du kan kontrollere hva som skjer når du kommer inn i sekvensfremmede tilstander. Sekvensfremmede tilstander kan du jo ikke tvinge frem dersom du ikke har egne clear/presett linjer.

 

 

Btw: Er du ikke litt sent ute ?, snart eksamen i Digitalteknikk eller ?

Lenke til kommentar

takk for svar

 

nærmer seg eksamen i digitalteknikk ja

 

trodde det var meningen denne motoren skulle gå rundt og rundt automatisk ?

 

har du og tatt dette faget ?

 

jaja, blir vel ikke ferdig med laben så slepper vel sådan eksamen

Lenke til kommentar

Motoren går rundt og rundt automatisk ja.

 

Vet ikke hvilke vipper dere har men vil anta at høy inn på clear setter dem til 0, og at høy inn på preset setter dem til 1. Så lenge clear og preset er lav kan du jo kjøre sekvensen.

 

Jamfør datablad på vippene.

 

Edit: På vippene (datablad) står det clear eller clear med strek over ? Dersom det er strek øver betyr det at de er aktiv lav. Da må du sette clear og (samme for presett) til høy for at sekvensen skal kunne kjøres.

Lenke til kommentar

det står strek over ja på preset og clear.

 

Det som er litt problemet og er å lage Karnaugh-diagrammet , slik at jeg ser

hva som skal inn på J og K - inngangene på de forskjellige vippene.

 

Når jeg setter opp Karnaugh-diagrammet blir jo de frekvens-fremmende satsene på en måte satt til x (dont care) , slik at feks J og K - inngangene på vippe A blir : J=Qa og K=Qä .

 

Det vil jo si at Vippe A lever sitt eget liv,kun påvirket av Clear og Preset-verdiene.

 

Kan det være feil i Karnaugh-diagrammet og ?

 

Både vippe A, C og D bruker kun sine egne Q/`Q som verdier på JK-inngangene.

Vippe B er avhengig av J = Qb + (Qà*Qc)

 

jaja , du ser om du gidder svare..kunne vært helg nå , men ikke for studenter

Lenke til kommentar

Husk at clear og preset ikke trenger være med i karnaugh diagrammene.

 

Det er noe rart i sekvenstabellen din dog.. sekvens 5-6 er lik, ingen tilstandsendring ?

 

 

Før du setter opp karnaugdiagrammene kan det være smart å sette opp en tilstandstabell... over nåværende og neste tilstand samt hvilke verdier J og K må ha for at dette skal skje.

Lenke til kommentar

redigerte sekvensen nå i åpningsinnlegget.

 

Når jeg setter opp Karnaugh-diagrammet får jeg dette :

 

JA = QA

KA = QÀ

 

JB = QB + (QÀ x Q`D)

KB = Q`B

 

JC = QC

KC = Q`C

 

JD = QD

KD = Q`D

 

ut av disse ligningene skal jo motoren visstnok snurre hvis jeg får kobla Clear / Preset rett

 

Men når jeg kobler opp dette på koblingsbrettene fra 1962 , så snurrer den ikke.

Men har dog kun prøvd uten å koble noe som helst inn på Clear / Preset

Lenke til kommentar

Satt meg ned å gjorde oppgaven nå litt fort for deg.

 

Ja = !QbQc

Ka = Qd

 

Jb = !Qa!Qb

Kb = Qc

 

Jc = Qb!Qd

Kc = Qa

 

Jd = Qa!Qc

Kd = Qb

 

! står for not altså de inverterte (strek over) signalene.

Det er nok mange andre løsninger enn dette også.

 

Dersom alle preset og reset er aktiveres når de er low, ville jeg koblet disse til high. (Så lenge du ikke bruker dem) Ikke la dem flyte det kan gi rare resultater.

 

Husk når du samler i karnaug diagram må du ALLTID ha med 1-ere. X for dont care kan du ta med hvis du vil for å gjøre sekvensen lettere

Lenke til kommentar

ok,har et problem her :

 

Fra sekvens 0010 - 1010 , altså når sekvensen skal begynne på ny igjen , så stemmer det ikke helt tror jeg ?

 

Ved inputene som du oppga , så blir Qb feil ( altså ikke 0 - 0 som den skal )

 

er det her jeg skal bruke preset eller clear ?

 

altså , koble slik at systemet resettes når kombinasjonen 0010 - 1110 oppstår ?

Lenke til kommentar

Oi, hm... mulig det er noe feil i det jeg har satt opp :hmm:

 

Ved sekvens 0010 har vi:

 

Qa = 0, Qb = 0, Qc = 1, Qd = 0.

 

Ut fra likningene skal vi da få:

 

Ja = !QbQc = 1*1 = 1

Ka = Qd = 0

 

Jb = !Qa!Qb = 1*1 = 1

 

Oi her var det noe rart :S

 

 

 

*tenke*

 

En liten glipp fra meg. Jb skal være Jb = !Qa!Qc, altså invertert Qc istedet for invertert Qb.

 

Ved sekvens 0010 har vi:

 

Qa = 0, Qb = 0, Qc = 1, Qd = 0.

 

Ut fra likningene skal vi da få:

 

Ja = !QbQc = 1*1 = 1

Ka = Qd = 0

 

Jb = !Qa!Qc = 1*0 = 0

Kb = Qc = 1

 

Jc = Qb!Qd = 0*1 = 0

Kc = Qa = 0

 

Jd = Qa!Qc = 0*0 = 0

Kd = Qb = 0.

 

Som stemmer.

Lenke til kommentar

Ja jeg vet at dette ikke har noe med spørsmålet å gjøre, men jeg syns at det blir litt teit at de fortsatt gir slike oppgaver på videregående. Å designe digitale kretser vha J/K vipper og desslike er en teknikk som overhodet ikke blir brukt lengre i industrien. Her skriver man funksjonaliteten i et HDL (hardware description language), og syntetiserer til programmerbare logiske kretser (CPLD eller FPGA). Dette er relativt billig nå også, og i tillegg ikke så altfor vanskelig å komme i gang med. koden under (her i VHDL) vil utføre oppgaven og mer til.

 

entity stepctrl is

 port (
   clk, arst_n : in  std_logic;
   enable      : in  std_logic;
   ctrl        : out std_logic_vector(3 downto 0));

end stepctrl;

architecture rtl of stepctrl is

 type step_seq_t is array (0 to 7) of std_logic_vector(3 downto 0);

 constant step_seq : step_seq_t := (0 <= "1010",
                                    1 <= "1000",
                                    2 <= "1001",
                                    3 <= "0001",
                                    4 <= "0101",
                                    5 <= "0100",
                                    6 <= "0110",
                                    7 <= "0010");

 -- registers
 signal seq_cnt_reg : unsigned(2 downto 0);  -- sequence counter

begin  -- rtl

 -- purpose: sequence counter
 -- type   : sequential
 -- inputs : clk, arst_n, seq_cnt_reg
 -- outputs: seq_cnt_reg
 p_seq_cnt : process (clk, arst_n)
 begin  -- process p_seq_cnt
   if arst_n = '0' then                -- asynchronous reset (active low)
     seq_cnt_reg <= (others => '0');
   elsif rising_edge(clk) then
     if enable = '0' then
       seq_cnt_reg <= (others => '0');
     else
       seq_cnt_reg <= seq_cnt_reg + 1;
     end if;
   end if;
 end process p_seq_cnt;

 -- output assignment
 ctrl <= step_seq(seq_cnt_reg) when enable = '1' else (others => '0');


end rtl;

Lenke til kommentar

Nåja at det ikke brukes er vel en sannhet med modifikasjoner. Dersom man bare skal lage 1 kort eller noen par hundre er det jo klart at de to tre-kanskje noen ti kronene en FPGA koster mer ikke er så mye. Men dersom du skal masseprodusere tusenvis av kort kan det fort bli penger utav det :p

 

Dessuten er det jo mye lettere å forklare prinsippet til en tilstandsmaskin med faktiske elementer enn med en programkode. Det er jo heller ikke å forakte med litt "hands on" erfaring, der man faktisk får bryne seg på feilsøking av alle ledningene som går frem og tilbake mellom kretsene.

 

Det blir jo på mange måter som å lære integrasjon. I dag finnes det moderne kalkulatorer som kan regne ut et hvilket som helts integral for deg, enda til analytisk og presentere svaret med variabler isteden for numerisk. Men det er ikke nødvendigvis slik at det er dette som gir det best forståelse. Det er ikke uten grunn det nå på f.eks NTNU ikke lenger er lov å bruke mer enn en "enkel" kalkulator på eksamen, selv om man kunne gjort oppgavene mye enklere og raskere på en grafisk kalkulator.

 

Men helt klart FPGA og andre programmerbare kretser vil bare komme mer og mer inn på markedet, men det er fortsatt noen som må har hardware forståelse utover det å kunne skrive et program.

Lenke til kommentar

Jeg kan ikke se for meg at det i noe tilfelle vil være aktuelt å produsere en serie på flere hundre tusen kort med så enkel funksjonalitet at det kan lages med et fåtall grunnleggende logiske porter. Når kompleksiteten øker utover det helt grunnleggende er det uansett billigere med en liten FPGA.. Enkle FPGAer koster ned i 5 kroner i store serier.

 

Når det gjelder forståelse er jeg forsåhvidt enig. Men da bør man holde seg unna J/K vipper, og heller forholde seg til D-vipper, som både er enklere å forstå, og er mye nærmere registrene man faktisk har i en FPGA. J/K vipper har en del ekstra funksjonalitet som bare bidrar til å forvirre.

Lenke til kommentar

Om du kan klare deg med en asynkron teller, så har jeg en krets som burde fungere:

 

post-87910-1226437151_thumb.png

 

Kretsen består av følgende:

2 toggle-vipper. Både JK-vippa og D-vppa kan enkelt kobles som en T-vippe.

2 invertere

3 Nand porter (4 til hvis du lager xor av nand-porter)

1 Xor.

 

Da burde du ha det du trenger.

 

[edit]

Glem det. Ser at du skal la stepmotoren bruke halvsteg også. Tror du skal kunne klare deg med 3 vipper da, hvis målet ikke er å lage en ringteller.

 

[edit2]

Det er hovedsaklig to fremgangsmåter (som jeg kan komme på i farten) for å løse oppgaven.

Den ene er å lage en vanlig 3 bits binær teller, og bruke enkle logiske porter for å generere sekvensen. Det krever 3 jk-vipper.

Hvis du absolutt MÅ bruke 4 vipper, så kan du alltids lage deg en johnson teller. Du vil også her være avhengig av noe styrelogikk for å få sekvensen du er ute etter.

 

Er det et krav at telleren skal kunne telle BÅDE opp og ned? Det er det vel, siden du skal styre en steppmotor.

Endret av geir__hk
Lenke til kommentar

altså ,det er et grunnleggende digital-teknikk fag på Universitetet i Stavanger.

 

Oppgaven er bare en liten del av en større oppgave, som b.l.a går ut på

 

å lage synkrontelleren slik at man kan stoppe motoren ved feks en bestemt grad.

 

dvs ved 400 step kan man "stoppe" den hver 400/360 ende grad

 

dette utføres av en egen teller som trigges av klokka.

 

selvfølgelig er det vits å kunne det helt grunnleggende, sier seg selv..

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...