Sari la conținut
ELFORUM - Forumul electronistilor

XY-table cu PIC


satelit

Postări Recomandate

Am construit un motor pas cu pas cu PIC, si vreau sa fac o masa care sa se miste pe axa X si pe axa Y ca la imprimanta. Va rog sa ma ajutati cu ceva documentatie,ceva despre un algoritm care sa-l implementez in softul microcontrolerului ,sau al calculatorului.Va multumesc

Link spre comentariu
  • Răspunsuri 5
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • satelit

    2

  • vlad_2770

    2

  • CristianC

    1

  • sifor

    1

Top autori în acest subiect

Da, motorul pas cu pas l-am construit si functioneaza foarte bine. Inca nu am inceput sa construiesc masa XY pentru ca nu am un algoritm. Pentru ca masa sa faca linii drepte este simplu, dau (de exemplu) 10 pasi pe motorul X si 100 pe Y. Daca vreau sa continui linia dau 0 pasi pe X si alti 100 pe Y. Pentru o linie diagonala (pe care o fac in Corel Draw si export fisierul cu extensia .PLT , astfel am coordonatele liniei) cred ca trebuie sa impart linia in mai multe bucati si apoi sa le plotez. De exemplu zicem ca un pas inainteaza plotterul un milimetru, avem 50 de pasi pe Y si 200 pe X. Pentru ca PIC-ul nu permite sa comande 2 motoare in acelasi timp trebuie sa le comandam unul dupa altul (primul X si apoi Y) Daca dau sa execute cei 50 de pasi pe Y si apoi cei 200 pe X plotterul ajunge la coordonatele respective dar nu imi face linia diagonala, face o linie verticala si apoi una orizontala Cred ca pot sa impart cei 200 de pasi de pe X la cei 50 de pe Y si obtin un raport 4 la 1 adica dau de fiecare data 4 pasi pe X si 1 pe Y si astfel obtin o linie diagonala. Problema este ca daca am 51 de pasi pe Y si 200 pe X iese o impartire cu virgula (3,92) iar eu nu pot sa dau 1 pas pe Y si 3,92 pe X si atunci am nevoie de un algoritm.

Link spre comentariu

Daca judeci in pasi motor, esti pe o cale gresita. Intre motor si deplasarea X Y este o mare demultiplicare, de obicei de tip surub.Cu o asa demultiplicare se discuta deja in mii de pasi motor unde eroare se estompeaza foarte mult. Nu exista ploter cu eroare 0.Don Mario

Link spre comentariu

satelit PIC-ul poate sa comande nu doua ci mai multe motoare pas cu pas simultan. Ideea ar fi urmatoarea: folosesti intreruperi. Deci in bucla de intreruperi ai mai multe flag-uri (flag= un fel de semafor sau indicator) pe care le setezi sau le resetezi. In bucla din program care se ruleaza ai conditii de testare ( IF ) si daca flag-ul este setat se executa portiunea care urmeaza, daca nu este setat programul trece mai departe si nu executa portiunea de program. Ca sa nu ai mult de scris foloseste pentru codul ce urmeaza a fi executat functii sau daca lucrezi in asm folosesti goto. Singura ta treaba este sa schimbi flagurile in rutina de intreruperi.

 

Ex:

 

rutina intreruperi:

flag_motor_ 1_A = true;

flag_motor_ 1_B = true;

flag_motor_ 1_C = true;

flag_motor_ 1_D = true;

 

flag_motor_ 2_A = true;

flag_motor_ 2_B = true;

flag_motor_ 2_C = true;

flag_motor_ 2_D = true;

sfarsit rutina intreruperi

 

 

program

 

if(flag_motor_ 1_A)

outportb(valoare)

if(flag_motor_ 2_A)

outportc(valoare)

delay()

 

if(flag_motor_ 1_B)

outportb(valoare)

if(flag_motor_ 2_B)

outportc(valoare)

delay()

 

if(flag_motor_ 1_C)

outportb(valoare)

if(flag_motor_ 2_C)

outportc(valoare)

delay()

 

if(flag_motor_ 1_D)

outportb(valoare)

if(flag_motor_ 2_D)

outportc(valoare)

delay()

sfarsit program

 

ce am scris mai sus folosesti daca vrei sa fii super riguros. altfel folosesti doar doua flag-uri:

 

flag_motor_ 1_A = true;

flag_motor_ 2_A = true;

 

 

if(flag_motor_ 1_A)

outportb(valoare)

if(flag_motor_ 2_A)

outportc(valoare)

delay()

 

if(flag_motor_ 1_A)

outportb(valoare)

if(flag_motor_ 2_A)

outportc(valoare)

delay()

 

if(flag_motor_ 1_A)

outportb(valoare)

if(flag_motor_ 2_A)

outportc(valoare)

delay()

 

if(flag_motor_ 1_A)

outportb(valoare)

if(flag_motor_ 2_A)

outportc(valoare)

delay()

 

 

Deci deplasarea pe diagonala o poti face actionand motoarele simultan. Daca numarul de pasi este inegal pentru cele doua motoare ramane setezi sau sa resetezi flagul raspunzator pentru motorul care are mai putini pasi de executat.

 

Pentru o precizie cit mai mare asa cum ti-a zis si sifor iti trebuie demultiplicare. Nu stiu de cati bani dispui dar daca vrei ceva ieftin incearca sa folosesti roti dintate. Alea au raport mare de demultipilicare. Cauta prin ceasuri de perete mai mari. Cu cit raportul de demultiplicare este mai mare cu atat rezolutia va fi mai buna si miscarea va fi pe diagnala o linie dreapta si nu un traseu in forma de trepte.

Link spre comentariu

Pentru ca PIC-ul nu permite sa comande 2 motoare in acelasi timp trebuie sa le comandam unul dupa altul (primul X si apoi Y)

De ce sa nu poata PIC-ul cumanda doua motoare in acelasi timp? Eu zic ca se poate.Cum ai conectat motoarele la PIC?
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări