Newsgroup: it.hobby.robotica
Titolo: Driver per motori passo-passo

Ciao a tutti.
Sto sviluppando un sistema di controllo per la mia fresetta e ho appena
finito di sistemare il modulo di controllo dei motori. Come ho promesso
qualche post addietro metto a disposizione il mio lavoro nel caso possa
essere di aiuto a qualcuno o nel caso qualcuno voglia darci un'occhiata e
dare dei suggerimenti.
Il circuito si basa su un PIC 12F675, e gestisce un solo motore partendo da
un segnale di controllo che può essre dato in due modi.
Il primo modo di funzionamento è step by step, ovvero in un filo si da il
clock e nell'altro la direzione. Nel secondo modo un filo da la direzione e
il secondo l'"acceso/spento".
L'idea era di collegare direttamente questi moduli alla parallela e dare il
clock da PC, ma in realtà ho abbandonato l'idea a causa della incredibile
lentezza della gestione dee porte di comnicazione in ambiente windows. Ora
capisco perchè tutti i programmi di gestione delle attrezzature amatoriali
CNC girano sotto DOS!  =)
Olivier.
http://digilander.libero.it/astrofoto/temp/driver_passo.zip


Olivier, scusa, sei sicuro di questo?
Pensa ad una seriale che viaggia (sotto Windows) a 115K, se lo usi come
clock su un motore da 200 passi/giro hai 575giri al SECONDO, semplicemente a
9600baud fai 48 giri al secondo.... non credo sia un problema di Winows.
Sbaglio forse qualcosa?
Ciao

 Sbaglio forse qualcosa?
Ciao, è un'idea simpatica quella di usare il clock della seriale, ma il
fatto è che hai solo un canale per porta e hai solo delle velocità
predefinite.
La mia idea era qualla di generare tre clock asincroni tra loro tramite la
parallela, usando in VB tre timer con temporizzazioni diverse. Il fatto è
che da quanto ho letto (e in parte sperimentato) windows non riesce a
scrivere sulla parallela più di una volta ogni 30ms, e a me servirebbe di
scriverci sopra una volta ogni 5 (200hz). Inoltre la funzione delay di
kernel32.dll riesce a darti temporizzazioni precise al millesimo di secondo,
non oltre (per fare dei clock decenti attorno al centinaio di Hz dovrei
invece avere la precisione di qualche decina/centinaia di us).
In sostanza ora sto pensando di usare la parallela come on/off, e modulare
la velocità con *una specie* di PWM, ovvero inserire n pause > 30ms durante
la rotazione del motore. Questo equivale ad avere un movimento "a scalini",
ma per ora è chià più che sufficiente.
Se qualcuno sa come dare un calcione in culo alla parallela e farla andare
come si deve sono veramente tutt'orecchi!
Olivier.

Evidentemente non ho capito un gran chè :-(
Io ho usato la parallela direttamente:
con tre pin seleziono l'asse X, Y, Z
con quattro pin invio la sequenza al motore
In questo modo non ho problemi di "tempi precisi" e la velocità è maggiore
delle capacità della mia fresa :-)
dovresti avere nel caso dei 30ms 33passi al secondo (da dividere per i tre
motori nel caso più sfortunato).
In effetti i miei test li ho fatti con SW in DOS e sono stupito di questo
limite (ne avevo sentito parlare per Win XP ma pensavo a velocità
decisamente maggiori).
Non comprendo cosa faccia il PIC, non può esserti di aiuto?
magari inviando al pic la sequenza passi per ogni motore e quindi lo start,
tipo così:
X: 000011111000000101010
Y: 001111111100000110011
Z: 111100000000000000000
START
poi ripeti quando il pic ha eseguito
Ciao

Mi date un link al vostro lavoro se l'avete?
Grazie mille
--
INTERNET NICKNAME - Einhader
LA VITA - Politecnico di Torino Facoltà di Ingegneria Meccanica
                                 Dipartimento di Meccanica
LO SPORT - Power Line Gym - Campioni mondiali W.P.F.
LA FILOSOFIA - The differences are in our mind not in our heart


 > 
http://digilander.libero.it/astrofoto/temp/driver_passo.zip
Il link era dopo la firma.

 magari inviando al pic la sequenza passi per ogni motore e quindi lo
