|
Autore |
Messaggio |
opzioni |
sparide74
postato il: 08.03.2015, alle ore 11:15 |
Quindi per il mio scopo devo metterci un encoder da 2500imp cosi' mi calcola i millesimi e automaticamente vede i centesimi a conteggio pari...giusto? |
|
Jasson
postato il: 08.03.2015, alle ore 11:32 |
Prima devi sapere la risoluzione dell'encoder e poi fare i calcoli.
Automaticamente non fa nulla, per ogni risoluzione di encoder dovrai eseguire calcoli diversi.
Io nel firmware scritto, ho preso come riferimento un encoder da 100 impulsi ogni 5 millimetri, ovvero 20 impulsi al millimetro, infatti per calcolare i millimetri divido il conteggio per 20.
Se vuoi visualizzare anche i millesimi, dovrai utilizzare un encoder che abbia come MINIMO 1000 impulsi al millimetro, e dovrai modificare i calcoli di conseguenza.
|
|
sparide74
postato il: 08.03.2015, alle ore 11:43 |
encoder 2500imp asse a giro 5mm
'calcolo i mmm Y
mmY=contY/100
'calclo il resto
cenY=contY mod 100
questa operazione non serve
'calcolo i centesimi Y
cenY=cenY*1 |
|
Jasson
postato il: 08.03.2015, alle ore 11:49 |
2500 impulsi ogni 5 millimetri sono 100 impulsi a millimetro, quindi, si è giusto dividere per 100.
Quindi moltiplicare cenY*1 non ha senso e puoi eliminare l'istruzione.
Facendo quella modifica avrai una risoluzione di 1 centesimo.
|
|
sparide74
postato il: 08.03.2015, alle ore 11:54 |
infatti lo scritto che non serviva.
Esempio sempre encoder 2500 ,passo vite 4mm.
mmY= conty/156,25 come si fa a gestire in questo caso la virgola? |
|
sparide74
postato il: 08.03.2015, alle ore 11:58 |
devo fare sempre l'operazione con il mod? |
|
Jasson
postato il: 08.03.2015, alle ore 12:06 |
Mi sà che c'è da utilizzare variabili che accettano la virgola mobile, quindi non più integer.
E di conseguenza cambiare pure tutte le stringhe.
In pratica modificare il 90% del programma |
|
sparide74
postato il: 08.03.2015, alle ore 12:15 |
ok solo curiosita'....
Comunque grazie x il tempo che hai impegnato x me e x tutti quelli interessati al progetto!
|
|
picmicro675
postato il: 08.03.2015, alle ore 12:47 |
sparide74: encoder 2500imp asse a giro 5mm
5 mm / 2500 = 500 impulsi per millimetro = 0,002 mm (2 micron) per impulso.
Con 500 impulsi per giro si ha 1 centesimo per millimetro. La visualizzazione è diretta e basta mettere il punto al secondo decimale.
Però potrebbe esserci un encoder con valore a scala binari, p.es 512 e qui ci vuole i fattori di correzione.
Se il passo fosse diverso si applica un moltiplicatore e divisore in byte. Tutto per evitare i calcoli in virgola mobile. Però ovviamente si dovrebbe moltiplicare la base per 1000 per avere i millesimi, poi la rappresentazione si mette la virgola alla terza cifra.
Esempio
Contatore 32 bit, conteggio massimo 2`147`483 e visualizzazione in millesimi
Passo 4 mm
Fattore di correzione 4/5
Risultato Contatore * 1000 * 4 / 5 = contatore * 800.
Comunque io lascerei il programma con il menu di parametrizzazione e/o mettere i fattori correttivi in eeprom.
Per ultimo encoders con alta risoluzione vanno su di prezzo. Forse si può avere il compromesso di mettere una puleggina di moltiplica ed un encoder con meno impulsi con un po di errore meccanico.
Anno nuovo, forum nuovo.
Mi sa che lascio. |
|
Jasson
postato il: 08.03.2015, alle ore 13:08 |
Jasson: Mi sà che c'è da utilizzare variabili che accettano la virgola mobile, quindi non più integer.
E di conseguenza cambiare pure tutte le stringhe.
In pratica modificare il 90% del programma
Che imbecille che sono, basta applicare un pò di matematica.
2500 impulsi 4 millimetri, sono 4/2500=0,0016 ovvero 16 decimi di millesimo o 16 centesimillesimi chiamateli come volete.
Quindi basta trasformare tutto in centesimillesimi, per evitare di utilizzare virgole.
Per fare questo mi serve una nuova variabile word centiX per l'asse X e centiY per l'asse Y
dim centiX,centiY as word
poi basta che porto tutto in centesimillsesimi moltiplicando per 16 e poi faccio le opportune divisioni, per ricavare millimetri e centesimi.
'Calcolo i centesimillesimi
centiX=contX*16
'calcolo i mmm X
mmX=centiX/10000
'calcolo il resto
cenX=centiX mod 10000
'calcolo i centesimi
cenX=cenX/100
|
|
|