Taula de continguts:

Falling in Stm32: Control remot per a Home Media Center: 4 passos (amb imatges)
Falling in Stm32: Control remot per a Home Media Center: 4 passos (amb imatges)

Vídeo: Falling in Stm32: Control remot per a Home Media Center: 4 passos (amb imatges)

Vídeo: Falling in Stm32: Control remot per a Home Media Center: 4 passos (amb imatges)
Vídeo: BigTreeTech - SKR 3 - TMC2130 with Sensorless Homing 2024, De novembre
Anonim
Falling in Stm32: Control remot per a Home Media Center
Falling in Stm32: Control remot per a Home Media Center

Es tracta d’un prototip complet per al control remot del centre de suports domèstic basat en el micro controlador smt32, stm32f103c8t6 conegut com a placa ‘bluepill’. Suposem que utilitzeu un PC per al centre multimèdia domèstic. És una solució molt flexible, que us permet col·locar una enorme biblioteca de vídeo al disc dur intern, o podeu reproduir vídeo des de la xarxa, per exemple youtube o així, no teniu problemes amb els còdecs o la reproducció de vídeo, ja que és molt És fàcil actualitzar el reproductor de programari en qualsevol moment. El principal desavantatge d'aquesta solució és que heu d'utilitzar el ratolí i el teclat per controlar la reproducció. El comandament a distància IR és molt convenient per a això.

En aquest article mostraré com crear el propi control remot mitjançant la placa de xip bluepill.

Pas 1: la idea

La idea
La idea
La idea
La idea

La idea principal és molt senzilla: la placa bluepill té un port USB incrustat i pot actuar com a teclat USB HID. Si connectem el receptor IR al tauler, es podria traduir l'ordre del vostre comandament a distància IR a "prémer la tecla" del teclat virtual. No es necessiten conductors addicionals.

Hi ha molts protocols d’IR al món que ens envolta. Cada televisor del proveïdor de VCS té el seu propi protocol IR. Però tots aquests protocols tenen alguna cosa en comú: utilitzen la modulació d’impulsos per codificar el senyal. Normalment, hi ha algun preàmbul: impuls llarg abans del primer bit del paquet. A continuació, el control IR transmet paquets sencers amb 0 i 1 i finalitza la transmissió amb un pols llarg acabat. Per descodificar el bit hem de mesurar el pols de longitud i la longitud del pic. Normalment, la longitud màxima de la lògica 0 i la lògica 1 són les mateixes, la diferència està en la longitud completa del pols.

Els microcontroladors stm32 tenen una funció incrustada per captar el senyal PWM. Prop de tots els temporitzadors del microcontrolador es poden posar a la "captura de senyal PWM més" quan les variables del canal del temporitzador guarden la longitud total del pols i la seva longitud màxima. Aquí he de destacar el petit detall: quan el receptor IR capta el senyal, la tensió del seu pin de treball passa a ser 0 i, en estat de ralentí, la tensió del pin de treball és de 5 o 3,3 volts, depenent de la tensió d’alimentació del receptor IR. És a dir, el receptor «inverteix» el senyal.

Amb el mode de captura PWM, el micro controlador stm32 es pot convertir fàcilment en un traductor remot IR des del control remot IR fins als codis del teclat. A continuació, podeu iniciar el vostre programari de visualització preferit, per exemple, Kodi de VLC per reproduir la vostra pel·lícula preferida al centre multimèdia.

Pas 2: creació del controlador

Creació del controlador
Creació del controlador
Creació del controlador
Creació del controlador
Creació del controlador
Creació del controlador
Creació del controlador
Creació del controlador

Per programar el microcontrolador stm32, voldria recomanar el programari gratuït de STM: sistema workbench (aka ac6) i l'eina de configuració de la placa cubeMX. Per carregar el programari al microcontrolador, es pot utilitzar el clon de xip de l'adaptador ST-Link V2. Els fitxers de projecte del banc de treball del sistema adjunts a aquest pas, el fitxer F1-IR_remote.zip.

L’eina de configuració de la placa simplifica el procés de configuració inicial del maquinari del nostre microcontrolador.

