PDA

Επιστροφή στο Forum : Optical Encoders σε AVR?



Tronicgr
07-01-08, 17:45
Γεια χαρα σε όλους.

Κατασκευάζω εναν ελεγκτη κινησης για εξομειωτες (αυτοκινητου και αεροπλανων) και έχω προβλημα στο να διαβάσω καποια optical encoders που έχω προσαρμόσει στα μοτερ για να μετράω την θέση τους.

Καταρχην να πω οτι χρησιμοποιώ τον ATMega644. Με αυτόν κινώ τα 6 μοτερ με PWM. Τον προγραμματίζω με τον Bascom.

Θα ήθελα να διαβάζω τα optical encoders που ειναι συνδεμενα σε αυτα τα 6 μοτερ με αναλυση 16-bit. Βρηκα ενα chip που μπορει να κανει το μετρημα σε 16-bit, το HCTL-2016, αλλα ειναι πανακριβο (50 ευρώ το ενα) που σημαινει οτι για 6 encoders θα πρεπει να δώσω 300 ευρώ!!! Θα προτιμουσα μια πιο φτηνή λύση.

Εχει να προτεινει κανεις τίποτα?


Μερικα links σχετικα με τον εξομειωτή μου και αυτα που κατασκευάζω...

http://ptyxiouxos.net//greekbotics/user_projects/Flight_Simulator/thanos_home_motion_flight_simulator.htm

http://www.x-simulator.de/forum/tronics-pwm-servo-control-interface-with-encoder-pot-input-t559.html

Καθώς και σχετικα βιντακια:

www.youtube.com/tronicgr

Θανος

DT200
07-01-08, 18:25
με ποιο τρόπο δίνει την 16bit λέξη το αισθητήριο ? πως κάνει έξοδο ?
(ποιο είναι το πρωτόκολλο επικοινωνίας δηλαδή).

Lykos1986
07-01-08, 19:09
Γεια σου Θάνο!

Δεν ξέρω αν με θυμάσαι αλλά παλαιότερα είχαμε μια επικοινωνία για αυτόν ακριβός τον εξομοιωτή! Χαίρομαι πραγματικά που βλέπω αυτό το αποτέλεσμα!!! Είναι καταπληκτικό!!!

:wink:

th_shak
07-01-08, 19:56
Οι οπτικοί αισθητήρες που χρησιμοποιείς είναι σαν αυτόν στη φωτογραφία που στέλνω; Αν ναι δεν υπάρχει κάποιος προκαθορισμένος αριθμός bit που δίνει. Αυτού του είδους οι αισθητήρες δίνουν λογικό '1' όταν ανιχνεύσουν φως στον δέκτη τους που είναι συνήθως οπτοτρανζίστορ.

Αν θες δώσε περισσότερες πληροφορίες για τους αισθητήρες που έχεις (κωδικό, φωτογραφία).

Επιστήμων
07-01-08, 21:18
Καταρχήν φίλε Μπράβο ! :shock:

Κατα δεύτερον να υποθέσω ότι ψάχνεις για κάποιο τσιπάκι
το οποίο να διαβάζει τους παλμούς τον οπτικόν αποκωδικοποιητών
και έπειτα να στέλνει σειριακά την 16-bit λέξη στον κυρίως μικροελεγκτή ???

Αν ναι τότε πες μας που ακριβώς δυσκολεύεσαι ?

Γιατί για να κάνεις κάτι τέτοιο όπως το βιντεάκι μου φαίνεται
λίγο παράξενο .

Και μια που γράφω να ρωτήσω και κάτι .
Τα σήματα που οδηγούν τα μοτέρ κίνησης τα παίρνεις απο το
τιμόνι και τα πεντάλ ?

gsmaster
08-01-08, 00:24
Γιατί μου φαίνονται υπερβολικά τα 16bit? πόση ακρίβεια θέλεις να έχεις στην περιστροφή?

Πχ έστω ότι θέλεις να μετρήσεις πλήρη περιστροφή έχεις 360 μοίρες. Πόσες μοίρες ανάλυση θέλεις να έχεις? με 16 bit έχεις 65536 καταστάσεις δηλαδή βήμα περίπου 5,5 χιλιοστά της μοίρας ακρίβεια. Είσαι σίγουρος ότι το μηχανικό κομμάτι θα μπορεί να εκτελέσει κινήσεις με τόση ακρίβεια? Αν ναι, τότε πάω πάσο. Αντίθετα με 8 bit έχεις 256 καταστάσεις και βήμα 1,4 μοίρες το οποίο δεν είναι καθόλου άσχημα νομίζω.

DT200
08-01-08, 09:12
Μάλλον την 16bit λέξη δεν την θέλει για να μετρά μόνο μία περιστροφή
αλλά πολλές διότι δεν θα κινεί όλο αυτό το βάρος από το μοτέρ κατευθείαν
αλλά σίγουρα μέσο “σασμάν” για να μειώσει την ταχύτητα κίνησης και να αυξήσει την ροπή .

chip
08-01-08, 09:45
Τότε η ταχύτητα αλλαγής του counter είναι τόσο μικρή που εν μέρη μπορεί να κάνει κάτι με software.
Όπως κα να έχει δεν ξέρω το αντικείμενο οπότε δεν ξέρω τους περιορισμούς σε βάρος και όγκο. Αν πχ το όλο θέμα ήταν να φτιαχτεί πάνω στον πάγκο εργαστηρίου εγώ θα σκεφτόμουν να βάλω 2 ολοκληρωμένα 8253 (dip28) τα οποία έχουν 3 μετρητές 16bit, το καθένα, στο εσωτερικό τους, και πιθανότατα κάνουν για τη δουλέια αυτή. Κατά τα άλλα ίσως πρέπει να εξετάσει την πιθανότητα κατανεμημένου ελέγχου (σε περισσότερους μικροελεγκτές).

Tronicgr
08-01-08, 10:16
Οι οπτικοί αισθητήρες που χρησιμοποιείς είναι σαν αυτόν στη φωτογραφία που στέλνω; Αν ναι δεν υπάρχει κάποιος προκαθορισμένος αριθμός bit που δίνει. Αυτού του είδους οι αισθητήρες δίνουν λογικό '1' όταν ανιχνεύσουν φως στον δέκτη τους που είναι συνήθως οπτοτρανζίστορ.

Αν θες δώσε περισσότερες πληροφορίες για τους αισθητήρες που έχεις (κωδικό, φωτογραφία).

Οι optical encoders που χρησιμοποιώ ειναι οι:

http://www.shop.robotikhardware.de/shop/catalog/images/GP1A038RBK.jpg

και τους πήρα απο εδω:

http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=71&products_id=135

Εχουν μεγιστη συχνότητα λειτουργείας τα 20Khz!

Θανος

Tronicgr
08-01-08, 10:29
Γιατί μου φαίνονται υπερβολικά τα 16bit? πόση ακρίβεια θέλεις να έχεις στην περιστροφή?

Πχ έστω ότι θέλεις να μετρήσεις πλήρη περιστροφή έχεις 360 μοίρες. Πόσες μοίρες ανάλυση θέλεις να έχεις? με 16 bit έχεις 65536 καταστάσεις δηλαδή βήμα περίπου 5,5 χιλιοστά της μοίρας ακρίβεια. Είσαι σίγουρος ότι το μηχανικό κομμάτι θα μπορεί να εκτελέσει κινήσεις με τόση ακρίβεια? Αν ναι, τότε πάω πάσο. Αντίθετα με 8 bit έχεις 256 καταστάσεις και βήμα 1,4 μοίρες το οποίο δεν είναι καθόλου άσχημα νομίζω.

Θα κανουν πολύ περισσότερες απο μια περιστροφη...

Θα τους προσαρμόσω κατευθείαν πανω στον άξονα του μοτερ πριν τον μειωτήρα! Ετσι θα μπορώ να έχω την μέγιστη ακρίβεια στον υπολογισμό και τον χειρισμό του μοτερ ως σερβο. Μεχρι τώρα χρησιμοποιούσα απλά 10 περιστροφών ποντεσιόμετρα τοποθετημένα μετα τον μειωτήρα με αναλυση 10-bit. Παρόλα αυτά δεν έχω φτάσει την επιθυμητή ακρίβεια και εκτός των άλλων τα ποντεσιόμετρα εισάγουν και θόρυβο στην μέτρηση της θέσης...

Τα HCTL-2016 βγάζουν τα δεδομένα σε 8 θύρες τις οποιες διαβάζοντας τις δύο διαδοχικες φορες έχω 16-bit ανάλυση. Και για να μην σπαταλάω τις θύρες το ATMega644 λεω να τις διαβάζω με το I2C chip PCF8574. Ετσι με λιγες γραμμές μπορώ να συνδέσω αρκετα encoders.

Σημερα ανακάλυψα οτι μπορώ να χρησιμοποιήσω και το HCTL-2032 διαβάζοντας μονο τα 16-bit απο τα 32-bit που εχει διαθέσιμα. Οποτε αν είναι φτηνότερο (έτσι με πληροφόρησαν) ίσως προχωρήσω με αυτο...

Θανος

Tronicgr
08-01-08, 10:42
Τότε η ταχύτητα αλλαγής του counter είναι τόσο μικρή που εν μέρη μπορεί να κάνει κάτι με software.
Όπως κα να έχει δεν ξέρω το αντικείμενο οπότε δεν ξέρω τους περιορισμούς σε βάρος και όγκο. Αν πχ το όλο θέμα ήταν να φτιαχτεί πάνω στον πάγκο εργαστηρίου εγώ θα σκεφτόμουν να βάλω 2 ολοκληρωμένα 8253 (dip28) τα οποία έχουν 3 μετρητές 16bit, το καθένα, στο εσωτερικό τους, και πιθανότατα κάνουν για τη δουλέια αυτή. Κατά τα άλλα ίσως πρέπει να εξετάσει την πιθανότητα κατανεμημένου ελέγχου (σε περισσότερους μικροελεγκτές).

Υποθέτω οτι τα 8253 (dip28) ειναι up/down μετρητες... Θα μπορουν να διαβάσουν quadrature σηματα?

Θανος

Tronicgr
08-01-08, 11:01
Γεια σου Θάνο!

Δεν ξέρω αν με θυμάσαι αλλά παλαιότερα είχαμε μια επικοινωνία για αυτόν ακριβός τον εξομοιωτή! Χαίρομαι πραγματικά που βλέπω αυτό το αποτέλεσμα!!! Είναι καταπληκτικό!!!

:wink:

Γεια σου Lykos...

Εχουμε να τα πούμε αρκετά χρόνια... οπως βλέπεις εχει εξελιχθεί παρα πολύ απο την τελευταία φορα...! Τώρα συνεργάζομαι με εναν Ελληνα προγραμματιστή για να να κατασκευάσω 6DOF εξομειωτή. Δες το σχετικο βίντεο:

http://www.youtube.com/watch?v=Jw5t1po9Kto

Θανος

chip
08-01-08, 11:04
Οχι. Είναι μόνο Up Counter (είναι ο Timer Που χρησιμοποιούσαν τα 8088 PC Και υπάρχει ακόμα και στα σημερινά μέσα στο chipset) Αν όμως θέλεις έλεγχο ταχύτητας και όχι θέσης δεν χρειάζεσαι UP/Down υποθέτω. αν πάλι θέλεις έλεγχο θέσης μπορείς αντί ενός UP/Down να βάζεις δύο UP Που ο ένας μετρά UP ο άλλος Down. Φυσικά χρειάζεσαι διπλά ολοκληρωμένα.
Και φυσικά αν το chip δεν είναι εξειδικευμένο να συνδεθεί με encoder θα χρειαστεί και ένα απλό κύκλωμα για debounce των παλμών (εκτός και έχει ο encoder σου)
Μία άλλη λύση είναι η χρήση 3-6 φθηνών μικροελεγκτών με μόνο σκοπό τη μέτρηση των παλμών και απόστολή της μέτρησης στον ελεγκτή σου μέσω SPI. (φυσικά δεν ξέρω με τη ταχύτητα υπολογίζεις οτι πρέπει να τρέχει ο αλγόριθμος ελέγχου (συλογή δειγμάτων/sec) και πόσο απαιτητικός είναι σε ταχύτητα...)

Ωχ τώρα είδα οτι χρησιμοποιουσες ποτενσιόμετρα... άρα κάνεις έλεγχο θέσης......... Μάλλον τώρα κατάλαβα... θέλεις να ελέγχεις τα Servo όχι με το αναλογικό κύκλωμα τους αλλά με δικό σου ψηφιακό ελεγκτή... καλά κατάλαβα?

Tronicgr
08-01-08, 11:18
Γειά σου Chip,

Ναι. Αυτο που φτιάχνω είναι ενας ψηφιακός ελεγκτής servo! Και δέν μιλάμε για τα απλα σερβο μοντελισμού, αλλα για μεγάλα DC μοτερ με H-bridges, PWM και PID αλγόριθμους!

Για αυτό ειναι αναγκαία η μεγάλη αναλυση. Ο παραμικρός θόρυβος στην είσοδο της αναδρασης, παράγει εκθετικά λάθη!

Θανος

chip
08-01-08, 11:24
Οκ καταλαβαίνω... (και εγώ υπέθεσα κάποιο είδος PID)
Δεν ξέρω βεβαια αν επαρκεί ένας μικροελεγκής για 6 κανάλια.
Ίσως πρέπει να δεις και τη λύση του FPGA/CPLD (στο θέμα των μετρητών) που θα βάλεις ότι counter θέλεις μέσα....

th_shak
08-01-08, 12:07
Οι optical encoders που χρησιμοποιείς είναι μεγάλης ακρίβειας και έχουν για δέκτη τέσσερεις φωτοδιόδους. Τα 20KHz που λέει είναι η μέγιστη συχνότητα που μπορείς να στείλεις στον πομπό (λεντάκι) και κάθε φορά που θα δέχεται ο δέκτης αυτό το σήμα θα σου δίνει προφανώς μια διακοπή στον μιροελεγκτή για να καταλάβεις ότι είχες κίνηση σε κάποι μοτέρ. Θα πρέπει να μετρήσεις πόσα "παραθυράκια" έχει ο δίσκος και θα ξέρεις πόσους παλμούς πρέπει να μετρήσεις για να έχεις μια πλήρη περιστροφή του άξονα του μοτέρ. Μ' αυτόν τον τρόπο θα μπορείς να ελέγξεις με μεγάλη ακρίβεια οποιοδήποτε μοτέρ.[/img]

Tronicgr
08-01-08, 16:51
Και μια που γράφω να ρωτήσω και κάτι .
Τα σήματα που οδηγούν τα μοτέρ κίνησης τα παίρνεις απο το
τιμόνι και τα πεντάλ ?

Γεια σου Επιστήμων,

Τώρα το είδα αυτο... Οχι, κινήται απο πραγματικα δεδομένα επιτάχυνσης απο τον υπολογιστή (μεσα απο τα παιχνίδια για την ακρίβεια). Πολλές φορές το πώς στρίβει το τιμόνι ή το stick του εξομειωτή δεν έχει σχέση μετο αποτέλεσμα της κίνησης! Αν για παραδειγμα τρακαρω το αυτοκινητο ή το ντελαπάρω, ο εξομειωτής θα αρχίσει να κινήται ετσι ωστε να σε κάνει να πιστέψεις οτι πράγματι έχεις τρακαρει (απότομες κινήσεις, τραντάγματα κτλ.)

Εν συντομία, ενας εξομειωτής δεν μπορεί να κάνει και πολλά δίχως το κατάλληλο λογισμικό απο την πλευρά του υπολογιστή! ;-)

Θανος

Επιστήμων
08-01-08, 17:10
Οκ.

DT200
08-01-08, 17:32
Άρα, αν κατάλαβα καλά το ποιο κάτω σχέδιο μας λέει ότι
όταν ο διάτρητος δίσκος κινηθεί προς μία κατεύθυνση τότε
η έξοδος Α θα γίνει 1 και μετά η έξοδος Β θα γίνει 1.
κατά την αντίθετη περιστροφή θα έχουμε 1 πρώτα την έξοδο Β και
μετά την έξοδο Α , σωστά ?

Αν είναι έτσι τότε εύκολα θα το πετύχεις με έναν μ/ε,
πολύ φθηνά και πάρα πολύ ευέλικτα.

Tronicgr
08-01-08, 19:02
Γεια σου DT200,

Ναι, μπορεί να γίνει και αυτό αλλα θα προτιμουσα την χρήση ενος ετοιμου chip τυπου HCTL-2032 ή HCTL-2016. Οσο γρήγορο μικροελεγκτη και να χρησιμοποιησεις μπορεί να "χασεις" μερικους παλμούς κατα την διαδικασία αποστολής την πληροφορίας στον κεντρικο μικροελεγκτη (ATMega644). :-(

Οποτε αν εχετε να προτεινετε κανενα άλλο παρόμειο chip ή καμια φτηνη πηγή για τα προαναφερθεντα...

Θανος

DT200
08-01-08, 21:42
κοίτα , την καλύτερη λύση την έχεις είδη βρει , το θέμα είναι να γλυτώσεις
κάποια λεφτά.
Αρα ,
μέχρι τώρα το μέτραγες με ποτενσιόμετρο στην έξοδο
αλλά αφού τώρα θα το μετράς στην είσοδο του μειωτήρα αμέσως αμέσως
έχεις πολλαπλασιασμό της ακρίβειας όσες φορές κάνει διαίρεση των στροφών
δηλαδή το περιθώριο λάθους αυξάνετε πολύ, άρα και να χάσει και 10bit δεν έγινε και τίποτα.

με τη ταχύτητα περιστρέφονται τα μοτέρ και πόσα αυλάκια έχει ο δίσκος ?

DT200
09-01-08, 09:08
Με πρόχειρες μετρήσεις που έκανα είδα ότι ο διάτρητος δίσκος έχει 100 τρύπες
Άρα αν το μοτέρ σου περιστρέφεται με 3000RPM τότε γυρίζει με (3000/60)=50
στροφές το δευτερόλεπτο , με αποτέλεσμα ο δίσκος να παράγει (50*100)=5000
σήματα που το κάθε ένα διαρκεί 200μS .

Το δικό μου συμπέρασμα είναι ότι αν χρησιμοποιήσεις μ/ε με ενσωματωμένη την θύρα
επικοινωνίας για να μην χάνετε χρόνος να την κάνεις με προγραμματισμό , τότε είσαι
Κομπλέ .

Tronicgr
10-01-08, 10:55
Ο δισκος του optical encoder ειναι 120 cpr που σημαινει οτι έχει 120 οπες.

Το μοτερ στρεφεται με 2000RPM οποτε (2000/60)=33 στροφες το λεπτο, αρα (33*120) = 3960 σηματα για μια πληρη περιστροφή του αξονα του μοτερ.

Το μοτέρ εχει μειωτήρα 20:1 και περιθωριο κινησης για 4 περιστροφές οποτε θα χρειαστει να μετρήσω περίπου 16000 παλμους για την πληρες κινηση.

Αληθεια ποσο διαρκεια θα έχει ετσι ο παλμος? Εχεις τύπο που το βγάζεις?

Ισως να ειναι εφικό χωρις εξωτερικο μετρητη, αλλα θα χρειαζεται να διακοπτω το προγραμμα συχνά για να μην χανω παλμούς. Μαλλον θα πρεπει να το δω στην πράξη κατα ποσο ειναι εφικτό έτσι.


Θανος

Tronicgr
10-01-08, 11:17
Μολις βρήκα αυτο:

http://www.researchsupporttechnologies.com/Decoder.htm

Ισως το προχωρήσω έτσι τελικα :-)

Θανος

DT200
10-01-08, 19:57
Το μοτερ στρεφεται με 2000RPM οποτε (2000/60)=33 στροφες το λεπτο
33 στροφές το δευτερόλεπτο.


αρα (33*120) = 3960 σηματα για μια πληρη περιστροφή του αξονα του μοτερ.
σε μία πλήρη περιστροφή του άξονα του μοτέρ θα έχεις 120 παλμούς ανεξαρτήτως της ταχύτητας περιστροφής .
3960 παλμούς θα έχεις σε ένα δευτερόλεπτο με το μοτέρ να περιστρέφετε με 2000RPM ή με άλλα λόγια 3,96 kHz.


Το μοτέρ εχει μειωτήρα 20:1 και περιθωριο κινησης για 4 περιστροφές οποτε θα χρειαστει να μετρήσω περίπου 16000 παλμους για την πληρες κινηση.

νομίζω πως όχι, διότι 20*4=80, δηλαδή απο τέρμα σε τέρμα πρέπει να δώσεις 80 στροφές στον πρωτεύων άξονα.
και 80*120=9600 δηλαδή ο μέγιστος αριθμός παλμών που θα πάρεις θα είναι 9600.


Εχεις τύπο που το βγάζεις?
ο τύπος είναι T=1/F δηλαδή (1/3960Hz=0.00025 Sec) ή 250μS


Ισως να ειναι εφικό χωρις εξωτερικο μετρητη, αλλα θα χρειαζεται να διακοπτω το προγραμμα συχνά για να μην χανω παλμούς. Μαλλον θα πρεπει να το δω στην πράξη κατα ποσο ειναι εφικτό έτσι.

νομίζω ότι οι παλμοί είναι σε μικρή συχνότητα για ένα μ/ε αρκεί να έχει ο μ/ε ενσωματωμένη την θύρα επικοινωνίας