PDA

Visualizza Versione Completa : Arduino, motori stepper e controller



KymyA
07-11-24, 11:48
Ma perché chiedo a voi che non sapete un cazzo di niente? Se non forse discorsi filosofici sulla corretta temperatura dell'acqua assorbita da una spugna per pugnette o il titolo del film dove alla tipa massacrata di botte escono dei polpi vendicativi dalla figa che uccidono i violentatori

comunque...
ho realizzato un progetto con Arduino per la movimentazione avanti-indietro di un prodotto... display lcd, sensori ultrasonici per le distanze, fine corsa, menu con joypad ed altre bellezze ma sui motori stepper non ho sta gran esperienza.

Se il motore va lento, immagino che per velocizzarlo si possa solo utilizzare una sorta di puleggia o vite di Archimede con passo maggiore visto che la coppia è elevata e comunque riuscirebbe a muovere il carico (non parliamo di tonnellate di carico)
Quindi chiedo, a parte velocizzare il motore riducendo la pausa tra gli impulsi, via software c'è ben poco da fare no?
Dovrei 1)cambiare motore o 2)inserire una sorta di "rapporto"

Giusto?

-=S8=-
07-11-24, 13:26
Formatta

Il Mira
07-11-24, 13:32
chatgpt è tua amica
Per aumentare la velocità di un motore stepper ci sono principalmente queste opzioni:


Software: Come hai detto, puoi ridurre la pausa tra gli impulsi (aumentando la frequenza con cui invii i segnali di step). Tuttavia, questo ha dei limiti, perché oltre una certa frequenza il motore stepper perde coppia e può arrivare a "stallarsi" (cioè bloccarsi o perdere passi).

Rapporto meccanico: L'idea di usare una puleggia o una vite con un passo maggiore è un'ottima strada per amplificare la velocità. Se il carico non è eccessivo e il motore ha coppia sufficiente, una configurazione a pulegge o un sistema di trasmissione con rapporti ti può permettere di ottenere la velocità desiderata senza cambiare motore.

Motore diverso: Se il carico richiede una velocità ancora maggiore e il motore attuale non ce la fa neanche con rapporti o regolazioni di impulsi, puoi considerare di usare un motore con specifiche più adatte. I motori DC, ad esempio, sono più veloci degli stepper, ma richiedono un feedback di posizione, come un encoder.

Lolliker
07-11-24, 13:51
#include <AccelStepper.h>

AccelStepper stepper(AccelStepper::DRIVER, stepPin, dirPin);

void setup() {
stepper.setMaxSpeed(1000); // Massima velocità in passi al secondo
stepper.setAcceleration(500); // Accelerazione in passi al secondo quadrato
}

void loop() {
stepper.moveTo(200); // Sposta il motore di 200 passi
stepper.run();
}


const int stepPin = 3;
const int dirPin = 4;
const int stepsPerRevolution = 200;
const int speedHigh = 1000; // Microsecondi di pausa tra gli impulsi
const int speedLow = 2000; // Microsecondi di pausa tra gli impulsi

void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}

void loop() {
digitalWrite(dirPin, HIGH); // Direzione oraria
for (int x = 0; x < 2 * stepsPerRevolution; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(speedHigh);
digitalWrite(stepPin, LOW);
delayMicroseconds(speedHigh);
}
delay(1000); // Pausa di un secondo
digitalWrite(dirPin, LOW); // Direzione antioraria
for (int x = 0; x < 5 * stepsPerRevolution; x++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(speedLow);
digitalWrite(stepPin, LOW);
delayMicroseconds(speedLow);
}
delay(1000); // Pausa di un secondo
}

https://jungleworks.com/wp-content/uploads/2020/01/UX-marketing.gif

KymyA
07-11-24, 15:00
Potevo usare chatgpt se capisse cosa vuol dire "cosi" o "aggeggi"

Il codice è quello grazie-al-cazzo ma prova ad abbassare il delay sotto una soglia e vedi che succede.

Lolliker
08-11-24, 17:29
Potevo usare chatgpt se capisse cosa vuol dire "cosi" o "aggeggi"

Il codice è quello grazie-al-cazzo ma prova ad abbassare il delay sotto una soglia e vedi che succede.

Abbassare i valori di delayMicroseconds(speedHigh) e delayMicroseconds(speedLow) comporterà un aumento della velocità di rotazione del motore stepper, poiché gli impulsi verranno inviati più rapidamente.

Effetti specifici dell'abbassamento del delay:

Aumento della velocità del motore: Con un delay inferiore, il motore riceve impulsi a un ritmo più veloce, facendo sì che il motore giri più rapidamente.

Possibile perdita di passi: Se il delay è troppo breve, il motore potrebbe non avere il tempo sufficiente per completare un passo prima di ricevere il prossimo impulso, causando una perdita di passi e un movimento errato.

Aumento del calore: Un motore che funziona a velocità più elevate può generare più calore, che potrebbe portare a surriscaldamento se non adeguatamente gestito.

Diminuzione della coppia: A velocità più elevate, la coppia del motore può diminuire, rendendo più difficile il movimento di carichi pesanti.

Ti consiglio di abbassare gradualmente i valori del delay per trovare un equilibrio ottimale tra velocità e prestazioni del motore, evitando problemi di surriscaldamento e perdita di passi.

MaoMao
08-11-24, 17:39
Perché hai usato un brushless?
Hai esigenze particolari?
Un semplice ed economico motore a corrente continua con inverter, non andava bene?
Hai bisogno di posizioni intermedie o solo carico/scarico?
Se è l'ultima, passa a corrente continua, prodotti commerciali per cui trovi riduttori meccanici come ti pare e piace, inverter con due soldi e facilmente programmabili, ecc. ecc.