Controlorul mașinii cnc amatori (pas

Mi-am dat seama până acum pentru o axă, pentru că mașină mecanică în proiect. Astfel de controlere se numesc pas / dir. Și reprezintă cel mai ieftin mod de a controla mașina. pentru că ca o mașină, dar cu cuvântul lor "creier" va fi mai scump. Acest dispozitiv este legătura de sincronizare dintre computer și driver pentru controlul SD. Deci pasul este un pas, directia este directia. Desigur, un software specializat trebuie instalat pe PC în prealabil. Beneficiul unei astfel de mări.






În fotografia de mai jos, versiunea mea a acestui dispozitiv, am adăugat ceva, dar fundamentele sunt aceleași. Firește, un astfel de dispozitiv pretinde o bază de bază, deoarece Pentru funcționarea normală a unei mașini mai puțin grave, este necesar feedback.

Deci, controlerul este un mediator de dispozitive între maestru și mecanismul de executare. În cazul în care programatorul este programul și computerul care execută este motorul. Controlorul recepționează semnalul de la calculator. procesează și gestionează conducătorul auto.
Cifrele din imagine:
1. driver de controler de ieșire;
2. Intrarea controlerului computerului.
3. Driverul de ieșire este dispozitivul de executare.
4. Programarea în circuitul interfeței.
5. Intrarea controlului șoferului.

Pentru a proiecta un controler, trebuie mai întâi să determinați parametrii mașinii viitoare, adică selectarea motoarelor pas cu pas necesare sau a altor dispozitive performante.
Ce trebuie să implementăm:
1. Trebuie să citim direcția și pasul. Pentru a interoga pasul, trebuie să configurați întreruperi pentru semnalul de intrare. Pentru o direcție, luați un fel de pin pentru a citi statul. Setarea întreruperii a fost discutată în articolul Conectarea butoanelor la AVR. Numărul pasului 12.
2. Configurați PWM-ul, în ultima înregistrare (pasul 14).
3. Setați întârzierea minimă posibilă între pași astfel încât arborele să aibă timp să se întoarcă.
4. Scrieți algoritmul pasului. Iată un pic de teorie. Acest algoritm depinde de motorul pe care l-am ales. Am un hibrid unipolar. Ce este un hibrid înseamnă că acesta combină în sine atât magneți variabili cât și cei permanenți. O etapă a motorului este fie 3,6 (4 poli) deg. sau 1,8 - 0,9 grade (8 poli). Ie Pasul depinde de numărul de poli de pe stator. Am 6 fire, adică 4-polul, unghiul de rotație 3.6. Cum funcționează? Mai jos este animația motorului pas cu pas. (Luat de la wikipedia.)

Statorul și rotorul motorului au dinți, în unele poziții dinții rotorului sunt exact opuși dinții statorului și în unele dintre dinții statorului. Dinții rotorului asigură o rezistență mai mică la circuitul magnetic la anumite poziții ale rotorului, ceea ce îmbunătățește cuplul static și dinamic. Când energia este furnizată la înfășurări, rotorul blochează dinții opuși polului alimentat, ceea ce asigură un pas.
Pentru a reduce etapa și a crește discreția pe revoluție, putem oferi în mod programabil o jumătate de pas.
Mai jos este un tabel de adevăr pentru modul pas și jumătate de pas.







Modul complet pas cu pas

Modul semi-pas

Ce este un mod de semi-pasare este atunci când doar o fază este alimentată la fiecare pas secundar, iar în restul cazurilor, două sunt alimentate. Ca rezultat, deplasarea unghiulară a rotorului este jumătate din unghiul de înclinare. În plus față de reducerea dimensiunii pasului, această metodă de control vă permite să scăpați parțial de fenomenul de rezonanță.

În programul meu, am implementat pe deplin modul de trecere. Folosind câteva programe din articolele anterioare, vom scrie un program.
/ * Ca întotdeauna, începem cu antetul, aici este lucrul principal de a conecta trei biblioteci: intrare-ieșire, întârziere și întrerupere * /
#define F_CPU 10000000UL // 10 MHz
#include
#include
#include
volatilă int pwm_x, x_sleep; // variabile auxiliare
#define n 15; // întârziere minimă admisibilă
/ * Întrerupeți de semnalul de intrare * /
SIGINT (SIG_INTERRUPT0) // întrerupe manipularea
<
x_sleep = 0;
pwm_x = 0;
OCR1A = 255; // 5v Considerăm în postul anterior nr. 14.
/ * Citiți starea pinului și stabiliți direcția * /
dacă (bit_is_clear (PINC, 4)) // când bitul 4 este 0
<
/ * Apoi, trebuie să scriem un algoritm pentru trecerea motorului. * /
PORTA | = _BV (PA0);
PORTA =

_BV (PA1);
PORTA =

_BV (PA2);
PORTA =

_BV (PA3);
_delay_ms (n); / * Întârzierea este caracterizată de viteza de rotație a arborelui, deoarece. la deschiderea prea rapidă a cheilor motorul va pur și simplu "spintecă", nu are timp să fie oprit * /
PORTA =

_BV (PA0);
PORTA | = _BV (PA1);
PORTA =

_BV (PA2);
PORTA =

_BV (PA3);
_delay_ms (n);

_BV (PA0);
PORTA =

_BV (PA1);
PORTA | = _BV (PA2);
PORTA =

_BV (PA3);
_delay_ms (n);

_BV (PA0);
PORTA =

_BV (PA1);
PORTA =

_BV (PA2);
PORTA | = _BV (PA3);
_delay_ms (n);

pwm_x = 1;
x_sleep = 0;
>
altfel dacă (bit_is_set (PINC, 4)) // CÂND BITUL ESTE 4 EQUALS 1
PORTA =

_BV (PA0);
PORTA =

_BV (PA1);
PORTA =

_BV (PA2);
PORTA | = _BV (PA3);
_delay_ms (n);

_BV (PA0);
PORTA =

_BV (PA1);
PORTA | = _BV (PA2);
PORTA =

_BV (PA3);
_delay_ms (n);

_BV (PA0);
PORTA | = _BV (PA1);
PORTA =

_BV (PA2);
PORTA =

_BV (PA3);
_delay_ms (n);

PORTA | = _BV (PA0);
PORTA =

_BV (PA1);
PORTA =

_BV (PA2);
PORTA =

_delay_ms (n);
pwm_x = 1; // variabilă pentru a determina includerea axei
x_sleep = 0;
>
>

int main (void) // începe baza programului
DDRB = 0xfb; // INPUT PB2
DDRD = 0xf3; // Port pd2 și pinii PD3 - intrări
DDRC = 0x8f; // Ieși de port PC4,5,6 - intrări
DDRA = 0xff; // toate ieșirile 1- ieșire, 0 de intrare
PORTA = 0X00;
// efectuați setările inițiale pentru întreruperea externă, în timp ce pentru INT0
GICR = 0x40;
MCUCR = 0x2O; // pe marginea care se încadrează
sei (); // Permite întreruperi la nivel global în cadrul programului
// setați setările registrului de numărătoare pentru PWM
TCCR1A = (1< TCCR1B = (1<

/ * OCR1A acest registru se compară cu registrul de numărare, este necesar un PWM constant. și anume Setați OSR1A la 255. modul de cont de 255 * /
în timp ce (1)
<
// Bucle infinite
dacă (pwm_x == 1)
// registru global, care determină includerea axei
<
/ * Ciclul pentru intrarea în modul somn * /
în timp ce ((PIND2! = 0) (x_sleep <= 750 )) /*если на пине по шагам ноль, больше 750 мс, то переводим двигатель в удержание с 20% ШИМом*/
_delay_ms (1);
x_sleep ++; // registru global care definește modul de repaus
pwm_x = 0;
OCR1A = 50;
>
>
altfel
<
OCR1A = 50;
pwm_x = 0; / * această variabilă este necesară dacă sunt implicate mai multe axe * /
>
>
> // paranteza de închidere a programului principal







Articole similare

Trimiteți-le prietenilor: