|
Autore |
Messaggio |
opzioni |
picmicro675
postato il: 01.03.2015, alle ore 16:44 |
sparide74: cosi' anche se ho gioco sulla vite (e sui torni senza riga ci sono)avro' il reale spostamento...
Se lo montassi anche sulla vite del movimento potresti anche usare un parametro che ti calcola il backlash.
Poi puoi anche usare un fattore di correzione con un moltiplicatore e divisore in modo da poter parametrizzare il valore da visualizzare.
Anno nuovo, forum nuovo.
Mi sa che lascio. |
|
sparide74
postato il: 01.03.2015, alle ore 17:46 |
ok, grazie quando torno a casa provo, ora sono ancora a lavoro!!!meglio non dirlo in questi tempi... |
|
sparide74
postato il: 01.03.2015, alle ore 21:38 |
ciao jasson ho riscitto il codice la parte programm:
Comunque ho rivisto bene l'encoder e' un rotativo e non sono 500ppi, ma 550 impulsi a giro....Sono arrivato al punto di scrivere sul display, ma che comando devo usare?
'**********************Programm********************************
While true
'Legenda:
'passo vite 5mm
'impulsi x giro 500
'500/5= 100 impulsi per spostare l'asse di 5mm
CentMil=UpDown * 100 'Centomillesimi
mm=CentMil/10000 'millimetri
resto=CentMil mod 10000 'Resto
cent=resto/10 'Centesimi
'??????Stringa da visualizzare uguale a (mm,".",Cent)
'COSA CI INSERISCO?
'LongWordtostr(UpDown,txt5)
' Lcd_Out(1,7,Txt5)
Wend
end. |
|
picmicro675
postato il: 02.03.2015, alle ore 07:32 |
500 ppr su 5 mm = 10 micron per impulso.
Quindi il tuo contatore se rappresenta per esempio 56532 impulsi a te basta 565,32
Il calcolo dovrebbe essere
Dim UpDown as longint
Dim str5 as string[20]
str5 = FloatToStr(UpDown/100)
Lcd_Out(1,7," ")
Lcd_Out(1,7,str5)
Questa sarebbe la via più breve, ma potrebbe anche essere la più costosa di risorse dato che fa uso della libreria in floating point.
Si può in questo modo anche assumere dei parametri correttivi come un moltiplicatore ed un divisore che possono aggiustare il read-out ad un valore voluto.
Per esempio se fosse il passo di 10 mm, basterebbe usare un moltiplicatore di 2 ed un divisore di 1. Se fosse passo 6, si potrà usare un moltiplicatore di 6 ed un divisore di 5.
Poi per il backlash si potrebbe mettere un parametro che quando sente l' inversione di marcia assume un conteggio memorizzato che non influirà sulla variabile del conteggio.
Per facilitazione si dovrà adottare la stessa routine di calcolo per la conversione in mm e sottomultipli.
Usando solo interi si potrebbe intentare come segue:
Dim UpDown as int
Dim str5 as string[15]
Dim cnt as Byte
Symbol Pos = 7 ' Posizione iniziale del numero
str5 = IntToStr(UpDown)
cnt = StrLen(str5)
while cnt > 0
Lcd_Out(1,Pos + cnt,str5[cnt])
Delay_ms(20)
Dec(cnt)
if cnt = StrLen(str5) - 2 then
Lcd_Out(1,Pos + cnt - 1,".") ' metto il punto
Dec(cnt)
end If
wend
Questo assume che lo spostamento è esattamente un centesimo di millimetro per impulso.
Che micro usi per questo progetto ?
Anno nuovo, forum nuovo.
Mi sa che lascio. |
|
sparide74
postato il: 02.03.2015, alle ore 13:28 |
ciao, uso il pic 16f628
prima sono partito con il 16f84, ma ha pochissima memoria...
Questa sera provo! |
|
picmicro675
postato il: 02.03.2015, alle ore 16:20 |
È solo un abbozzo, non ho provato.
Ma se mi dici che hai il 16F628 magari lo metto al simulatore.
Anno nuovo, forum nuovo.
Mi sa che lascio. |
|
sparide74
postato il: 02.03.2015, alle ore 19:21 |
mi da errore su symbol...... |
|
sparide74
postato il: 02.03.2015, alle ore 19:28 |
jasson mi hai bloccato a meta strada!!!! |
|
Jasson
postato il: 02.03.2015, alle ore 19:42 |
Ti avevo detto di eseguirei 2 operazioni matematiche e stampare i risultati su lcd.
Lo hai fatto?
|
|
sparide74
postato il: 02.03.2015, alle ore 19:49 |
mi da errore:
str5 = FloatToStr(UpDown/100) |
|
|