start,
Il pic trasforma il clock dato dal pc nella giusta sequanza di impulsi per
far girare il motore.
Potrei cambiare vite senza fine e metterne una con un passo largo (M10
ps1.5), dopo di che programmare il pic perchè muova il motore 2 volte per
ciclo di clock (interrupt sia sul rising che sul falling edge). Con un colpo
di clock ogni 30ms avrei 66 passi al secondo (quasi mezzo mm/s) che cmq è un
po poco!
Un'idea che mi viene or ora è quella di programmare il pic perchè esegua 20
passi (un decimo di mm) ogni colpo di clock, ma avrei cmq un movimento "a
gradini" e non continuo con clock asincrono dei vari motori.
Uffa, è mai possibile che windows sia così incapace di usare l'HW a basso
livello? Ora passo a linux o mi rimetto a spolverare il Turbo Pascal!  =)
Olivier.

ops,hai ragione,scusa.
Grazie.
--


Con il tuo pic č possibile fargli fare anche il mezzo passo?

> Con il tuo pic č possibile fargli fare anche il mezzo passo?
Gli fai fare quello che vuoi, doppia fase o mezzo passo.
Se ti ci metti un po dietro magari riesci anche a tirare fuori un rozzo
microstepping in PWM software. Se scrivi qualche nuovo firmware mandamelo,
cosě lo allego al pacchettino per il prossimo che lo scarica...
Olivier.

 CNC girano sotto DOS!  =)
In effetti il caro e buon vecchio dos (sono un nostalgico hehe) aveva il 
completo controllo della macchina e per alcune applicazioni credo sia 
ancora il migliore ;-)
Tempo fa ho sentito parlare di schede parallele *accelerate* ma non 
ricordo più dove l'avevo letto :-(
Un'altra cosa che mi viene in mente è un quarzo a frequenza variabile ma 
per questo l'elettronica andrebbe un po' stravolta.
Dato che non sono esperto in materia ho solo cercato di dare alcuni 
spunti anche se per il quarzo non saprei da dove cominciare. Per la 
parallela accelerata se riusciro' a ritrovare il link mi faro' sentire.
Per ora grazie 1k.
-- 
Claudio(BS)
per rispondere aggiungi claudio
Posted from X-Privat Free NNTP server - 
www.x-privat.org

 decisamente maggiori).
Ho fatto un bel po di prove e sono giunto finalmente a risultati
soddisfacenti. Il problema di windows non sta nella parallela, ma
nell'imprecisione della API Sleep() di kernel32.dll comunemente usata per le
routine di delay. Per farti un'idea ecco la tabellina:
T. Nominale     T. Reale Min    T. Reale Max
1                      0.1                   5.5
5                      5.1                   9.9
10                    10                    14.8
50                    49                    53.2
Il problema l'ho risolto scrivendo una routine di delay che fa uso a basso
livello del "Performance Counter", un contatore molto preciso e veloce
presente nei processori dall'MMX. Ora riesco ad avere delle temporizzazioni
precise a qualche decina di us. Il problema ora è gestire i cicli di clock
contemporaneamente da un unico programma. Sto scrivendo in VB6 e le mie
scarse capacità di programmatore non mi vengono incontro. Ho risolto il
problema creando 3 eseguibili separati e lanciandoli contemporaneamente con
un programma principale, così lascio a windows il compito di multitaskare il
tutto. Se qualcuno ha un'idea più elegante...
Olivier.

> Il circuito si basa su un PIC 12F675, e gestisce [..]
Ho scritto un nuovo firmware corretto per lo step mode: quello di prima dava
uno step sia sul rising che sul falling edge, questo invece lo da solo sul
rising.
In più questa nuova versione campiona 7 volte il segnale di clock e media i
campionamenti in modo tale da evitare disturbi o false letture.
Olivier.

bravo Oliver....
"Olivier" <ilgalla@MAPS_ONlibero.it> ha scritto nel messaggio
news:YkTub.128476$vO5.5...@twister1.libero.it...


> bravo Oliver....
Olivier, prego...  =)
Ora tra un esame e l'altro sto provando varie configurazioni di diodi per
ottenere qualcosa di più in coppia/velocità massima.
Olivier.