Si utilitzeu l'eina del banc de treball del sistema, només podeu utilitzar el projecte descarregat. Però si voleu investigar el projecte amb més detalls, podeu crear la configuració de la placa al cubeMX:

  • Creeu un projecte nou i seleccioneu el tauler stm32f103c8
  • Seleccioneu "Resonador de vidre / ceràmica" per a l'element "Rellotge d'alta velocitat (HSE)" del menú RCC.
  • Seleccioneu "Serial Wire" per a l'element "Depuració" al menú SYS.
  • Configureu el temporitzador núm. 2 (menú TIM2) en mode de captura PWM tal com es mostra a la imatge:

    • Mode esclau -> Mode de restabliment
    • Font del disparador -> TI1FP1
    • Font del rellotge -> Rellotge intern
    • Canal1 -> Mode directe de captura d’entrada
  • Estableix la casella de selecció 'Dispositiu (FS) al menú USB
  • Seleccioneu l'element del menú desplegable "Classe de dispositiu d'interfície humana (HID)" a l'element "Classe d'IP FS" al menú USB_DEVICE
  • Al tauler de configuració del rellotge, assegureu-vos de proporcionar 72 MHz al temporitzador núm. 2 perquè necessitem un recompte de temporitzador a cada 1 mks.
  • Al tauler de configuració, configureu el dispositiu USB tal com es mostra a la imatge
  • Al tauler de configuració, configureu el temporitzador núm. 2 de la manera següent:

    • Prescaller - 71 (de 0 a 71) - 1 tic de micro segon!
    • Mode de comptador: amunt
    • Període de comptador: 39999 (hauríem de poder mesurar el pols llarg)
    • Canal de captura d'entrada 1: Falling Edge (recordeu que el senyal del receptor IR està invertit)

En el mode de captura PWM, el temporitzador núm. 2 funcionaria de la següent manera:

Quan es detectés el front de caiguda, el comptador del temporitzador es desaria al registre channel1 i el comptador del temporitzador es restabliria amb 0. Llavors el temporitzador continuaria comptant la direcció ascendent. Així, podem mesurar fàcilment la longitud del pols en micro segons.

Per defecte, la classe STM32 USB HID simula el ratolí USB. Aquí podeu trobar les instruccions per convertir el controlador en teclat.

Pas 3: adaptar el controlador

El projecte funciona amb el control remot Panasonic i el centre multimèdia Kodi. Per adaptar el projecte al vostre propi controlador, heu d'afegir la matriu de codis per al control remot, tal com ho vaig fer per al control remot panasonic (panasonicCode) a la capçalera Inc / code.h. Com podeu veure, totes les ordres tenen un identificador únic (a la llista IRcommmand). Hi ha 24 ordres (0-23) reconegudes pel projecte. Les ordres s’ordenen per la rellevància.

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_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};

A continuació, heu d'afegir el vostre propi control remot al mètode init () a l'IR.cpp amb la funció addRemote (). Els arguments de la funció són:

  • Nombre de bits del paquet
  • La longitud de la capçalera del paquet
  • Longitud de bits 'zero'
  • Longitud d'un bit
  • Punter a la matriu de codis
  • Nombre d'elements de la matriu

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

}

El fitxer també conté una altra taula per convertir ordres en codis de teclat. La matriu kbdr_kodi conté els codis clau per a Kodi media center. Podeu afegir una altra matriu per al vostre propi programa multimèdia, per exemple, reproductor vlc. Si afegiu una altra taula d'aplicacions del centre de suports, creeu un altre objecte KBD i l'inicialitzeu a main.cpp.

Pas 4: Eines per simplificar la confecció

Eines per simplificar la confecció
Eines per simplificar la confecció
Eines per simplificar la confecció
Eines per simplificar la confecció

Hi ha dos projectes més al repositori

  • Investigació IR: permet mesurar els paràmetres de temps dels senyals del comandament a distància.
  • IR_capture: permet capturar els codis HEX del control remot.

Només cal carregar el projecte d'investigació IR i connectar el port USB de la placa bluepill a l'ordinador. A continuació, inicieu qualsevol programa de terminal al dispositiu de port sèrie virtual, corresponent a la placa stm32. Mentre premeu els botons del control remot, el programa mesuraria els polsos rebuts i imprimiria els temps mitjans per a diferents polsos. Ha de simplificar-se per detectar la longitud del pols de la capçalera del paquet, zero i un bits.

En el projecte d'investigació IR, el temporitzador núm. 2 està funcionant en mode de captura PWM amb dos canals: el canal primer captura tota la longitud del pols i el canal 2 captura la longitud màxima. Quan es detecta la vora del senyal descendent, el valor del temporitzador es guarda al registre d'un canal i el temporitzador es restableix amb 0. Quan es detecta la vora ascendent del senyal, el comptador del temporitzador es guarda al registre del canal 2.

Per capturar els codis de botó del vostre propi control remot, es pot utilitzar el projecte IR_capture. Al fitxer main.c heu d'afegir la definició remota com aquesta:

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

  • .hdr: la longitud de la capçalera en mks
  • .bits: el nombre de bits del paquet
  • .zero: la longitud del bit zero
  • .one: la longitud un el bit
  • .dev - la desviació (la diferència de temps que es pot acceptar). Normalment és 1/10 de la longitud més petita.

A continuació, afegiu el comandament a la llista de comandaments a distància compatibles:

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

Recomanat: