satelit Postat Decembrie 10, 2006 Partajează Postat Decembrie 10, 2006 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
vlad_2770 Postat Decembrie 10, 2006 Partajează Postat Decembrie 10, 2006 Nu prea am inteles mesajul tau. Banuiesc ca ai reusit sa comanzi un motor pas cu pas ca ... de construit nu cred ca se apuca nimeni sa-l construiasca. Dar uite-te un pic pe link-ul : http://www.elforum.info/viewtopic.php?t=1 ... sc&start=0 ai acolo citeva link-uri (unul parca era spre un sfot care folosea portul paralel fara sa mai fie nevoie de PIC). Link spre comentariu
satelit Postat Decembrie 11, 2006 Autor Partajează Postat Decembrie 11, 2006 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
sifor Postat Decembrie 11, 2006 Partajează Postat Decembrie 11, 2006 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
vlad_2770 Postat Decembrie 11, 2006 Partajează Postat Decembrie 11, 2006 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
CristianC Postat Decembrie 11, 2006 Partajează Postat Decembrie 11, 2006 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum