Con le mie minime basi di elettronica e con il fondamentale aiuto di un amico Carlo Nicolucci sono riuscito a pilotare un motore passo passo bipolare attraverso il motor driver a4988.
Per risolvere il problema della costanza della velocità/rpm (tempo costante tra ogni singolo step), ho utilizzato la libreria TimerOne ed ho collegato il pin STEP del driver al pin 10 di Arduino. tramite la libreria ho utilizzato il comando
pwm(pin, duty, period);
Timer1.pwm(10, 512, period)
in questo modo sul pin 10 si genera un segnale ad onda quadra 0/+5V (50%) con un periodo indicato in funzione e quantificato in microsecondi.
Funziona molto bene con il grande vantaggio di poter utilizzare la CPU di Arduino per fare altri controlli tipo controllo della velocità, verso, gestione di led e/o LCD senza modificare in alcun modo la velocità di rotazione....
PERO'....
da qualche parte ho letto che questa procedura di controllo del motore passo passo non è corretta...
qualcuno può confermare o smentire ed eventualmente spiegarmi il motivo?
Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie.
Un motore passo passo fa un passo quando al driver A4988 arriva un impulso.
Un segnale PWM ha una frequenza fissa e solo la durata del impulso é variabile. Percui il motore andrá sempre alla stessa velocitá (ecetto quando il PWM é a 0% o 100%).
uwefed:
Un motore passo passo fa un passo quando al driver A4988 arriva un impulso.
Un segnale PWM ha una frequenza fissa e solo la durata del impulso é variabile. Percui il motore andrá sempre alla stessa velocitá (ecetto quando il PWM é a 0% o 100%).
Ciao Uwe
No, funziona tutto perfettamente con velocità da 0 a 100 rpm testate ma anche oltre (il limite diventa il motore) perché ho utilizzato la libreria TimerOne che permette di settare il segnale PWM non solo nel duty che si setta al 50% (quindi 512) ma anche nel periodo
La velocitá del motore dipende esclusivamente dalla frequenza del segnale STEP. Percui un segnale PWM che normalmente tiene costante la frequenza non ha nessuna funzione.
Ciao Uwe
:: Timer1 ::
This library is a collection of routines for configuring the 16 bit hardware timer called Timer1 on the ATmega168/328. There are 3 hardware timers available on the chip, and they can be configured in a variety of ways to achieve different functionality. The development of this library began with the need for a way to quickly and easily set the PWM period or frequency, but has grown to include timer overflow interrupt handling and other features. It could easily be expanded upon or ported to work with the other timers.
permette di settare il periodo (o la frequenza se preferisci) del segnale PWM
quindi è possibile pilotare il motore passo passo collegando il segnale generato al pin STEP del driver....
il comando in questione è il seguente:
pwm(pin, duty, period)
Generates a PWM waveform on the specified pin. Output pins for Timer1 are PORTB pins 1 and 2, so you have to choose between these two, anything else is ignored. On Arduino, these are digital pins 9 and 10, so those aliases also work. Output pins for Timer3 are from PORTE and correspond to 2,3 & 5 on the Arduino Mega. The duty cycle is specified as a 10 bit value, so anything between 0 and 1023. Note that you can optionally set the period with this function if you include a value in microseconds as the last parameter when you call it.
correggetimi se sbaglio, ma se varia la frequenza allora in tal caso non è più definibile un segnale PWM che dovrebbe avere una frequenza fissa e variare solo il duty cycle tra high e low?
Uwe, per favore mi spieghi perché complicate ed eventualmente come semplificarle?
ho necessità di far girare un motore passo passo a velocità definita e costante.
Contemporaneamente devo poter leggere un segnale di un pulsante, eseguire dei calcoli ed aggiornare un display led senza variazioni di velocità di rotazione del motore.
La variazione di velocità e direzione non sono un problema.
@ -zef-
Il PWM significa che si varia il duty cycle per regolare la potenza senza avere delle perdite che ci sono se si farebbe una regolazione lineare.
In se il PWM non definisce la frequenza ma la frequenza si sceglie in funzione di altri fattori. Spesso si cerca di stare sopra i 20kHz per non creare un rumore udibile. La frequenza massima é data dai transistori/MOSFET/ rettificatori che aumentano le perdite in funzione della frequenza.
@gtoffoli
Crei un segnale PWM con frequenza variabile dove un semplice segnale rettangolare con freqeunza variabile basterebbe per far funzionare il driver per motori.