Incepator92 Postat Decembrie 29, 2016 Partajează Postat Decembrie 29, 2016 Buna ziua si sarbatori fericite. Am achizitionat un controller UC100 si un breakout board avand deja driverele si motoarele recuperate din altceva. Am zis, de ce sa nu le folosesc pentru contruirea unui cnc ? dar, m-am lovit de urmatoarea problema. Driverele pe care le am eu functioneaza cu pulse,dir dar pentru a schimba sensul de rotatie pe dir, trebuie aplicat acelasi semnal pe care il aplici pe pulse altfel nu merge, am zis ca acest lucru se rezolva simplu cu un 4066. O alta problema consta in faptul ca controlerul UC100 furnizeaza pe iesirile de pulse un semnal dreptunghiular cu factor de umplere foarte mic aprox 10% iar driverul pe care il am se asteapta cam la 50% motiv pentru care merge cam sacadat probabil impulsurile fiind scurte, pe o parte din acestea nu le interpreteaza. Cum as putea transforma semnalul furnizat de UC100 intr-un semnal dreptunghiular cu factor de umplere 50% sau macar sa mai latesc un pic frontul pozitiv ? Am pus mai jos datasheetul driverului pe care il am deja : http://berger-positec.at/files/d550_gb.pdf Link spre comentariu
mars01 Postat Decembrie 29, 2016 Partajează Postat Decembrie 29, 2016 (editat) Salut! O alta problema consta in faptul ca controlerul UC100 furnizeaza pe iesirile de pulse un semnal dreptunghiular cu factor de umplere foarte mic aprox 10% iar driverul pe care il am se asteapta cam la 50% motiv pentru care merge cam sacadat probabil impulsurile fiind scurte, pe o parte din acestea nu le interpreteaza. Cum as putea transforma semnalul furnizat de UC100 intr-un semnal dreptunghiular cu factor de umplere 50% sau macar sa mai latesc un pic frontul pozitiv ? Mai intai stabilesti cat va fi Fclk maxim pe care il vei folosi. Fclk este frecventa maxima pe care o vei avea la intrarea de STEP a driverului. Aceasta depinde de viteza cu care vei misca motoarele, lucru care depinde de faptul daca faci sau nu microstepping (driverele par ca pot doar half step doar ca nu am citit cu atentie datasheet-ul) si de cat de rigid este routerul CNC, dar mai ales de puterea motoarelor. In fine, iti faci calculul si sa zicem ca ajungi la un Fclk ~ 25Khz => Thigh ~20us si Tlow ~20us pentru un factor de umplere de 50% la aceasta frecventa. In acest moment, folosindu-te de intreruperea externa a unui controler, sa zicem ATTINY2313A (setat sa lucreze la frecventa maxima de 20MHz), pe fiecare tranzitie LOW-HIGH pe pinul de intrerupere generezi un puls cu durata de 20us pe un pin digital setatat ca OUTPUT. In principiu ar fi ideal ca sa ai un ATTINY2313 pentru fiecare axa, iar toate controlerele sa lucreze din acelasi clock extern de 20MHz. Un program simplu ar fi ceva de genul: // pin PD3 is the STEP input from the breakout box// any pin on PORTB is the STEP output, that it will gave a pulse for every LOW to HIGH transition on the PD3#define NOP __asm__ __volatile__ ("nopnt")/* pulse_width value will depend on how much the pulse width on PORTB should be. For 20us pulse it should be about 50ns (instruction clock of Attiny2313A clocked at 20MHz) multiplied by 400 (20 instruction clock for 1us * 20us) = 20000 There is also the time to enter the interrupt and of setting and clearing PORTB but it should not count much to the total But due of the fact that a decision (the while cycle) will take 2 instruction clock's and there is also a subtraction (i--), I will divide that value by ~3.*/#define pulse_width 6500 void init();volatile int i;ISR(INT1_vect){ PORTB = 1; // set Pulse_Out HIGH i = pulse_width; while (i--){ NOP;} PORTB = 0; // set Pulse_Out LOW}void init(){ DDRB = 0; // PORTB are OUTPUT's; PORTB = 0; // PORTB is LOW; disable Pulse_Out DDRD &= ~(1 << PD3); // PD3 (INT1) is input PORTD |= (1 << PD3); // PD3 (INT1) pull-up activated for (int x = 0; x < 10; x++) // a little delay to let everything settle at start-up { NOP; } MCUCR = 0x0C; // activate RISING edge detection on INT1 GIMSK = 0x80; // activate only INT1 sei(); // activate interrupts}int main(){ init(); while (1);} Sigur, poti folosi un timer ca sa generezi pulsul de 20us in loc de a pune controlerul sa stea degeaba (NOP). Valoarea "pulse_width" o determini cu un osciloscop, o ajustezi pana pulsul tau ajunge la durata dorita. Editat Decembrie 29, 2016 de mars01 Link spre comentariu
Incepator92 Postat Ianuarie 5, 2017 Autor Partajează Postat Ianuarie 5, 2017 Salut mai am o intrebare. Pentru cei cu experienta cum vad rezolvarea urmatoarei probleme. CNC-ul pe care il contruesc va trebui sa taie cu o piatra diamantata sticla. Mecanismul pe care il am este pneumatic deci capul de taiere trebuie sa coboare si sa isi schimbe unghiul in functie de directia de deplasare.Partea mecanica nu e o problema. Nu stiu cum sa interfatez softul cu partea hardware ca sa faca aceste operatiuni automat . Softul pe care l-am cumparat deja este UCCNC. Cum ar trebui gandite fisierele de taiere a sticlei ? Multumesc ! Link spre comentariu
znecula Postat Ianuarie 6, 2017 Partajează Postat Ianuarie 6, 2017 (editat) Cred ca trebuia sa te orientezi catre un soft dedicat. Presupun ca exista asa ceva. Editat Ianuarie 6, 2017 de znecula Link spre comentariu
Incepator92 Postat Ianuarie 9, 2017 Autor Partajează Postat Ianuarie 9, 2017 (editat) Salut eu voi incerca totusi sa il rezolv in felul acesta. O sa folosesc primele doua axe pentru deplasare pe verticala si respectiv orizontala iar pinii de DIR ale urmotoarelor doua axe vor actiona electrovalvele. Deci voi folosi 4 axe, acum ramane sa studiez un pic de GCode. Am rezolvat problema cu driverele. Multumesc mars01. Daca stie cineva cam cum ar trebui conceput fisierul de taiere pentru aceasta aplicatie in GCode va rog sa ma ajutati. Editat Ianuarie 9, 2017 de Incepator92 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