Sommario:

Falling in Stm32: telecomando per Home Media Center: 4 passaggi (con immagini)
Falling in Stm32: telecomando per Home Media Center: 4 passaggi (con immagini)

Video: Falling in Stm32: telecomando per Home Media Center: 4 passaggi (con immagini)

Video: Falling in Stm32: telecomando per Home Media Center: 4 passaggi (con immagini)
Video: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Dicembre
Anonim
Falling in Stm32: telecomando per Home Media Center
Falling in Stm32: telecomando per Home Media Center

Questo è un prototipo completo per il controllo remoto del centro multimediale domestico basato sul micro controller smt32, stm32f103c8t6 noto come scheda "bluepill". Supponiamo di utilizzare un PC per il media center domestico. È una soluzione molto flessibile, che ti consente di posizionare un'enorme libreria video nel disco rigido interno, oppure puoi riprodurre video dalla rete, ad esempio YouTube o giù di lì, non hai alcun problema con i codec o la riproduzione video, perché è molto facile aggiornare il lettore software in qualsiasi momento. Il principale svantaggio di questa soluzione è che dovresti usare mouse e tastiera per controllare la riproduzione. Il telecomando IR è molto conveniente per questo.

In questo articolo mostrerò come creare il proprio telecomando utilizzando la scheda chip bluepill.

Passaggio 1: l'idea

L'idea
L'idea
L'idea
L'idea

L'idea principale è molto semplice: la scheda bluepill ha una porta USB incorporata e può fungere da tastiera USB HID. Se colleghiamo il ricevitore IR alla scheda, potrebbe tradurre il comando dal telecomando IR alla "pressione dei tasti" della tastiera virtuale. Non sono necessari driver aggiuntivi!

Ci sono molti protocolli IR nel mondo che ci circonda. Ogni TV del fornitore VCS ha il proprio protocollo IR. Ma tutti questi protocolli hanno qualcosa in comune: usano la modulazione degli impulsi per codificare il segnale. Di solito c'è qualche preambolo: lungo impulso prima del primo bit nel pacchetto. Quindi il controllo IR trasmette l'intero pacchetto con 0 e 1 e finalizza la trasmissione con impulso lungo finale. Per decodificare il bit dobbiamo misurare la lunghezza dell'impulso e la lunghezza del picco. Di solito, la lunghezza di picco della logica 0 e della logica 1 è la stessa, la differenza è nella lunghezza completa dell'impulso.

I micro controller stm32 hanno una funzione incorporata per catturare il segnale PWM. Quasi ogni timer del microcontrollore può essere inserito nella 'cattura segnale PWM di più' quando le variabili di canale del timer salvano la lunghezza totale dell'impulso e la sua lunghezza di picco. Qui devo evidenziare il piccolo dettaglio: quando il ricevitore IR cattura il segnale, la tensione sul suo pin di lavoro diventa 0 e nello stato di riposo la tensione nel pin di lavoro è di 5 o 3,3 volt a seconda della tensione di alimentazione del ricevitore IR. Cioè, il ricevitore "inverte" il segnale.

Con la modalità di acquisizione PWM, il micro controller stm32 può essere facilmente trasformato in un traduttore remoto IR dal telecomando IR ai codici della tastiera. Quindi puoi avviare il tuo software di visualizzazione preferito, ad esempio Kodi di VLC per riprodurre il tuo film preferito sul media center.

Passaggio 2: creazione del controller

Creazione del controller
Creazione del controller
Creazione del controller
Creazione del controller
Creazione del controller
Creazione del controller
Creazione del controller
Creazione del controller

Per programmare il micro controller stm32 vorrei raccomandare il software gratuito di STM: system workbench (aka ac6) e lo strumento di configurazione della scheda cubeMX. Per caricare il software nel micro controller è possibile utilizzare il clone del chip dell'adattatore ST-Link V2. I file di progetto del workbench di sistema allegati a questo passaggio, file F1-IR_remote.zip.

Lo strumento di configurazione della scheda semplifica il processo di configurazione hardware iniziale del nostro microcontrollore.

Se stai utilizzando lo strumento workbench di sistema, puoi semplicemente utilizzare il progetto scaricato. Ma se desideri approfondire il progetto, puoi creare la configurazione della scheda nel cubeMX:

  • Crea un nuovo progetto e seleziona la scheda stm32f103c8
  • Selezionare "Risonatore di cristallo/ceramica" per la voce "Orologio ad alta velocità (HSE)" nel menu RCC.
  • Selezionare 'Serial Wire' per la voce 'Debug' nel menu SYS.
  • Configurare il timer n. 2 (menu TIM2) in modalità di acquisizione PWM come mostrato nell'immagine:

    • Modalità Slave -> Modalità Reset
    • Sorgente trigger -> TI1FP1
    • Sorgente orologio -> Orologio interno
    • Canale1 -> Modalità diretta cattura ingresso
  • Imposta la casella di controllo "Dispositivo (FS) nel menu USB"
  • Selezionare l'elemento del menu a discesa "Human Interface Device Class (HID)" nella voce "Class of FS IP" nel menu USB_DEVICE
  • Nel pannello di configurazione dell'orologio, assicurati di fornire 72 MHz al timer n. 2 perché abbiamo bisogno del conteggio del timer ogni 1 mks.
  • Nel pannello di configurazione configurare il dispositivo USB come mostrato nell'immagine
  • Nel pannello di configurazione configurare il timer#2 come segue:

    • Prescaler - 71 (da 0 a 71) - 1 microsecondo tick!
    • Modalità contatore - Su
    • Counter Period - 39999 (dovremmo essere in grado di misurare l'impulso lungo)
    • Ingresso cattura canale1 - Falling Edge (ricordare che il segnale dal ricevitore IR è invertito)

Nella modalità di acquisizione PWM il timer#2 funzionerebbe come segue:

Quando viene rilevato il fronte di discesa, il contatore del timer viene salvato nel registro del canale 1 e il contatore viene azzerato. Quindi il contatore continua a contare in avanti. Quindi possiamo facilmente misurare la lunghezza dell'impulso in micro secondi.

Per impostazione predefinita, la classe STM32 USB HID simula il mouse USB. Qui puoi trovare le istruzioni per trasformare il controller in tastiera.

Passaggio 3: personalizzare il controller

Il progetto funziona con il telecomando Panasonic e il media center Kodi. Per personalizzare il progetto per il tuo controller dovresti aggiungere l'array di codici per il tuo telecomando come ho fatto per il telecomando panasonic (panasonicCode) all'intestazione Inc/code.h. Come puoi vedere, ogni comando ha un ID univoco (nell'enumerazione IRcommmand). Ci sono 24 comandi (0-23) riconosciuti dal progetto. I comandi sono ordinati in base alla pertinenza.

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_previous, IR_info, IR_subtitle, IR_nxt_subtitle, IR_pos_subtitle, IR_teletext, IR_zoom, IR_mark_watched, IR_playlist, IR_power, IR_sconosciuto } 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 };

Quindi dovresti aggiungere il tuo telecomando nel metodo init() in IR.cpp con la funzione addRemote(). Gli argomenti della funzione sono:

  • Numero di bit nel pacchetto
  • La lunghezza dell'intestazione del pacchetto
  • Lunghezza bit 'zero'
  • Lunghezza 'un' bit
  • Puntatore all'array di codice
  • Numero elementi dell'array

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

}

Inoltre il file contiene un'altra tabella per convertire i comandi in codici da tastiera. L'array kbdr_kodi contiene i codici chiave per Kodi media center. È possibile aggiungere un altro array per il proprio programma media center, ad esempio lettore vlc. Se si aggiungesse un'altra tabella dell'applicazione media center, si creerebbe un altro oggetto KBD e lo si inizializzerebbe nel file main.cpp.

Passaggio 4: strumenti per semplificare la sartoria

Strumenti per semplificare la sartoria
Strumenti per semplificare la sartoria
Strumenti per semplificare la sartoria
Strumenti per semplificare la sartoria

Ci sono altri due progetti nel repository

  • Indagine IR - che consente di misurare i parametri di temporizzazione dei segnali del telecomando.
  • IR_capture - permette di catturare i codici HEX del tuo telecomando.

Basta caricare il progetto di ricerca IR e collegare la porta USB della scheda bluepill al computer. Quindi avviare qualsiasi programma terminale sul dispositivo della porta seriale virtuale, corrispondente alla scheda stm32. Mentre si premono i pulsanti sul telecomando, il programma misurerà gli impulsi ricevuti e stamperà i tempi medi per i diversi impulsi. Dovrebbe semplificare il rilevamento della lunghezza dell'impulso per l'intestazione del pacchetto, zero e un bit.

Nel progetto di indagine IR il timer #2 funziona in modalità di cattura PWM con due canali: il canale uno cattura l'intera lunghezza dell'impulso e il canale2 cattura la lunghezza del picco. Quando viene rilevato il fronte di discesa del segnale, il valore del timer viene salvato nel registro del canale uno e il timer viene ripristinato con 0. Quando viene rilevato il fronte di salita del segnale, il contatore del timer viene salvato nel registro del canale 2.

Per acquisire i codici dei pulsanti del proprio telecomando, è possibile utilizzare il progetto IR_capture. Nel file main.c dovresti aggiungere la definizione remota come questa:

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

  • .hdr - la lunghezza dell'intestazione in mks
  • .bits - il numero di bit nel pacchetto
  • .zero - la lunghezza del bit zero
  • .uno - la lunghezza uno il bit
  • .dev - la deviazione (la differenza di tempi che può essere accettata). Di solito è 1/10 della lunghezza più piccola.

Quindi aggiungi il tuo telecomando all'elenco dei telecomandi supportati:

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

Consigliato: