home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


MickroBasic pro,gestione " . " per asse lineare
     
Autore Messaggio opzioni
picmicro675




una ogni 10 livelli


postato il:
08.03.2015, alle ore 13:31
Jasson:
2500 impulsi ogni 5 millimetri sono 100 impulsi a millimetro,

Forse la calcolatrice funziona male ?
2500 / 5 = 500.

Poi un po di masochismo.........

Se il micro ha 4 piedini con IOC, come farebbe un bravo ingegnere a capire quale è stato il fautore dell' interrupt ?
Chiaro che anche non ho trovato dettagli della Microchip a proposito come scovare quale è tra quattro bit quello che mi ha dato l' interrupt.
Per un certo caso si suppone che sia almeno un evento che sia di frequenza 10 volte meno del clock interno, da permettere di catturare lo stato della porta ancor prima che un altro bit cambi di stato.
Forse come limite avendo una frequenza di clock a 20 MHz il risultato sarebbe 5MHz clock interno, poi diviso 4 per il numero dei bit interessati e diviso per il periodo di cattura dello stato della porta ed il tempo che serve a processare. Approssimatamente direi che la frequenza non dovrebbe essere superiore a 100 KHz.
Forse qualcosa più di quello, l' immagine dello stato della porta prende un ciclo macchina. Come scritto precedentemente si potrebbe usare i timer per catturare i conteggi di una fase.

Quindi la velocità di rotazione implicata potrebbe essere
Max_Freq / PPR * 60sec = 2400 RPM con un encoder da 2500 PPR.

Io voglio capire come si fa con gli encoder al nibble alto della porta B. Solo uno sfizio.



Anno nuovo, forum nuovo.
Mi sa che lascio.
picmicro675




una ogni 10 livelli


postato il:
08.03.2015, alle ore 13:42
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

Quello chiaramente non è una cosa che si può fare con la versione free di mikrobasic
Inoltre richiede una libreria voluminosa e non veloce come adottare il calcolo in micrometri o addirittura in passo di 100 nanometri, se si vuole ridurre il massimo conteggio.



Anno nuovo, forum nuovo.
Mi sa che lascio.
Jasson





postato il:
08.03.2015, alle ore 13:43
Non si può utilizzare 2 encoder sullo stesso interrupt, perchè parliamo di encoder su 2 motori diversi, che per assurdo potrebbero pure girare sincronizzati.

Oppure non girano sincronizzati, ma magari vanno molto piano, quindi la velocità dell'encoder è lenta.

Non puoi sapere come gireranno i 2 motori, e quindi non puoi sapere come arriveranno gli impulsi.





picmicro675




una ogni 10 livelli


postato il:
08.03.2015, alle ore 14:11
Sì è masochismo...
Rimane una mia intenzione di scoprire con IOC a 4 bit quale bit ha causato l' Interrupt.
Per esempio in linguaggio Jal, esiste una libreria e si può dare il bit che si vuole tener sott'occhio.
Ammesso che non ho approfondito di questa libreria, ma rimane nella mia intenzione provare ancora.



Anno nuovo, forum nuovo.
Mi sa che lascio.
DryDen





postato il:
09.03.2015, alle ore 12:57
per sapere quale encoder ha girato basta salvarsi in una variabile l'ultimo stato di portb e quello attuale. Per differenza si ottiene quello che ha scatenato l'interrupt.
PERò bisogna avere una routine di interrupt molto rapida, altrimenti una volta scatenato il primo interrupt, il micro entra nella routine e se in questo momento viene scatenato il secondo interrupt, questo andrà perso.

Non mi stancherò mai di ripetere che i simulatori NON vanno usati.

Mole volte mi è capitato di scrivere parti di codice in Mikrobasic che sul simulatore risultavano perfette ma poi in REALE il micro nemmeno partiva o faceva quel che voleva.

Il TOPIC non suscita interesse in quanto l'autore non ha bisogno di sapere a quanti gradi cuocere il pane, ma ha bisogno del panificio completo!

In generale comunque do 3 consigli all'autore del TOPIC:
1) butta via il 16f628, poche risorse e poca velocità per i tuoi scopi
2) Con i 2kb della limitazione del compilatore non ci fai nulla, procurati una licenza
3) Prova in reale e esegui accuratamente il DEBUG, è l'unica garanzia di funzionamento


vedrai che quando proverai in REALE il tutto, il pic conterà pazzi per mazzi, dovuto al fatto che l'encoder va FILTRATO, altrimenti genera spurie sugli switch e il pic leggerà falsi positivi.
DryDen





postato il:
09.03.2015, alle ore 12:57
PS: Come non apprezzare il lavoro che fanno i 2 utenti che seguono l'autore del topic....

Tanto di cappello!
Jasson





postato il:
09.03.2015, alle ore 13:43
DryDen:
per sapere quale encoder ha girato basta salvarsi in una variabile l'ultimo stato di portb e quello attuale. Per differenza si ottiene quello che ha scatenato l'interrupt.
PERò bisogna avere una routine di interrupt molto rapida, altrimenti una volta scatenato il primo interrupt, il micro entra nella routine e se in questo momento viene scatenato il secondo interrupt, questo andrà perso.



Infatti questo è il problema, e poi comunque anche comparando lo stato di portb, al precedente stato, potesti comunque ritrovarti cambiati 2 bit, perchè magari i 2 encoder per sfortuna si sono mossi in contemporanea e sincronizzati.


Comunque sul 16f628A ho provato ad utilizzare l'interrupt si ccp, quindi sono riuscito a gestire il secondo encoder con questo ultimo interrupt.

Alla fine sarebbe pure possibile gestire 3 encoder e 3 assi, uno su INT uno su CCP e uno sul cambio di stato rb4.rb7

Sono dell'idea pure io, che per una applicazione del genere sarebbe utile utilizzare pic più potenti magari famiglia 18f.





picmicro675




una ogni 10 livelli


postato il:
09.03.2015, alle ore 20:18
DryDen:
PERò bisogna avere una routine di interrupt molto rapida, altrimenti una volta scatenato il primo interrupt, il micro entra nella routine e se in questo momento viene scatenato il secondo interrupt, questo andrà perso.

È assolutamente ovvio che a tutto c'è un errore ed una tolleranza.
Chiaramente si possono perdere accuratezza per difetti di diversa natura :
Meccanico, risoluzione encoder, rumore sulla trasmissione ed anche la fase di lettura degli impulsi in un certo lasso di tempo.
Se l' encoder fa 10 giri al minuto, ci puoi mettere anche il C= 20

che non sbaglia un passo. In casi di maggior prestazione si comincia a pensare anche alla velocità in risposta del micro, inclusa la frequenza di lavoro.
Se poi si vuole qualcosa di più finalizzato allo scopo allora si va a prendere LS7266R1
http://www.alldatasheet.com/datasheet-pdf/pdf/71326/LSI/LS72…
eppoi ci si mette il micro a leggere il risultato.
Se si parla di metter insieme un giocattolo allora magari le cose più semplici bastano. Invece se si vuole montare su di un tornio, allora per quel tipo di micro credo che vada bene per tornire il legno o cose che se sballa 2 decimi è in tolleranza.



Anno nuovo, forum nuovo.
Mi sa che lascio.
sparide74





postato il:
10.03.2015, alle ore 20:06
ciao, ragazzi scusatemi x la mia assenza, impegnato a lavoro fino al collo.Per quando riguarda i miei encoder sono encoder gia' filtrati con la sua elettronica, poi x una maggiore precisione devo inserirci a programma la tacca di ' 0 ' encoder...Praticamente ogni giro del mio encoder mi comunica che ha affetuato 2000 impulsi.
picmicro675




una ogni 10 livelli


postato il:
11.03.2015, alle ore 03:56
Allora lo zero lo puoi usare come sincronizzazione dei contatori quando è incerto che l' encoder abbia difetti di rotazione. Come un watchdog che garantisce che il giro sia avvenuto.
Ma con 2000 PPR, meglio che passi ad un micro di classe superiore. Comunque, dipende lo scopo o accuratezza che intendi ottenere.



Anno nuovo, forum nuovo.
Mi sa che lascio.
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale