PDA

Επιστροφή στο Forum : Πληροφορίες για Rotary Encoder



xmaze
15-10-16, 19:04
Για σας, θελω να συνδεσω εναν rotary encoder που έχει δύο κανάλια με εναν ARM STM32 κατευθείαν στον timer του αλλά έχω μπερδευτεί.

Τα δυο πινς που έχει ο encoder λογικά είναι το ένα η συχνότητα περιστροφής και το δεύτερο η κατεύθυνση. Αυτό που δεν καταλαβαίνω είναι πώς γίνεται ο timer να ξέρει προς ποιά κατευθηνση περιστρέφεται.
Εχει ασχοληθεί κανέις;

SProg
15-10-16, 19:11
http://stm32f4-discovery.net/2014/08/library-26-rotary-encoder-stm32f4/

xmaze
15-10-16, 19:31
http://stm32f4-discovery.net/2014/08/library-26-rotary-encoder-stm32f4/

απο ό,τι κατάλαβα δεν χρησιμοποιεί τον timer, οι STM32 έχουν την δυνατότητα να ρυθμίσεις τον timer σαν input capture και μετράει κατευθείαν τις περιστροφές χωρίς interrupt κλπ, γιατί αν έχεις έναν κινητήρα με 14000 στροφές τότε με interupts ζήτω που καήκαμε.

SProg
15-10-16, 19:42
Ναι εχει λειτουργια Encoder.Δεν ξερω εαν το εχουν ολες οι σειρες.

Ποιος Encoder,ποια mcu;



έναν κινητήρα με 14000 στροφές τότε με interupts ζήτω που καήκαμε.


Και;Eιναι γελοια συχνοτητα τα 233Hz

klik
15-10-16, 19:53
Για σας, θελω να συνδεσω εναν rotary encoder που έχει δύο κανάλια με εναν ARM STM32 κατευθείαν στον timer του αλλά έχω μπερδευτεί.

Τα δυο πινς που έχει ο encoder λογικά είναι το ένα η συχνότητα περιστροφής και το δεύτερο η κατεύθυνση. Αυτό που δεν καταλαβαίνω είναι πώς γίνεται ο timer να ξέρει προς ποιά κατευθηνση περιστρέφεται.
Εχει ασχοληθεί κανέις;
τα κανάλια είναι Α και Β (όχι ταχύτητα και κατεύθυνση).
Οποιοδήποτε κανάλι μόνο του, σου κάνει για έλεγχο ταχύτητας.
Για έλεγχο θέσης με το 1/4 της ακρίβειας σου κάνει πάλι το ένα κανάλι.
Για έλεγχο θέσης με πλήρη ανάλυση θέλεις και τα δυο κανάλια. Για να βρεις κατεύθυνση θέλεις πάλι και τα δυο κανάλια.



If A leads B, for example, the disk is rotating in a clockwise direction. If B leads A, then the disk is rotating in a counter-clockwise direction.



http://www.ni.com/tutorial/7109/en/

xmaze
15-10-16, 20:05
Δεν ξερω τί κάνει ακριβώς ο STM32 αλλά έχει για μένα κακό manual γενικώς και ειδικώς στο δικό μου τεστ αυξάνεται ή μειώνεται κατα δύο όλη την ώρα και ότι και αν έχω αλλάξει στις ρυθμίσεις (ΗΑL) δεν λέει να διορθωθεί και κοντεύουν να μου πέσουν τα μαλλιά.

SProg
15-10-16, 21:33
Ειμαι εκτος και τυχαινει αυτες τις μερες παιζω με τον F4 και ενα encoder του Στεφανου.Απο αυριο μπορω να βοηθησω.

Ολοι οι μΕ που βασιζονται σε ARM εχουν 'δυκολο' manual...γιατι πολυ απλα μονο το manual της MCU ειναι 700 σελιδες και απο εκει πρεπει να ξεκινησουμε..

picdev
16-10-16, 00:48
Quadrature λέγεται το περιφερειακό για έλεγχο κίνησης μοτέρ.
Έχει κάποια αυτοματοποιημένα interrupt , προγραμματιζόμενο φίλτρο και μπορείς να ξέρεις στροφές , ταχύτητα κατεύθυνση κτλ όχι ότι δεν το κάνεις και μόνος σου με counter αλλά πρέπει να γράψεις δικές σου ρουτινες και θα καταναλώσεις κυκλους μηχανής

SProg
16-10-16, 09:26
Φυσικα και δεν υπαρχει Quadrature περιφερειακο,οπως δεν υπαρχει περιφερειακο PWM.

Ειναι λειτουργιες των χρονιστων.Αναλογα με το ελεγχο/μετρηση που θες να κανεις ... μπορει η CPU να είναι αποδεσμευμένη ή να χρειαζεται για υπολογισμους.


67053

picdev
16-10-16, 14:23
Οι dspic έχουν τέτοιο περιφερειακό και το έχω δουλέψει , για τους stm δεν ξέρω

xmaze
16-10-16, 14:47
για τον timer εχω τις εξής ρυθμίσεις :

htim3.Instance = TIM3;
htim3.Init.Prescaler = 4;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 0xFFFF;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;

prescaler ειναι 4, οποτε απο 32 MHZ εχω 8 ΜΗΖ το ClockDivision τί είναι; Δεν βρίσκω εξήγηση στο manual του HAL. ( htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4;)

SProg
16-10-16, 14:59
Ποιον μΕ εχεις ή για ποια πλατφορμα μιλαμε;

https://petoknm.wordpress.com/2015/01/05/rotary-encoder-and-stm32/

xmaze
16-10-16, 15:22
Nucleo L152RE


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

SProg
18-10-16, 16:17
Εβγαλες ακρη;

xmaze
19-10-16, 11:23
Εβγαλες ακρη;


Ναι, κατεβασα την συχνοτητα του τιμερ και λειτουργεί, τώρα δοκιμάζω και με ενα task 10 ms να διαβαζω τα πινς και φαινεται να δουλευει κι αυτο επιφανειακα.

SProg
19-10-16, 14:41
Η συχνοτητα του Τimer εφταιγε ή debounce και απλα λυθηκε μειωνοντας τη συχνοτητα;

xmaze
21-10-16, 10:49
Η συχνοτητα του Τimer εφταιγε ή debounce και απλα λυθηκε μειωνοντας τη συχνοτητα;

η συχνοτητα μαλλον, debouncing αλλαξα αλλά μάλλον μικρές διακυμάνσεις επηρέαζαν τον μετρητή, τα βαθιά αίτια δύσκολα να τα βρώ γιατί θέλουν ανάλυση εις βάθος.