Taula de continguts:

Menú de control de velocitat pas a pas impulsat per Arduino: 6 passos
Menú de control de velocitat pas a pas impulsat per Arduino: 6 passos

Vídeo: Menú de control de velocitat pas a pas impulsat per Arduino: 6 passos

Vídeo: Menú de control de velocitat pas a pas impulsat per Arduino: 6 passos
Vídeo: Начало работы с QLC+ Управление цветомузыкой с компьютера. Как управлять светом. 2024, Desembre
Anonim
Menú de control de velocitat pas a pas impulsat per Arduino
Menú de control de velocitat pas a pas impulsat per Arduino
Menú de control de velocitat pas a pas impulsat per Arduino
Menú de control de velocitat pas a pas impulsat per Arduino
Menú de control de velocitat pas a pas impulsat per Arduino
Menú de control de velocitat pas a pas impulsat per Arduino

Aquesta biblioteca SpeedStepper és una reescriptura de la biblioteca AccelStepper per permetre el control de velocitat del motor pas a pas. La biblioteca SpeedStepper us permet canviar la velocitat del motor configurada i, a continuació, accelera / desaccelera fins a la nova velocitat configurada mitjançant el mateix algorisme que la biblioteca AccelStepper. La biblioteca SpeedStepper també us permet establir un límit més i menys i una posició "inicial". Hi ha una ordre goHome per tornar a la posició inicial.

Limitacions: la biblioteca SpeedStepper només condueix les sortides de direcció i pas i, per tant, s’ha de connectar a un controlador de motor, com Easy Driver, per conduir el motor pas a pas. La biblioteca AccelStepper proporciona més opcions de conducció que es poden copiar a aquesta biblioteca si cal.

Es proporcionen tres esbossos d’exemple, cadascun dels quals es pot executar sense motor ni conductor de motor. L'esbós speedStepperPlot emet exemples d'ordres de velocitat i l'ordre goHome i genera un diagrama de la velocitat i la posició resultants. L’esbós speedStepperSetup proporciona una configuració basada en el menú per configurar la casa i els límits del motor i, a continuació, fer funcionar el motor i ajustar la velocitat cap amunt i cap avall i anar a casa per acabar. L’esbós speedStepperProfile mostra un exemple de configuració i execució d’un perfil de velocitat.

Tot i que la biblioteca AccelStepper proporciona un bon control de posició, era necessari un control de velocitat per a la sonda de fonament de gel de prototipus per a la recollida de mostres biològiques a Europa. Aquí teniu un vídeo d’una versió anterior del prototip, que feia servir pes en lloc d’un motor. La revisió 1.1 va afegir perfils de velocitat després que un usuari demanés un mitjà per controlar el perfil de velocitat d’una bomba.

Aquesta biblioteca funciona amb Arduino Uno i Mega2560, però per al prototip es va utilitzar el processador de memòria més gran / més ràpid SparkFun Redboard Turbo.

Aquesta instrucció també està disponible en línia a la biblioteca Stepper Speed Control Library per a Arduino

Subministraments

Per executar els esbossos d’exemple només calen un Arduino UNO o Mega2560 i les biblioteques de programari

Per a les proves de banc de la biblioteca es va utilitzar un SparkFun Redboard Turbo amb un Easy Driver, un motor pas a pas de 200 passos / rev, 12V 350mA i un subministrament de 12 DC 2A o superior, per exemple. https://www.sparkfun.com/products/14934. Cable USB A a Micro Cable de sèrie USB a TTL Arduino IDE V1.8.9 i un ordinador per executar-lo. Biblioteca SpeedStepperpfodLibreria Parser per a les classes NoBlockingInput i pfodBufferedStream millis Biblioteca de retard per retards no bloquejants

Pas 1: Funcions de la biblioteca

La biblioteca SpeedStepper executa el motor pas a pas limitat per límits establerts per la biblioteca. Consulteu el fitxer SpeedStepper.h per conèixer els diversos mètodes de biblioteca disponibles. Aquí teniu un esbós de la lògica que hi ha darrere.

Es realitza un seguiment de la posició del pas a pas comptant el nombre de passos (polsos). La biblioteca limita la posició entre les posicions setPlusLimit (int32_t) i setMinusLimit (int32_t). El límit positiu sempre és> = 0 i el límit menys sempre <= 0. En arrencar, la posició del motor és 0 (inici) i els límits es defineixen en números +/- molt grans (aproximadament +/- 1e9 passos). setAcceleration (float) estableix la velocitat amb què el motor canviarà la velocitat cap amunt o cap avall. A mesura que el motor s’acosti al límit més o menys, es desaccelerarà a aquesta velocitat fins que s’aturi al límit. En iniciar-se, l'acceleració s'estableix en 1,0 passos / seg / seg. La configuració de l’acceleració sempre és un número + ve. El signe del paràmetre setSpeed (flotant) estableix la direcció en què es mourà el motor.

setSpeed (flotant) estableix la velocitat per accelerar / desaccelerar el motor des de la seva velocitat actual. La velocitat que es pot establir mitjançant setSpeed (float) és limitada, en valor absolut, per configuracions, setMaxSpeed (float), per defecte 1000 passos / s i setMinSpeed (float), per defecte 0,003 passos / seg. Aquests valors predeterminats també són els límits absoluts de velocitat codificats per la biblioteca que acceptarà la biblioteca per a setMaxSpeed () i setMinSpeed (). Si voleu establir una velocitat màxima> 1000 passos / segon, haureu d'editar la primera línia del fitxer SpeedStepper.cpp per canviar la velocitat màxima Max (1000) a la velocitat màxima que vulgueu. A la pràctica, la velocitat màxima també està limitada pel temps entre trucades al mètode run () de la biblioteca. Durant 1000 passos / s, el mètode run () s'ha de cridar com a mínim cada 1 mS. Consulteu la secció de latència a continuació.

Si intenteu establir una velocitat inferior a la mínima, el motor s’aturarà. Cadascun d'aquests definidors té un getter corresponent, consulteu el fitxer SpeedStepper.h. Per a la velocitat, getSetSpeed () retorna la velocitat que heu establert mitjançant setSpeed (), mentre que getSpeed () retorna la velocitat del motor actual que varia a mesura que accelera / desaccelera la velocitat establerta. Si el motor no va en la direcció que pensa en un + ve, podeu trucar a invertDirectionLogic () per canviar la direcció en què el motor es mou per velocitats de + ve.

getCurrentPosition () retorna la posició del motor actual en comparació amb 'home' (0). Podeu anul·lar la posició actual del motor setCurrentPosition (int32_t). La nova posició està limitada als límits establerts més / menys.

Inicialment, el motor està aturat a la posició 0. La trucada a setSpeed (50.0) farà que comenci a accelerar en la direcció + ve fins a una velocitat màxima de 50 passos / min. Si truqueu a hardStop (), el motor s’aturarà immediatament on es troba. D'altra banda, en cridar al mètode stop () es fixarà la velocitat a zero i es frenarà el motor. Cridant stopAndSetHome () pararà el motor immediatament i establirà la seva posició a 0. Els valors dels límits més / menys no es canvien, però ara es refereixen a aquesta nova posició 0 (inicial). Si truqueu goHome () tornareu el pas a aquesta posició 0 (inici) i s'aturarà. La trucada a setSpeed () cancel·larà la tornada a casa.

La biblioteca SpeedStepper també proporciona control de perfils de velocitat mitjançant els mètodes setProfile (SpeedProfileStruct * profileArray, size_t arrayLen), startProfile (), stopProfile (), per interrompre un perfil en execució i isProfileRunning (). Vegeu l'esbós d'exemple speedStepperProfile.

Pas 2: Execució de l'exemple SpeedStepperPlot sense motor

Execució de l'exemple SpeedStepperPlot sense motor
Execució de l'exemple SpeedStepperPlot sense motor

Instal·leu Arduino IDE V1.8.9 Descarregueu i instal·leu la biblioteca SpeedStepper Deseu el SpeedStepper.zip i, a continuació, utilitzeu l'element de menú Arduino IDE Sketch → Include Library → Add. ZIP library per importar la biblioteca. Descarregueu i instal·leu també la biblioteca millisDelay

Obriu els esbossos d’exemples → SpeedStepper → speedStepperPlot (reinicieu l’IDE si cal). Aquest esbós està configurat per funcionar amb Serial, per exemple. UNO i Mega, etc. Per veure el SparkFun Redboard Turbo, vegeu més avall.

No cal cap placa de controlador ni motor pas a pas per executar aquest exemple. Aquests exemples utilitzen D6 i D7 com a sortides. Podeu canviar els pins de sortida a qualsevol sortida digital canviant la configuració de STEP_PIN i DIR_PIN a prop de la part superior de l'esbós.

Pengeu l’esbós al tauler i, a continuació, obriu Eines → Plotter en sèrie a 115200 baud per mostrar la representació de la velocitat (VERMELL) i la posició (BLAU). El límit positiu s’estableix a 360, cosa que fa que la velocitat s’incrementi a zero des d’uns 100 punts. a l’eix x. El límit menys és de -510. La posició s'atura a ~ -390 perquè s'ha exigit la velocitat a 0,0. Al punt 380 de l’eix x, s’emet el cmd goHome que torna el pas a la posició zero.

Aquest esbós speedStepperPlot utilitza millisDelays per canviar el temps entre diverses velocitats i acceleracions. En molts casos, utilitzar un SpeedStepperProfile, com en el següent exemple, és més senzill.

Pas 3: Execució de l'exemple SpeedStepperProfile sense motor

Execució de l'exemple SpeedStepperProfile sense motor
Execució de l'exemple SpeedStepperProfile sense motor

Obriu els esbossos d’exemples → SpeedStepper → speedStepperPlot, aquest esbós produeix el diagrama anterior mitjançant el traçador sèrie Arduino i és un exemple d’execució d’un perfil de velocitat prescrit, per exemple, si s’executa una bomba.

Els perfils de velocitat Stepper estan formats per una matriu de SpeedProfileStruct, que es defineix al fitxer SpeedStepper.h.

struct SpeedProfileStruct {

velocitat de flotació; // la velocitat objectiu al final d'aquest pas sense signar llarg deltaTms; // el temps per accelerar des de la velocitat actual (al començament d’aquest pas) fins a la velocitat objectiu};

Definiu una matriu de SpeedProfileStruct que contingui la velocitat objectiu per a cada pas i el temps, deltaTms, en mS, per assolir aquesta velocitat objectiva des de la velocitat objectiu anterior. Si el deltaTms és zero o molt petit, la velocitat saltarà immediatament a la nova velocitat objectiu. En cas contrari, es calcularà l’acceleració necessària setAcceleration (), seguida d’una trucada a setSpeed () per a la nova velocitat objectiu. En tots els casos, el perfil estarà limitat pels límits de posició més i menys existents i la configuració de la velocitat màxima / mínima. Si voleu mantenir una velocitat, repetiu la velocitat anterior amb el temps que vulgueu mantenir. Com que la nova velocitat objectiu és la mateixa que la velocitat actual, l’acceleració calculada serà nul·la i no es produeix cap canvi.

Aquesta matriu SpeedProfileStruct va produir la trama anterior

const SpeedProfileStruct profile = {{0, 0}, // atura immediatament si encara no està aturat {0, 1000}, // mantén zero durant 1 segon {-50, 0}, // salta a -50 {-200, 2000}, // puja a -200 {-200, 6000}, // mantén a -200 durant 6 segons {-50, 2000}, // puja a -50 {0, 0}, // // atura immediatament {0, 1500}, // manteniu zero durant 1,5 segons {50, 0}, // salteu a 50 {200, 2000}, // accediu a 200 {200, 6000}, // manteniu 200 durant 6 segons {50, 2000}, // puja a 50 {0, 0}, // // atura immediatament {0, 1000} // manté zero // per traçar la sortida}; const size_t PROFILE_LEN = sizeof (perfil) / sizeof (SpeedProfileStruct); // calcular la mida de la matriu de perfils

El perfil s’estableix trucant a setProfile (SpeedProfileStruct * profileArray, size_t arrayLen) per exemple. stepper.setProfile (perfil, PROFILE_LEN);

Un cop configurat el perfil, truqueu a startProfile () per començar a executar-lo a partir de la velocitat del motor actual (normalment començareu des de la parada). Al final del perfil, el motor continuarà funcionant a l'última velocitat objectiu. Es pot trucar al mètode isProfileRunning () per veure si el perfil encara s’executa. Si voleu aturar el perfil abans, podeu trucar a stopProfile (), que abandonarà el perfil i aturarà el motor.

Pas 4: Execució de l'exemple SpeedStepperSetup sense motor

L'esbós d'exemple està dissenyat per a bases per a la vostra pròpia aplicació de motor pas a pas. Proporciona una interfície basada en el menú que us permet desplaçar-vos al motor fins a la seva posició inicial, si encara no hi és, i restablir opcionalment els límits més i menys i, a continuació, fer funcionar el motor dins d’aquest rang. El menú "córrer" us permet augmentar i disminuir la velocitat, congelar-vos a la velocitat actual, aturar-vos i també tornar a casa.

Aquest esbós il·lustra una sèrie de funcions de programari que mantenen el bucle () sensible de manera que podeu afegir les vostres pròpies entrades de sensor per controlar el pas a pas. Es triga a evitar retards que interfereixen en el control de velocitat. (Vegeu Els retards són malvats)

Instal·leu les biblioteques que s’utilitzen per executar SpeedStepperPlot, a sobre, i també instal·leu la biblioteca pfodParser. La biblioteca pfodParser proporciona les classes NonBlockingInput i pfodBufferedStream que s’utilitzen per gestionar l’entrada de l’usuari i la sortida del menú bloquejant el bucle ().

Obriu l'exemple Exemples → SpeedStepper → speedSpeedSetup. Aquest esbós està configurat per funcionar amb Serial, per exemple. UNO i Mega, etc. Per a córrer a SparkFun Redboard Turbo, vegeu més avall.

No cal cap placa de controlador ni motor pas a pas per executar aquest exemple. Aquests exemples utilitzen D6 i D7 com a sortides. Podeu canviar els pins de sortida a qualsevol sortida digital canviant els paràmetres STEP_PIN i DIR_PIN a prop de la part superior de l'esbós. Pengeu l’esbós al tauler i obriu l’Eines → Monitor de sèrie al 115200 per veure el menú CONFIGURACIÓ.

CONFIGURACIÓ pos: 0 sp: 0,00 + Lim: 500000 -Lim: -500 LATÈNCIA: pas a pas: bucle 492uS: 0uS p - establir Inici l - establir límits h - goHome r - run>

Quan l’esbós s’executa, la posició actual del pas a pas es pren com a la posició “inicial” (0). Si heu de tornar a situar el pas a la seva veritable posició "inicial", introduïu l'ordre p per mostrar el menú SET HOME

SET HOME pos: 0 sp: 0,00 + Lim: 1073741808 -Lim: -1073741808 LATÈNCIA: stepper: 752uS loop: 3852uS x - setHome here and exit + - Endavant - - Inversa s - swap Endavant / Inversa - hardStop >

Com podeu veure, els límits codificats a l'esbós s'han eliminat per poder tornar a situar el pas a qualsevol lloc. Cal que tingueu cura de no passar-lo dels límits físics o pot trencar alguna cosa.

Utilitzeu el + cmd per començar a avançar el pas a pas, si el trobeu movent-se en la direcció equivocada, introduïu un ordre que no sigui o només una línia buida per aturar-lo i, a continuació, utilitzeu l’escomanda per canviar la direcció cap endavant. Heu d'actualitzar l'esbós per incloure una trucada a invertDirectionLogic () a la configuració per solucionar-ho per a la següent execució.

Utilitzeu els cmds + / - per situar el pas a la posició zero correcta. El motor arrenca lent i després augmenta la velocitat a mesura que avança, només cal que utilitzeu i buideu la línia per aturar-lo. MAX_SETUP_SPEED estableix la velocitat màxima per a això i el menú de límits a la part superior de setupMenus.cpp.

Un cop el motor s'hagi posicionat a la seva posició "inicial", utilitzeu la x cmd per restablir la posició actual com a 0 i torneu al menú CONFIGURACIÓ.

Si heu d’establir els límits, normalment només a la configuració inicial, utilitzeu l cmd per entrar al menú SET LIMITS

SET LIMITS pos: 0 sp: 0.00 + Lim: 1073741808 -Lim: -1073741808 LATENCY: stepper: 944uS loop: 5796uS l - setLimit here + - Endavant - - Invertir h - goHome x - exit - hardStop>

Utilitzeu el + cmd per avançar fins al límit més i, a continuació, utilitzeu l cmd per establir-lo com a límit més. A continuació, es pot utilitzar l'ordre h per tornar a 0 i -cmd per moure's si reverteix a la posició del motor al límit menys. Torneu a utilitzar l cmd per establir el límit menys. Tingueu en compte les posicions dels límits més i menys i actualitzeu les instruccions setPlusLimit i setMinusLimit del mètode setup () amb aquests valors.

Quan es defineixen els límits, utilitzeu x cmd per tornar al menú SETUP i, a continuació, podeu utilitzar r cmd per obrir el menú RUN

RUN MENU pos: 0 sp: 3.31 + Lim: 500000 -Lim: -500 LATENCY: stepper: 944uS loop: 5796uS + - Speed up - - Speed down h - goHome. - HardStop - Velocitat de congelació> + pos: 4 sp: 9,49 + Lim: 500000 -Lim: -500 LATENCIA: pas a pas: bucle 792uS: 5664uS pos: 42 sp: 29,15 + Lim: 500000 -Lim: -500 LATÈNCIA: pas a pas: 792uS loop: 5664uS pos: 120 sp: 49,09 + Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS pos: 238 sp: 69,06 + Lim: 500000 -Lim: -500 LATENCY: stepper: 792uS loop: 5664uS

El + cmd comença a accelerar en direcció endavant i imprimeix la posició i la velocitat cada 2 segons. Quan el motor assoleixi la velocitat que desitgi, pot aturar l'acceleració amb qualsevol altra tecla (o una entrada buida). Podeu reduir la velocitat fent servir - cmd cap avall per aturar-vos. Si s’atura, - cmd accelerarà a la inversa.

Aquest menú RUN proporciona control manual del vostre projecte. Per al control automàtic, haureu d'afegir altres sensors.

Pas 5: latència

El control del motor pas a pas depèn del programari que mana cada pas. Per mantenir la velocitat establerta, el vostre esbós ha de trucar al mètode stepper.run () amb la freqüència suficient per iniciar el següent pas en el moment adequat per a la velocitat actual. Per al control mitjançant sensors, heu de poder processar immediatament noves mesures. La impressió de posició / velocitat inclou dues mesures de LATÈNCIA que permeten comprovar que l’esbós és prou ràpid.

Latència pas a pas (pfodBufferedStream)

La latència del pas mesura el retard màxim entre trucades successives al mètode stepper.run (). Per fer funcionar el motor pas a pas a 1000 passos per segon, la latència del pas a pas ha de ser inferior a 1000 uS (1 mS). La primera versió d’aquest esbós tenia una latència de molts mil·lisegons. Per superar aquestes trucades addicionals al mètode runStepper () (que crida stepper.run ()) on s’afegeix a través del codi. Això no va resoldre completament el problema perquè les declaracions d'impressió de menú i de sortida van bloquejar l'esbós un cop es va omplir el petit buffer Serial Tx. Per evitar aquest bloqueig, s'ha utilitzat pfodBufferedStream de la biblioteca pfodParser per afegir un buffer d'impressió de sortida de 360 bytes al qual les sentències d'impressió podrien escriure ràpidament. A continuació, pfodBufferedStream allibera els bytes a la velocitat en bauds especificada 115200 en aquest cas. pfodBufferedStream ha de poder optar per bloquejar quan la memòria intermèdia està plena o simplement deixar caure els caràcters de desbordament. Aquí està configurat per deixar caure qualsevol caràcter addicional quan la memòria intermèdia estigui plena de manera que l'esbós no quedi bloquejat a l'espera que Serial enviï caràcters.

Latència de bucle (NonBlockingInput)

La latència del bucle mesura el retard màxim entre trucades successives al mètode loop (). Això defineix la rapidesa amb què podeu processar noves mesures del sensor i ajustar la velocitat del motor. La velocitat que ha de tenir depèn del que intenteu controlar.

Els retards deguts a les declaracions d'impressió s'han eliminat mitjançant pfodBufferedStream anterior, però per processar l'entrada de l'usuari cal agafar el primer caràcter de l'entrada i ignorar la resta de la línia. La classe NonBlockingInput de la biblioteca pfodParer s'utilitza per retornar un caràcter diferent de zero quan hi ha entrada, mitjançant readInput (), i per esborrar i descartar els caràcters següents, mitjançant clearInput (), fins que no es reben caràcters durant 10 mS sense bloquejar el bucle ()

Per descomptat, la latència del bucle augmentarà amb el codi addicional que afegiu per llegir els sensors i calcular la nova velocitat establerta. Moltes biblioteques de sensors prenen el tipus de retard (..) entre iniciar una mesura i recuperar el resultat. Haureu de tornar a escriure aquestes biblioteques per utilitzar millisDelay, per recollir la mesura després d'un retard adequat de no bloqueig.

Pas 6: Execució de SpeedStepperSetup amb motor pas a pas i SparkFun Redboard Turbo

Execució de SpeedStepperSetup amb motor pas a pas i SparkFun Redboard Turbo
Execució de SpeedStepperSetup amb motor pas a pas i SparkFun Redboard Turbo
Execució de SpeedStepperSetup amb motor pas a pas i SparkFun Redboard Turbo
Execució de SpeedStepperSetup amb motor pas a pas i SparkFun Redboard Turbo

Per executar l'esbós SpeedStepperSetup realment necessitareu un motor pas a pas, un controlador i una font d'alimentació, i en aquest exemple SparkFun Redboard Turbo.

El diagrama de cablejat anterior (versió pdf) mostra les connexions. A l'esbós SpeedStepperSetup, canvieu la definició SERIAL per #define SERIAL Serial1

Motor pas a pas, font d'alimentació, controlador i protecció

Hi ha molts tipus i mides de motors pas a pas. Aquí s’utilitza un motor pas a pas de dues bobines de 12V 350mA per provar. Per alimentar aquest pas a pas necessiteu una font d'alimentació de 12V o més i superior a 350mA.

Aquesta biblioteca només proporciona una sortida de direcció i pas, de manera que necessiteu un controlador per a la interfície amb el motor pas a pas. L’Easy Driver i el Big Easy Driver controlen el corrent de les bobines del motor perquè pugueu utilitzar una font d’alimentació d’un voltatge més alt de forma segura, per exemple, utilitzant una font de 6V per a un motor de 3,3V. El Easy Driver pot subministrar entre 150 mA / bobina i 700 mA / bobina. Per a corrents més elevats, el Big Easy Driver pot subministrar fins a 2 A per bobina. Llegiu les preguntes més freqüents a la part inferior de la pàgina Easy Drive.

Aquests exemples utilitzen D6 i D7 com a sortides de pas i direcció. Podeu canviar els pins de sortida a qualsevol sortida digital canviant els paràmetres STEP_PIN i DIR_PIN a prop de la part superior de l'esbós.

Programació del Sparkfun Redboard Turbo

Programar Redboard Turbo és problemàtic. Si no es programa, primer premeu el botó de reinici una vegada i torneu a seleccionar el port COM al menú Eines d'Arduino i torneu-ho a provar. Si això no funciona, premeu dues vegades el botó de reinicialització i torneu-ho a provar.

Connexió del controlador fàcil

Dos motors pas a pas de bobina tenen 4 cables. Utilitzeu un multímetre per trobar els parells que es connecten a cada bobina i, a continuació, connecteu una bobina als terminals Easy Driver A i l’altra bobina al terminal B. No importa de quina manera els connecteu, ja que podeu utilitzar el s cmd al menú de configuració per canviar la direcció del moviment.

La font d'alimentació del motor està connectada a l'M + i al GND. Estableix el nivell lògic de la placa amb l'enllaç 3 / 5V. Reduïu l’enllaç per a sortides de microprocessador de 3,3 V, com el SparkFun Redboard Turbo (si el deixeu obert és adequat per a senyals digitals de 5 V, per exemple, UNO, Mega) Connecteu els pins GND, STEP, DIR al microprocessador GND i el pas i pins de sortida de dir. No calen cap altra connexió per accionar el motor.

Cable sèrie USB a TTL

Quan moveu l’esbós SpeedStepperSetup de l’Uno / Mega al Redboard Turbo, podeu substituir ingènuament #define SERIAL Serial per #define SERIAL SerialUSB per adaptar-lo a la connexió sèrie USB Redboard Turbo, però trobareu que la latència del pas resultant és d’uns 10 mS. Això és 10 vegades més lent que l'ONU. Això es deu a com la CPU Redboard gestiona la connexió USB. Per acabar, connecteu un cable USB a un serial TTL a D0 / D1 i configureu # define SERIAL Serial1 per utilitzar la connexió serial de maquinari per controlar el motor pas a pas. L’ús de Serial1 dóna LATÈNCIA: pas a pas: bucle 345uS: 2016uS, que és 3 vegades més ràpid que l’ONU per a la latència de pas i bucle.

Programa Terminal

El monitor sèrie Arduino és una mica més difícil d’utilitzar per controlar el motor pas a pas, ja que heu d’introduir el caràcter a la línia cmd i, a continuació, prémer Retorn per enviar-lo. Un mitjà de resposta més ràpid és obrir una finestra de terminal, TeraTerm per a PC (o CoolTerm Mac), connectada al port COM al cable USB a TTL. Després, en aquesta finestra, prement una tecla cmd l'envia immediatament. Si premeu Retorn, envieu una línia buida.

Configuració del rang de velocitat del motor

Com es va connectar anteriorment, l'Easy Drive està configurat per a passos 1/8, de manera que 1000 passos / segon giraran el motor a 1000/8/200 passos / revolució = 0,625 revolucions per segon o 37,5 rpm com a màxim. Si canvieu les entrades a MS1 / MS2, podeu canviar entre 1/8, ¼, ½ i els passos complets. Per als passos complets, connecteu MS1 i MS2 a GND. Això permetrà velocitats de fins a 300 rpm. L’elecció dels paràmetres MS1 / MS2 adequats us permet ajustar la relació d’engranatges instal·lada entre el motor i la peça impulsada.

Protecció de maquinari

Tot i que la biblioteca SpeedStepper us permet establir límits de posició en el moviment del motor, la fixació de la posició es realitza comptant els passos del programa. Si el motor s’atura, és a dir, el parell insuficient per conduir el motor al següent pas, la posició del programari no estarà sincronitzada amb la posició del motor. Aleshores, quan utilitzeu l'ordre "goHome", el motor superarà la posició inicial. Per evitar danys al maquinari, heu d'instal·lar interruptors de límit als límits durs per desconnectar la font d'alimentació del motor

Configuració del límit de corrent del motor

Primer, configureu-lo al valor més baix del potenciòmetre. és a dir, la tensió a TP1 és mínima. El potenciòmetre és delicat, de manera que no forçeu el potenciòmetre a passar de les parades mecàniques. Ajusteu el motor a una velocitat constant lenta i, a continuació, gireu lentament el potenciòmetre fins que el motor no salti ni es balancegi entre els passos.

Conclusió

Aquest projecte mostra com utilitzar la biblioteca SpeedStepper en una aplicació pràctica. Tot i que la biblioteca AccelStepper proporciona un bon control de posició, es necessitava un control de velocitat per a la sonda de fusió de gel de prototipus per a la recollida de mostres biològiques a Europa, de manera que es va tornar a escriure la biblioteca AccelStepper per proporcionar un control de velocitat amb límits finals i una funció goHome.

Recomanat: