Taula de continguts:

Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32: 3 passos
Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32: 3 passos

Vídeo: Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32: 3 passos

Vídeo: Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32: 3 passos
Vídeo: Основы горизонтально масштабируемых вычислений Джеймса Каффа 2024, De novembre
Anonim
Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32
Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32
Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32
Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32
Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32
Generació de senyal PWM d'alta resolució per a servidors RC amb dispositius STM32

Actualment, estic construint un transmissor / receptor RC basat en el xip RF SX1280. Un dels objectius del projecte és que vull una resolució de servo de 12 bits des dels pals fins als servos. En part, perquè els servos digitals moderns tenen una resolució de 12 bits; en segon lloc, un transmissor de gamma alta utilitza 12 bits de totes maneres. Estava investigant com puc generar senyals PWM d'alta resolució en dispositius STM32. Actualment estic fent servir la píndola negra (STM32F103C8T8) per al prototip.

Pas 1: llista de peces

Maquinari

  • Qualsevol tauler de desenvolupament STM32F103 (pastilla blava, pastilla negra, etc.)
  • Un banc d'alimentació USB com a font d'alimentació
  • Programador STM32 (Segger j-links, ST-LINK / V2 o simplement un clon st-link)

Programari

  • STM32CubeMX
  • TrueSTUDIO atòlic per a STM32
  • Font del projecte de github

Pas 2: la solució òbvia

La solució òbvia
La solució òbvia
La solució òbvia
La solució òbvia
La solució òbvia
La solució òbvia

Probablement la solució més senzilla és utilitzar un temporitzador que pugui generar senyals PWM, com TIM1-3 en un STM32F103. Per a un servo digital modern, la velocitat de fotogrames pot baixar fins a uns 5 ms, però per a un servo analògic antic hauria de ser de 20 ms o 50 Hz. Per tant, com a pitjor dels casos, generem-ho. Amb un rellotge de 72 MHz i una resolució de comptador de temporitzador de 16 bits, hem d’establir el precalificador del temporitzador a un mínim de 23 per cobrir la velocitat de fotogrames de 20 ms. He seleccionat 24 perquè, durant 20 ms, heu d’establir el comptador exactament a 60000. Podeu veure la configuració del CubeMX i els senyals PWM generats d’1 i 1,5 ms a les captures de pantalla. Malauradament, durant 1 ms el comptador del temporitzador s’hauria d’establir a 3000, cosa que ens donaria només 11 bits de resolució. No està malament, però l'objectiu era de 12 bits, així que provem una altra cosa.

Per descomptat, si seleccionés un micro controlador amb comptador de temporitzador de 32 bits, com STM32L476, aquesta resolució pot ser molt més alta i el problema es resoldria.

Però aquí voldria proposar una solució alternativa que augmentés encara més la resolució fins i tot al STM32F103.

Pas 3: temporitzadors en cascada per a una resolució més alta

Temporitzadors en cascada per a una resolució més alta
Temporitzadors en cascada per a una resolució més alta
Temporitzadors en cascada per a una resolució més alta
Temporitzadors en cascada per a una resolució més alta
Temporitzadors en cascada per a una resolució més alta
Temporitzadors en cascada per a una resolució més alta

El principal problema amb la solució anterior és que la velocitat de trames (20 ms) és relativament alta en comparació amb el senyal PWM realment generat (entre 1 i 2 ms), de manera que estem malgastant alguns bits valorats durant els 18 ms restants quan estem esperant el següent fotograma. Això es pot solucionar mitjançant temporitzadors en cascada mitjançant la funció d'enllaç de temporitzador per a la sincronització.

La idea és que utilitzaré TIM1 com a mestre per generar la velocitat de fotogrames (20 ms) i TIM2, TIM3 per fer front als senyals PWM com a esclaus. Quan el mestre activa els esclaus, només generen un senyal PWM en un mode de pols. Per tant, només necessito cobrir 2 ms en aquests temporitzadors. Per sort, podeu fer aquests temporitzadors en cascada al maquinari, de manera que aquesta sincronització no necessita cap intervenció del processador i també és molt precisa, la fluctuació es troba a la regió ps. Podeu veure la configuració del CubeMX a les captures de pantalla.

Com podeu veure, he seleccionat 3 com a prescalar, de manera que durant els 2 ms he de configurar 48000 al comptador del temporitzador. Això ens dóna 24.000 durant 1 ms, que és en realitat el que necessitem per a una resolució de 14 bits. Tadaaaa …

Feu una ullada a les captures de pantalla de l’oscil·loscopi a la presentació per obtenir el resultat final. El canal 3 (porpra) és la interrupció del temporitzador principal que activarà la salvació per generar un impuls. Els canals 1 i 4 (feix groc i verd) són els senyals PWM reals generats per diferents temporitzadors. Tingueu en compte que estan sincronitzats, però que se sincronitzen a les vores posteriors, això és a causa del mode PWM 2. Això no és un problema, perquè la velocitat de PWM per al servo en particular segueix sent correcta.

Un altre avantatge d'aquesta solució és que canviar la velocitat de fotogrames significaria canviar només el període a TIM1. Per als servos digitals moderns, podeu baixar fins als 200-300 Hz, però consulteu el manual del servo si voleu afinar-lo.

Recomanat: