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

Falling in Stm32: Remote Control for Home Media Center: 4 βήματα (με εικόνες)
Falling in Stm32: Remote Control for Home Media Center: 4 βήματα (με εικόνες)

Βίντεο: Falling in Stm32: Remote Control for Home Media Center: 4 βήματα (με εικόνες)

Βίντεο: Falling in Stm32: Remote Control for Home Media Center: 4 βήματα (με εικόνες)
Βίντεο: ESP32-CAM - Guide to making YOUR first DIY Security Camera 2024, Νοέμβριος
Anonim
Πτώση στο Stm32: Τηλεχειριστήριο για το Κέντρο πολυμέσων στο σπίτι
Πτώση στο Stm32: Τηλεχειριστήριο για το Κέντρο πολυμέσων στο σπίτι

Αυτό είναι ένα πλήρες πρωτότυπο για τηλεχειριστήριο οικιακού κέντρου πολυμέσων βασισμένο σε μικροελεγκτή smt32, stm32f103c8t6 γνωστό ως πίνακας «bluepill». Ας υποθέσουμε ότι χρησιμοποιείτε υπολογιστή για οικιακό κέντρο πολυμέσων. Είναι μια πολύ ευέλικτη λύση, η οποία σας επιτρέπει να τοποθετήσετε μια τεράστια βιβλιοθήκη βίντεο στον εσωτερικό σκληρό δίσκο ή μπορείτε να αναπαράγετε βίντεο από το δίκτυο, για παράδειγμα στο youtube ή κάτι τέτοιο, δεν έχετε κανένα πρόβλημα με τους κωδικοποιητές ή την αναπαραγωγή βίντεο, διότι είναι πολύ εύκολο να ενημερώσετε το πρόγραμμα αναπαραγωγής λογισμικού ανά πάσα στιγμή. Το κύριο μειονέκτημα αυτής της λύσης είναι ότι πρέπει να χρησιμοποιείτε ποντίκι και πληκτρολόγιο για να ελέγχετε την αναπαραγωγή σας. Το τηλεχειριστήριο IR είναι πολύ βολικό για αυτό.

Σε αυτό το άρθρο θα δείξω πώς να δημιουργήσετε το δικό σας τηλεχειριστήριο χρησιμοποιώντας τον πίνακα bluepill τσιπ.

Βήμα 1: Η ιδέα

Η ιδέα
Η ιδέα
Η ιδέα
Η ιδέα

Η κύρια ιδέα είναι πολύ απλή: ο πίνακας bluepill έχει ενσωματωμένη θύρα usb και μπορεί να λειτουργήσει ως πληκτρολόγιο USB HID. Εάν συνδέσουμε δέκτη IR στην πλακέτα, θα μπορούσε να μεταφράσει την εντολή από το τηλεχειριστήριο IR σε "πάτημα πλήκτρου" του εικονικού πληκτρολογίου. Δεν απαιτούνται πρόσθετα προγράμματα οδήγησης!

Υπάρχουν πολλά πρωτόκολλα IR στον κόσμο γύρω μας. Κάθε τηλεόραση του προμηθευτή VCS έχει το δικό της πρωτόκολλο IR. Αλλά όλα αυτά τα πρωτόκολλα έχουν κάτι κοινό: χρησιμοποιούν παλμική διαμόρφωση για να κωδικοποιήσουν το σήμα. Συνήθως, υπάρχει κάποιο προοίμιο: μεγάλη ώθηση πριν από το πρώτο bit στο πακέτο. Στη συνέχεια, ο έλεγχος IR μεταδίδει ολόκληρο το πακέτο με 0 και 1 και ολοκληρώνει τη μετάδοση με μακρύ παλμό τερματισμού. Για να αποκωδικοποιήσουμε το bit πρέπει να μετρήσουμε τον παλμό μήκους και το μήκος της κορυφής. Συνήθως, το μέγιστο μήκος της λογικής 0 και της λογικής 1 είναι το ίδιο, η διαφορά είναι στο πλήρες μήκος παλμού.

Οι μικροελεγκτές stm32 έχουν ενσωματωμένη λειτουργία για τη λήψη σήματος PWM. Σχεδόν κάθε χρονοδιακόπτης του μικροελεγκτή μπορεί να τοποθετηθεί στο "PWM σήμα καταγραφής περισσότερων" όταν οι μεταβλητές καναλιών του χρονοδιακόπτη αποθηκεύουν το συνολικό μήκος του παλμού και το μέγιστο μήκος του. Εδώ πρέπει να επισημάνω τη μικρή λεπτομέρεια: όταν ο δέκτης IR λαμβάνει το σήμα, η τάση στον πείρο εργασίας του γίνεται 0 και στην κατάσταση αδράνειας η τάση στον πείρο εργασίας είναι 5 ή 3,3 βολτ ανάλογα με την τάση τροφοδοσίας του δέκτη IR. Δηλαδή, ο δέκτης «αναστρέφει» το σήμα.

Με τη λειτουργία λήψης PWM, ο μικροελεγκτής stm32 μπορεί εύκολα να μετατραπεί σε απομακρυσμένο μεταφραστή IR από τηλεχειριστήριο IR στους κωδικούς πληκτρολογίου. Στη συνέχεια, μπορείτε να ξεκινήσετε το αγαπημένο σας λογισμικό οπτικοποίησης, για παράδειγμα το Kodi του VLC για να παίξετε την αγαπημένη σας ταινία στο κέντρο πολυμέσων.

Βήμα 2: Δημιουργία του ελεγκτή

Δημιουργία του ελεγκτή
Δημιουργία του ελεγκτή
Δημιουργία του ελεγκτή
Δημιουργία του ελεγκτή
Δημιουργία του ελεγκτή
Δημιουργία του ελεγκτή
Δημιουργία του ελεγκτή
Δημιουργία του ελεγκτή

Για τον προγραμματισμό του μικροελεγκτή stm32 θα ήθελα να συστήσω το δωρεάν λογισμικό από το STM: πάγκο εργασίας συστήματος (γνωστός και ως ac6) και το εργαλείο διαμόρφωσης πλακέτας cubeMX. Για να ανεβάσετε το λογισμικό στο μικροελεγκτή, μπορείτε να χρησιμοποιήσετε τον κλώνο τσιπ του προσαρμογέα ST-Link V2. Τα αρχεία έργου πάγκου συστήματος συνημμένα σε αυτό το βήμα, το αρχείο F1-IR_remote.zip.

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

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

  • Δημιουργήστε νέο έργο και επιλέξτε τον πίνακα stm32f103c8
  • Επιλέξτε "Crystal/Ceramic Resonator" για το στοιχείο "High Speed Clock (HSE)" στο μενού RCC.
  • Επιλέξτε "Serial Wire" για το στοιχείο "Debug" στο μενού SYS.
  • Διαμορφώστε το χρονόμετρο #2 (μενού TIM2) σε λειτουργία λήψης PWM όπως φαίνεται στην εικόνα:

    • Slave Mode -> Reset Mode
    • Πηγή ενεργοποίησης -> TI1FP1
    • Πηγή ρολογιού -> Εσωτερικό ρολόι
    • Κανάλι 1 -> Είσοδος Λήψη άμεσης λειτουργίας
  • Ορίστε το πλαίσιο ελέγχου 'Device (FS) στο μενού USB
  • Επιλέξτε το στοιχείο αναπτυσσόμενου μενού "Κλάση συσκευής διεπαφής ανθρώπου (HID)" στο στοιχείο "Class of FS IP" στο μενού USB_DEVICE
  • Στον πίνακα διαμόρφωσης ρολογιού, βεβαιωθείτε ότι παρέχετε 72 MHz στο χρονόμετρο #2, επειδή χρειαζόμαστε μέτρηση χρονοδιακόπτη σε κάθε 1 mks.
  • Στον πίνακα διαμόρφωσης διαμορφώστε τη συσκευή USB όπως φαίνεται στην εικόνα
  • Στον πίνακα διαμόρφωσης ρυθμίστε το χρονόμετρο#2 ως εξής:

    • Prescaller - 71 (από 0 έως 71) - 1 μικρό δευτερόλεπτο!
    • Λειτουργία Counter - Up
    • Περίοδος μετρητή - 39999 (θα πρέπει να μπορούμε να μετρήσουμε τον μακρύ παλμό)
    • Κανάλι λήψης εισόδου 1 - Άκρη πτώσης (θυμηθείτε ότι το σήμα από τον δέκτη IR είναι ανεστραμμένο)

Στη λειτουργία λήψης PWM, ο χρονοδιακόπτης#2 λειτουργεί ως εξής:

Όταν εντοπιστεί το μέτωπο πτώσης, ο μετρητής χρονομέτρου θα αποθηκευτεί στον καταχωρητή channel1 και ο μετρητής χρονοδιακόπτη θα επανέλθει με 0. Τότε ο χρονοδιακόπτης θα συνέχιζε να μετρά αντίστροφα την κατεύθυνση. Έτσι μπορούμε εύκολα να μετρήσουμε το μήκος του παλμού σε μικρο δευτερόλεπτα.

Από προεπιλογή, η κλάση STM32 USB HID προσομοιώνει το ποντίκι USB. Εδώ μπορείτε να βρείτε την οδηγία για τη μετατροπή του χειριστηρίου σε πληκτρολόγιο.

Βήμα 3: Προσαρμογή του ελεγκτή

Το έργο συνεργάζεται με το τηλεχειριστήριο Panasonic και το κέντρο πολυμέσων Kodi. Για να προσαρμόσετε το έργο στον δικό σας ελεγκτή, πρέπει να προσθέσετε τον πίνακα κωδικών για το τηλεχειριστήριό σας όπως έκανα για το τηλεχειριστήριο panasonic (panasonicCode) στην κεφαλίδα Inc/code.h. Όπως μπορείτε να δείτε, κάθε εντολή έχει μοναδικό αναγνωριστικό (στο IRcommmand enum). Υπάρχουν 24 εντολές (0-23) που αναγνωρίζονται από το έργο. Οι εντολές ταξινομούνται κατά συνάφεια.

typedef enum {IR_play = 0, IR_stop, IR_pause, IR_forward, IR_rewind, IR_last_channel, IR_OSD, IR_prevous_menu, IR_left, IR_right, IR_up, IR_down, IR_enter, IR_chapter_next, IR_chapter_preject, IR_sum_ IR_sum_ IR, IR_power, IR_unknown} IRcommand;

const uint16_t kbrd_kodi = {HID_KEY_P, HID_KEY_X, HID_KEY_SPACE, HID_KEY_F, HID_KEY_R, HID_KEY_0, HID_KEY_M, HID_KEY_BACKSPACE, HID_KEY_LEFT, HID_KEY_RIGHT, HID_KEY_UP, HID_KEY_DOWN, HID_KEY_ENTER, HID_KEY_DOT, HID_KEY_COMMA, HID_KEY_S, HID_KEY_I, HID_KEY_T, HID_KEY_L, (uint16_t (HID_LEFT_CTRL) << 8) | HID_KEY_T, HID_KEY_V, HID_KEY_Z, HID_KEY_W, HID_KEY_C};

const uint32_t panasonicCode = {0xd00505d, 0xd00000d, 0xd00606d, 0xd00525f, 0xd00929f, 0x100eced, 0xd00101d, 0x1002b2a, 0x1007273, 0x100f2f3, 0x1005253, 0x100d2d3, 0x1009293, 0x1002c2d, 0x100acad, 0x1009c9d, 0x1008e8f, 0x1004e4f, 0x100cecf, 0x1000e0f, 0x180c041, 0x1801091, 0x180a021, 0xd00bcb1};

Στη συνέχεια, θα πρέπει να προσθέσετε το δικό σας τηλεχειριστήριο στη μέθοδο init () στο IR.cpp με τη λειτουργία addRemote (). Τα ορίσματα της συνάρτησης είναι:

  • Αριθμός bits στο πακέτο
  • Μήκος κεφαλίδας πακέτου
  • Μήκος bit "μηδέν"
  • Μήκος bit ενός
  • Δείκτης στον πίνακα κώδικα
  • Αριθμητικά στοιχεία του πίνακα

void IRcmd:: init (void) {addRemote (48, 5252, 902, 1755, panasonicCode, sizeof (panasonicCode)/sizeof (uint32_t));

}

Επίσης το αρχείο περιέχει έναν άλλο πίνακα για τη μετατροπή εντολών σε κωδικούς πληκτρολογίου. Ο πίνακας kbdr_kodi περιέχει τους βασικούς κωδικούς για το κέντρο πολυμέσων Kodi. Μπορείτε να προσθέσετε έναν άλλο πίνακα για το δικό σας πρόγραμμα πολυμέσων, για παράδειγμα, vlc player. Εάν προσθέσετε έναν άλλο πίνακα εφαρμογών του κέντρου πολυμέσων, θα δημιουργήσετε ένα άλλο αντικείμενο KBD και θα το προετοιμάσετε στο main.cpp.

Βήμα 4: Εργαλεία για την απλοποίηση της προσαρμογής

Εργαλεία για την απλοποίηση της προσαρμογής
Εργαλεία για την απλοποίηση της προσαρμογής
Εργαλεία για την απλοποίηση της προσαρμογής
Εργαλεία για την απλοποίηση της προσαρμογής

Υπάρχουν δύο άλλα έργα στο αποθετήριο

  • IR έρευνα - επιτρέπει τη μέτρηση των παραμέτρων χρονισμού των σημάτων του τηλεχειριστηρίου σας.
  • IR_capture - επιτρέπει την καταγραφή των κωδικών HEX του τηλεχειριστηρίου σας.

Απλώς φορτώστε το έργο έρευνας IR και συνδέστε τη θύρα USB του πίνακα bluepill στον υπολογιστή σας. Στη συνέχεια, ξεκινήστε οποιοδήποτε πρόγραμμα τερματικού στη συσκευή εικονικής σειριακής θύρας, που αντιστοιχεί στην πλακέτα stm32. Ενώ πατάτε τα κουμπιά στο τηλεχειριστήριό σας, το πρόγραμμα θα μετράει τους λαμβανόμενους παλμούς και θα εκτυπώνει τους μέσους χρόνους για διαφορετικούς παλμούς. Θα πρέπει να απλοποιηθεί για να ανιχνευθεί το μήκος παλμού για την κεφαλίδα του πακέτου, μηδέν και ένα bits.

Στο έργο έρευνας IR το χρονόμετρο #2 λειτουργεί στη λειτουργία λήψης PWM με δύο κανάλια: το κανάλι ένα καταγράφει ολόκληρο το μήκος παλμού και το κανάλι 2 καταγράφει το μήκος κορυφής. Όταν εντοπιστεί η άκρη σήματος που πέφτει, η τιμή του χρονοδιακόπτη αποθηκεύεται στον καταχωρητή καναλιού και ο χρονοδιακόπτης μηδενίζεται με 0. Όταν εντοπιστεί η ανερχόμενη άκρη του σήματος, ο μετρητής χρονοδιακόπτη αποθηκεύεται στον καταχωρητή καναλιού 2.

Για να καταγράψετε τους κωδικούς κουμπιών του δικού σας τηλεχειριστηρίου, μπορείτε να χρησιμοποιήσετε το έργο IR_capture. Στο αρχείο main.c θα πρέπει να προσθέσετε τον απομακρυσμένο ορισμό όπως αυτός:

IRcode panasonic = {.hdr = 5252,.bits = 48,.zero = 902,.one = 1755,.dev = 60};

  • .hdr - το μήκος της κεφαλίδας σε mks
  • .bits - ο αριθμός των bit στο πακέτο
  • . μηδέν - το μήκος του μηδενικού bit
  • . ένα - το μήκος το ένα bit
  • .dev - η απόκλιση (η διαφορά στους χρόνους που μπορούν να γίνουν αποδεκτοί). Συνήθως είναι το 1/10 του μικρότερου μήκους.

Στη συνέχεια, προσθέστε το τηλεχειριστήριό σας στη λίστα των υποστηριζόμενων τηλεχειριστηρίων:

const IRcode* remote [2] = {& panasonic, & pioneer};

Συνιστάται: