Πίνακας περιεχομένων:

Δημιουργία σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32: 3 βήματα
Δημιουργία σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32: 3 βήματα

Βίντεο: Δημιουργία σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32: 3 βήματα

Βίντεο: Δημιουργία σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32: 3 βήματα
Βίντεο: Output DC or AC Voltage using MCP4725 DAC with LCD and PWM to Voltage Converter with Arduino 2024, Ιούλιος
Anonim
Δημιουργία σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32
Δημιουργία σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32
Δημιουργία σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32
Δημιουργία σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32
Παραγωγή σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32
Παραγωγή σήματος PWM υψηλής ανάλυσης για RC Servos με συσκευές STM32

Επί του παρόντος, χτίζω έναν πομπό/δέκτη RC βασισμένο στο τσιπ SX1280 RF. Ένας από τους στόχους του έργου είναι ότι θέλω 12 bit servo ανάλυση από τα sticks μέχρι τα servos. Εν μέρει επειδή τα σύγχρονα ψηφιακά servos έχουν ανάλυση 12 bit, δεύτερον ένας πομπός υψηλής τεχνολογίας χρησιμοποιεί ούτως ή άλλως 12 bit. Διερευνούσα πώς μπορώ να δημιουργήσω σήματα PWM υψηλής ανάλυσης σε συσκευές STM32. Χρησιμοποιώ μαύρο χάπι (STM32F103C8T8) αυτή τη στιγμή για το πρωτότυπο.

Βήμα 1: Λίστα μερών

Σκεύη, εξαρτήματα

  • Οποιοσδήποτε πίνακας ανάπτυξης STM32F103 (μπλε χάπι, μαύρο χάπι κλπ.)
  • Μια τράπεζα τροφοδοσίας USB ως τροφοδοτικό
  • Προγραμματιστής STM32 (Segger j-links, ST-LINK/V2, ή απλώς κλώνος st-link)

Λογισμικό

  • STM32CubeMX
  • Atollic TrueSTUDIO για STM32
  • Πηγή έργου από το github

Βήμα 2: Η προφανής λύση

Η Προφανής Λύση
Η Προφανής Λύση
Η Προφανής Λύση
Η Προφανής Λύση
Η Προφανής Λύση
Η Προφανής Λύση

Σως η ευκολότερη λύση είναι να χρησιμοποιήσετε ένα από τα χρονόμετρα που μπορεί να παράγει σήματα PWM, όπως το TIM1-3 σε ένα STM32F103. Για ένα σύγχρονο ψηφιακό σερβο, ο ρυθμός καρέ μπορεί να μειωθεί στα 5 ms περίπου, αλλά για ένα παλιό αναλογικό σερβο πρέπει να είναι 20 ms ή 50 Hz. Έτσι, ως το χειρότερο σενάριο, ας το δημιουργήσουμε. Με ρολόι 72 MHz και ανάλυση μετρητή χρονοδιακόπτη 16 bit, πρέπει να ορίσουμε την προκαθορισμένη τιμή του χρονοδιακόπτη στο 23 για να καλύψει το ρυθμό καρέ των 20 ms. Επέλεξα 24 γιατί τότε για 20 ms πρέπει να ορίσω τον μετρητή ακριβώς στα 60000. Μπορείτε να δείτε τη ρύθμιση CubeMX και τα δημιουργημένα σήματα PWM 1 και 1,5 ms στα στιγμιότυπα οθόνης. Δυστυχώς, για 1ms ο μετρητής του χρονοδιακόπτη πρέπει να οριστεί σε 3000, πράγμα που θα μας έδινε μόνο ανάλυση 11 bit. Δεν είναι κακό, αλλά ο στόχος ήταν 12 bit, οπότε ας δοκιμάσουμε κάτι άλλο.

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

Αλλά εδώ, θα ήθελα να προτείνω μια εναλλακτική λύση που θα αυξήσει περαιτέρω την ανάλυση ακόμη και στο STM32F103.

Βήμα 3: Χρονοδιακόπτες για υψηλότερη ανάλυση

Διαδοχικά χρονοδιακόπτες για υψηλότερη ανάλυση
Διαδοχικά χρονοδιακόπτες για υψηλότερη ανάλυση
Διαδοχικά χρονοδιακόπτες για υψηλότερη ανάλυση
Διαδοχικά χρονοδιακόπτες για υψηλότερη ανάλυση
Διαδοχικά χρονοδιακόπτες για υψηλότερη ανάλυση
Διαδοχικά χρονοδιακόπτες για υψηλότερη ανάλυση

Το κύριο πρόβλημα με την προηγούμενη λύση είναι ότι ο ρυθμός καρέ (20 ms) είναι σχετικά υψηλός σε σύγκριση με το πραγματικά παραγόμενο σήμα PWM (μεταξύ 1 και 2 ms), οπότε σπαταλάμε ορισμένα bit για τα υπόλοιπα 18 ms όταν περιμένουμε το επόμενο πλαίσιο. Αυτό μπορεί να λυθεί με διαδοχικούς χρονομετρητές χρησιμοποιώντας τη λειτουργία σύνδεσης χρονοδιακόπτη για συγχρονισμό.

Η ιδέα είναι ότι θα χρησιμοποιήσω το TIM1 ως κύριο για να δημιουργήσω το ρυθμό καρέ (20 ms) και το TIM2, το TIM3 για να αντιμετωπίσω τα σήματα PWM ως υποτελείς. Όταν ο κύριος πυροδοτεί τους υποτελείς, παράγουν μόνο ένα σήμα PWM σε μία λειτουργία παλμού. Επομένως, πρέπει να καλύψω μόνο 2 ms σε αυτούς τους χρονοδιακόπτες. Ευτυχώς, μπορείτε να προσθέσετε αυτά τα χρονόμετρα στο υλικό, οπότε αυτός ο συγχρονισμός δεν χρειάζεται καμία παρέμβαση από τον επεξεργαστή και είναι επίσης πολύ ακριβής, το jitter βρίσκεται στην περιοχή ps. Μπορείτε να δείτε τη ρύθμιση CubeMX στα στιγμιότυπα οθόνης.

Όπως μπορείτε να δείτε, επέλεξα το 3 ως prescalar, οπότε για τα 2 ms πρέπει να ορίσω 48000 στον μετρητή του χρονοδιακόπτη. Αυτό μας δίνει 24000 για 1 ms, το οποίο είναι στην πραγματικότητα περισσότερο από αυτό που χρειαζόμαστε για ανάλυση 14 bit. Tadaaaa…

Ρίξτε μια ματιά στα στιγμιότυπα οθόνης του παλμογράφου στην εισαγωγή για το τελικό αποτέλεσμα. Το κανάλι 3 (μωβ) είναι η διακοπή του κύριου χρονοδιακόπτη, η οποία θα ενεργοποιήσει τα αποθέματα να δημιουργήσουν έναν παλμό. Τα κανάλια 1 και 4 (κίτρινη και πράσινη δέσμη) είναι τα πραγματικά σήματα PWM που δημιουργούνται από διαφορετικά χρονόμετρα. Σημειώστε ότι είναι σε συγχρονισμό αλλά συγχρονίζονται στις άκρες που ακολουθούν, δηλαδή λόγω της λειτουργίας PWM 2. Αυτό δεν αποτελεί πρόβλημα, επειδή ο ρυθμός PWM για το συγκεκριμένο σερβο είναι ακόμα σωστός.

Ένα άλλο όφελος αυτής της λύσης είναι ότι η αλλαγή του ρυθμού καρέ θα σήμαινε την αλλαγή της περιόδου μόνο στο TIM1. Για τα σύγχρονα ψηφιακά servos μπορείτε να κατεβάσετε ακόμη και τα 200-300 Hz, αλλά συμβουλευτείτε το εγχειρίδιο του σερβο αν θέλετε να ρυθμίσετε σωστά.

Συνιστάται: