OpenMV emite PWM para controlar el mecanismo de dirección

Introducción de la función oficial del temporizador OpenMV: clase de temporizador: control del temporizador interno

Tabla de contenido

Introducción al recurso PWM de OpenMV

¿Por qué usar OpenMV para generar PWM?

Asignación de recursos PWM de OpenMV

recurso

Aviso 

sugerencia

Código de salida PWM

explicación del código

Temporizador

Timer.channel

La diferencia entre tim.channel y Timer.channel

Análisis de canal de temporizador


Introducción al recurso PWM de OpenMV

¿Por qué usar OpenMV para generar PWM?

OpenMV tiene 9 IOs externos para que usemos, muchas veces solo usamos OpenMV como una herramienta de reconocimiento de imágenes, que no aprovecha al máximo sus recursos .

6 de los 9 puertos IO de OpenMV pueden generar PWM , y el método de control es muy simple. Durante nuestra competencia, puede ser necesario identificar y agarrar objetos por color, recomiendo usar OpenMV para hacer la identificación por color y luego controlar el brazo robótico para agarrar objetos. Esto reduce la carga sobre el control maestro y hace un uso completo de los recursos. Dado que la salida PWM de OpenMV es extremadamente simple , la carga de trabajo también se reduce .

Nota: Solo explicaremos la parte de salida de PWM aquí. Con respecto al modo de codificador de temporizador de OpenMV, el modo de comparación y el modo de captura deben ser estudiados por nosotros mismos .

Asignación de recursos PWM de OpenMV

recurso

Los recursos PWM de OpenMV son los siguientes

Aviso 

El temporizador 1 no se puede utilizar como puerto de salida PWM. En el documento oficial se indica que el temporizador (1) se utiliza para la cámara, por lo que el temporizador 1 no se puede utilizar .

 Si usamos el temporizador 1, se informará un error

sugerencia

Debido a que solo podemos usar 6 IO para generar PWM, entonces P4P5 se usa para la comunicación en serie con el maestro. Por lo tanto, solo se pueden usar 4 salidas PWM, lo suficiente para usar un brazo robótico de cuatro ejes. Si el brazo robótico tiene más de 4 servos, ¡utilícelo con precaución! ! !

Código de salida PWM

OpenMV es en realidad una microcomputadora de un solo chip STM32.Creo que la mayoría de las personas que juegan usan STM32F103 para el aprendizaje introductorio. Todos sabemos que STM32 puede emitir hardware PWM y uno de sus temporizadores tiene 4 canales. Cada canal puede generar PWM. Lo mismo es cierto para OpenMV.

# PWM 控制例子
#
# 这个例子展示了如何使用OpenMV的PWM

import time
from pyb import Pin, Timer

tim = Timer(4, freq=50) #设置频率,初始化定时器4,将其设置为50HZ,也就是说一个PWM周期为20ms
Tim = Timer(2, freq=50) #设置频率,初始化定时器2,将其设置为50HZ,也就是说一个PWM周期为20ms

# 生成50HZ方波,使用TIM4,channels 1,2,3分别是 5% , 10% ,15占空比。
tim.channel(1, Timer.PWM, pin=Pin("P7"), pulse_width_percent=5)
tim.channel(2, Timer.PWM, pin=Pin("P8"), pulse_width_percent=10)
tim.channel(3, Timer.PWM, pin=Pin("P9"), pulse_width_percent=15)

# 生成50HZ方波,使用TIM2,channel  1,2,3分别是 20% , 25% ,30占空比。
Tim.channel(1, Timer.PWM, pin=Pin("P6"), pulse_width_percent=20)
Tim.channel(4, Timer.PWM, pin=Pin("P5"), pulse_width_percent=25)
Tim.channel(3, Timer.PWM, pin=Pin("P4"), pulse_width_percent=30)


while (True):
    time.sleep_ms(1000)

explicación del código

Temporizador

tim = Timer(4, freq=50) #设置频率,初始化定时器4,将其设置为50HZ,也就是说一个PWM周期为20ms
Tim = Timer(2, freq=50) #设置频率,初始化定时器2,将其设置为50HZ,也就是说一个PWM周期为20ms

(1) Vemos que el código es muy simple, es decir, la frecuencia de salida PWM del temporizador 4 es de 50HZ.

(2) ¿Qué es HZ? 1HZ significa un cambio en 1S, si es 50HZ, significa 50 veces en 1S, 1/50s = 20ms. Así que ahora un período PWM es de 20 ms .

(3) El control actual de tim es el control del temporizador 4 que salta a 50HZ. Tim es el control del Timer 2 que salta a 50HZ.

Timer.channel

La diferencia entre tim.channel y Timer.channel

Porque antes tim = Timer(4, freq=50), entonces ahora tim es la clase Timer, hablando en general, tim ahora es Timer . Y tim.channel ahora puede entenderse como Timer.channel . De manera similar, Tim.channel puede entenderse como Timer.channel .

Análisis de canal de temporizador

¡Solo hablamos de la parte relevante de PWM!

Veamos primero la explicación en el manual oficial :

 (1) Esto muestra que debemos pasar en el canal canal variable. Este valor puede ser el siguiente:

1  //通道1
2  //通道2
3  //通道3

(2) También puede pasar al modo de parámetros más tarde. Hay múltiples parámetros opcionales, ¡solo hablo de la parte PWM!

Timer.PWM            // 配置PWM模式下的定时器(高电平有效)
Timer.PWM_INVERTED   //配置PWM模式下的定时器(低电平有效)

(3) callback , esto es para establecer la función en la interrupción del temporizador. déjalo en paz

Nada que ver con PWM, sin explicación. ¡Aprende por ti mismo si quieres saber!

(4)  pin , configure la salida PWM en I pin. Por ejemplo, si quiero que el canal 3 del temporizador 2 emita PWM, escríbalo como pin=Pin("P4"). letra p mayúscula

Personalmente, recomiendo usar pulse_width_percent porque puede establecer intuitivamente el ciclo de trabajo. Por ejemplo, si queremos configurar el ciclo de trabajo al 50%, podemos escribir pulse_width_percent=50;

pulse_width            //决定使用的初始脉宽值。
pulse_width_percent    //决定使用的初始脉宽值百分比。

おすすめ

転載: blog.csdn.net/qq_63922192/article/details/128055499
おすすめ