Buona sera a tutti, secondo voi qual è il modo migliore per generare impulsi per pilotare un motore stepper???
sto implementando un controllore che in base al valore di un potenziometro mi regola la velocità di un motore stepper, il potensiometro è collegato a un pendolo inverso. Per ovvi motivi l' oprazione di calcolo della velocità deve essere fatta in modo da permettere l' esecuzione di tutti i calcoli necessari per la determinazione dei parametri del controllore.
diciamo che la frequenza di questi impulsi deve essere da 1Hz a circa 500Hz, ogni impulso deve durare 1ms circa.
Come posso fare? io vorrei lavorare il più possibile con le interruzioni o con le periferiche visto che ho solo 10ms per aggiornare la cinematica e i parametri del sistema.
Qualcuno di voi ha mai avuto a che fare con problemi di questo tipo?
la relazione sarebbe F=k*errore
errore=valore ottenuto dal potenziometro
k= costante da definire in base alle proprietà del sistema
F=frequenza degli impulsi
una dinamica da 1Hz a 500Hz sarebbe un ottimo risultato. Il TIMER1 è GIà in uso per il tempo di campionamento, Tc=10ms.
Utilizzo un pic18f14k22 e mikroC. grazie.
Generare Impulsi con PIC per motore STEPPER
Moderatore:
Paolino
10 messaggi
• Pagina 1 di 1
0
voti
simo85 ha scritto:http://ww1.microchip.com/downloads/en/AppNotes/00857B.pdf
Simo85 io sto lavorando con un motore stepper! Il dc brushless è un altro tipo di macchina elettrica. Purtroppo il factsheet che mi hai passato non fa per me!
0
voti
torla91 ha scritto:Qualcuno di voi ha mai avuto a che fare con problemi di questo tipo?
Io si, ma non uso un PIC uso un STM32.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
torla91 ha scritto:F=k*errore
Uno stepper comandato in frequenza si comporta molto suppergiù come un motore a corrente continua comandato in tensione, perciò puoi vedere questo link
http://ww1.microchip.com/downloads/en/AppNotes/00964A.pdf
Per stabilizzare il pendolo ci vorrà un PID o qualcosa di simile, quest'altro link descrive una certa soluzione:
http://www.robot-italy.net/roboforum/blog.php?b=184
Per lo stepper vero e proprio non so dirti nulla, in generale ho l'impressione che la teoria è sempre la stessa ma le soluzioni sono tante e difficilmente si adattano.
Dovrebbe avere il vantaggio che basta contare gli impulsi e hai già l'avanzamento.
0
voti
caro ecotan, grazie per i consigli, però anche questa application note non fa per me.. per quanto rigurada il controllo, sicuramente ci vorrà un PID ma nel mio caso userò forse altre tecniche di controllo. ci sarà un kalman filter e altre cose dentro!
per il momento sto sviluppando l' hardware, poi con matlab e simulink si penserà al controllo..
tardofreak, come hai risolto il tuo problema? dal punto di vista logico come hai operato? quali tecniche si possono usare?
per il momento sto sviluppando l' hardware, poi con matlab e simulink si penserà al controllo..
TardoFreak ha scritto:torla91 ha scritto:Qualcuno di voi ha mai avuto a che fare con problemi di questo tipo?
Io si, ma non uso un PIC uso un STM32.
tardofreak, come hai risolto il tuo problema? dal punto di vista logico come hai operato? quali tecniche si possono usare?
0
voti
L'ho risolto semplicemente inviando degli impulsi.
La temporizzazione è ottenuta mediante un timer e tutta la funzione di gestione del movimento del motore rimane dentro la funzione di interrupt.
Il mio però è un controllo di posizione dove ho delle funzioni per fare andare avanti o indietro lo stepper.
Quindi rampa di accelerazione, tratto a velocità costante e rampa di decelerazione.
In un secondo tempo, per esigenze particolari, la rampa di decelerazione sono diventate due con due pendenze diverse.
In ogni caso il mio problema era quello di avere un'accelerazione assolutamente costante, quindi ad ogni interrupt (cioè ad ogni impulso) ho dovuto ricalcolare il tempo dell' impulso con un'operazione di radice quadrata su numeri interi (ed ho utilizzato il metodo babilonese). Il movimento doveva essere assolutamente fluido e si doveva arrivare a 3000 impulsi al secondo, non si doveva capire che il motore era uno stepper e questo implicava che il micro fosse sufficientemente potente da gestire il tutto con fluidità.
Le cose si sono complicate quando ho dovuto anche gestire un'interrupt ciclica con frequenza 8kHz dove non potevo sgarrare, la frequenza della seconda interrupt doveva essere assolutamente precisa.
A questo ho dovuto aggiungere anche la gestione di un display a LED multiplexato ed un programma che gira in parallelo a tutta la baracca e che serve una linea di comunicazione seriale.
Non è escluso che in futuro dovrò aggiungergli una connettività USB mediante la classe CDC .
Alla fine della fiera ho optato per un STM32F103, un micro a 32 bit che lavora a 72MHz.
La temporizzazione è ottenuta mediante un timer e tutta la funzione di gestione del movimento del motore rimane dentro la funzione di interrupt.
Il mio però è un controllo di posizione dove ho delle funzioni per fare andare avanti o indietro lo stepper.
Quindi rampa di accelerazione, tratto a velocità costante e rampa di decelerazione.
In un secondo tempo, per esigenze particolari, la rampa di decelerazione sono diventate due con due pendenze diverse.
In ogni caso il mio problema era quello di avere un'accelerazione assolutamente costante, quindi ad ogni interrupt (cioè ad ogni impulso) ho dovuto ricalcolare il tempo dell' impulso con un'operazione di radice quadrata su numeri interi (ed ho utilizzato il metodo babilonese). Il movimento doveva essere assolutamente fluido e si doveva arrivare a 3000 impulsi al secondo, non si doveva capire che il motore era uno stepper e questo implicava che il micro fosse sufficientemente potente da gestire il tutto con fluidità.
Le cose si sono complicate quando ho dovuto anche gestire un'interrupt ciclica con frequenza 8kHz dove non potevo sgarrare, la frequenza della seconda interrupt doveva essere assolutamente precisa.
A questo ho dovuto aggiungere anche la gestione di un display a LED multiplexato ed un programma che gira in parallelo a tutta la baracca e che serve una linea di comunicazione seriale.
Non è escluso che in futuro dovrò aggiungergli una connettività USB mediante la classe CDC .
Alla fine della fiera ho optato per un STM32F103, un micro a 32 bit che lavora a 72MHz.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Per rispondere non quotare tutto il messaggio!
grande, sei un eroe! comunque, se tu dovessi risolvere il mio problema, ovvero generare impulsi a frequenza variabile come faresti???? io vado a 16MHz con un pic18f
grande, sei un eroe! comunque, se tu dovessi risolvere il mio problema, ovvero generare impulsi a frequenza variabile come faresti???? io vado a 16MHz con un pic18f
1
voti
Come farei?
Scriverei il programma, non capisco la domanda.
Scriverei il programma, non capisco la domanda.

"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
0
voti
Per rispondere nono quotare tutto!
grazie! ho scritto il programma e adesso funziona!
ragazzi ho risolto usando come fonte di clock un interrupt generato dal timer0 che va in overflow ogni 128ns, a ogni overflow mi incrementa una variabile che viene poi usata per generare gli impulsi.
un saluto, 3d chiuso grazie.
grazie! ho scritto il programma e adesso funziona!
ragazzi ho risolto usando come fonte di clock un interrupt generato dal timer0 che va in overflow ogni 128ns, a ogni overflow mi incrementa una variabile che viene poi usata per generare gli impulsi.
un saluto, 3d chiuso grazie.
10 messaggi
• Pagina 1 di 1
Torna a Realizzazioni, interfacciamento e nozioni generali.
Chi c’è in linea
Visitano il forum: Nessuno e 5 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



