Introducción del principio y realización del código de la regulación de velocidad del motor pwm

1. El principio y la introducción de pwm para realizar la regulación de la velocidad.

Inserte la descripción de la imagen aquí

Modulación de ancho de pulso PWM (Pulse Width Modulation).

1) ciclo de trabajo

El ciclo de trabajo pwm es la relación del nivel efectivo en todo el período de un período de pulso.

Al ajustar el ciclo de trabajo del PWM, se puede ajustar el cambio continuo de voltaje en el puerto IO, por lo que la potencia del periférico se puede controlar para cambiar continuamente y también se puede controlar la velocidad del motor de CC.
Entonces la clave es cómo ajustar la salida de la forma de onda PWM. Como se muestra en la
Inserte la descripción de la imagen aquí
figura siguiente, ARR en la figura es un valor de precarga que le damos al temporizador, y el cambio hacia arriba y hacia abajo de CCRx es la clave para generar la onda PWM. Suponemos que la parte de la salida con ARR mayor que CCRx es alta (es decir, t1-t2, t3-t4, t5-t6), y la parte de la salida con ARR menor que CCRx es baja (es decir, 0-t1, t2 -t3, t4-t5), luego cambiar el valor de CCRx puede cambiar el ciclo de trabajo de la salida PWM.
Siempre que comprenda la imagen de arriba, no es difícil entender cómo controlar la forma de onda de salida de PWM Lo importante es cómo establecer los valores de los dos registros, ARR y CCRx. (Cómo establecer el valor del registro aquí será muy claro en mi código, puede ver el principio primero)

  • Modo PWM, nivel efectivo

Anteriormente asumimos que la salida es alta cuando ARR es mayor que CCRx, y la salida es baja cuando ARR es menor que CCRx, pero este puede no ser el caso en aplicaciones reales, y puede ser la situación opuesta, cuando ARR es mayor. que CCRx, la salida es baja.Cuando ARR es menor que CCRx, la salida es alta.En cuanto a la situación, depende del modo PWM y la polaridad del nivel efectivo.

Modo 1: Cuando ARR es menor que CCRx, la salida es de nivel "activo" y cuando ARR es mayor que CCRx, la salida es de nivel "inválido".
Modo 2: Cuando ARR es menor que CCRx, la salida es un nivel "inválido" y cuando ARR es mayor que CCRx, la salida es un nivel "válido".

Tenga en cuenta que utilicé "válido" y "no válido" aquí en lugar de "alto" y "bajo", lo que significa que el nivel efectivo puede ser alto o bajo, no necesariamente alto. El programador debe implementar el modo PWM y la polaridad del nivel de efecto configurando los registros relevantes.

2) Modo de configuración

● Configuración de conteo
progresivo Cuando el bit DIR en el registro TIM1_CR1 es bajo, se ejecuta el conteo progresivo.
El siguiente es un ejemplo del modo PWM 1. Cuando TIM1_CNT <TIM1_CCRi, la señal de referencia PWM OCiREF es alta, de lo contrario es baja. Si el valor de comparación en TIM1_CCRi es mayor que el valor de recarga automática (TIM1_ARR), OCiREF permanece en '1'. Si el valor de comparación es 0, OCiREF permanece en '0'. La siguiente figura muestra un ejemplo de la forma de onda PWM alineada con los bordes cuando TIM1_ARR = 8.
Inserte la descripción de la imagen aquí
● Configuración de la cuenta regresiva
Cuando el bit DIR del registro TIM1_CR1 es alto, se ejecuta la cuenta regresiva.
En el modo PWM 1, cuando TIM1_CNT> TIM1_CCRi, la señal de referencia OCiREF es baja, de lo contrario es alta. Si el valor de comparación en TIM1_CCRi es mayor que el valor de recarga automática en TIM1_ARR, OCiREF permanece en '1'. La forma de onda de 0% PWM no se puede generar en este modo.

Aquellos que necesiten el manual de referencia del registro stm8 pueden ir a csdn para descargarlo o comentarlo.

2. El proceso de configuración de la señal pwm

(Aquí se toma stm8 para configurar TIM1 como ejemplo)

1) Establecer el valor de recarga automática

Ambos TIM1_ARR registran ARR [15: 0]
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

2) Establecer el valor de comparación de captura

Ambos TIM1_CCRx registran CCRi [15: 0]
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

3) Establecer el modo de salida y la alineación de pwm

Tanto TIM1_CCMRx registran OCIM [1: 0] como TIM1_CR1 registran bits CMS [1: 0]
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

4) Configure la polaridad de salida de la señal y habilite la salida

Tanto TIM1_CCERx registra CCiP como CCiE
Inserte la descripción de la imagen aquí

5) Habilite el contador para encender el interruptor principal

Tanto el bit CEN del registro TIM1_CR1 como el bit MOE del registro TIM1_BKR (TIM3 no tiene el bit MOE). Si
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
necesita el manual de referencia del registro stm8, puede ir a csdn para descargar o comentar

3. Código de control de velocidad PWM

(Aquí hay un ejemplo de configuración de bit TIM3 con stm8)

/****************************************************************/
//TIM3输出比较功能初始化函数TIM3_init(),有形参F_PWM_SET,无返回值
//Duty_CH1为通道一PD2的占空比
//Duty_CH2为通道二PD0的占空比
//F_PWM_SET为自动重装载寄存器数值
/****************************************************************/
void Motor_SpeedSet(unsigned long F_PWM_SET,float Duty_CH1,float Duty_CH2)
{
    
    
 
  //配置自动重装载寄存器
  TIM3_ARRH=F_PWM_SET/256;//配置自动重装载寄存器高位“ARRH”
  TIM3_ARRL=F_PWM_SET%256;//配置自动重装载寄存器低位“ARRL”
 
  TIM3_CH1_PWM_SET(F_PWM_SET,Duty_CH1);
  TIM3_CH2_PWM_SET(F_PWM_SET,Duty_CH2);
  
  TIM3_CR1|=0x01;//使能TIM1计数器功能“CEN=1”

}


//Duty_CH1为占空比
//F_SET_CH1为输出比较的数值
//TIM3_CH1为PD2
void TIM3_CH1_PWM_SET(unsigned long F_PWM_SET,float Duty_CH1)
{
    
    
 // F_SET_CH1 = 16000;        //TIM1输出比较功能初始化配置
 // printf("start\n");
  
  float CompareNum;                  //变量为比较值,用于配置比较寄存器
  CompareNum=Duty_CH1*F_PWM_SET;     //利用占空比和预装载数值来反求比较寄存器所需要设定的值
  
  /*
  //配置自动重装载寄存器
  TIM3_ARRH=F_PWM_SET/256;
  TIM3_ARRL=F_PWM_SET%256;         
  */
  
  //配置比较计数器
  TIM3_CCR1H=((u16)(CompareNum))/256;//配置捕获/比较寄存器1高位“CCR1H”
  TIM3_CCR1L=((u16)(CompareNum))%256;//配置捕获/比较寄存器1低位“CCR1L”
  
  //printf("计数器配置完成...\n");
  
  //配置向上计数模式边沿对齐,不用设置,默认向上计数
  //TIM1_CR1&=0x8F;
  
  //配置为PWM模式1,OC1M[2:0]=110,需要注意这里只是设置了有效电平,但是并没有说有效电平是高电平还是低电平
  //PWM模 - 在 计数 式1 向上无效电平;在向下计数时,一旦TIMx_CNT>则为有效电平(OC1REF=1)。
  //CC1通道被配置为输出,CC1S[1:0]=00
  TIM3_CCMR1=0x60;
  
  //配置CC1P=0,OC1信号有效电平为高电平
  //也就是比TIM3_CCR小时输出高电平,比TIM3_CCR大时输出低电平
  TIM3_CCER1&=0xFD;         
  
  //配置CC1E=1,OC1信号输出到对应的输出引脚
  TIM3_CCER1|=0x01;         
  
  //空闲状态时OC1为高电平,不需要设置
  //TIM1_OISR|=0x01;          
    
  //TIM3_CR1|=0x01;//使能TIM1计数器功能“CEN=1”
}



//Duty_CH1为占空比
//F_SET_CH1为输出比较的数值
//TIM3_CH1为PD0
void TIM3_CH2_PWM_SET(unsigned long F_PWM_SET,float Duty_CH2)
{
    
    
 // F_SET_CH1 = 16000;        //TIM1输出比较功能初始化配置
 // printf("start\n");
  
  float CompareNum;                  //变量为比较值,用于配置比较寄存器
  CompareNum=Duty_CH2*F_PWM_SET;     //利用占空比和预装载数值来反求比较寄存器所需要设定的值
  
  /*
  //配置自动重装载寄存器
  TIM3_ARRH=F_PWM_SET/256;
  TIM3_ARRL=F_PWM_SET%256;         
  */
  
  //配置比较计数器
  TIM3_CCR2H=((u16)(CompareNum))/256;//配置捕获/比较寄存器1高位“CCR1H”
  TIM3_CCR2L=((u16)(CompareNum))%256;//配置捕获/比较寄存器1低位“CCR1L”
 
  
  //配置为PWM模式1,OC1M[2:0]=110,需要注意这里只是设置了有效电平,但是并没有说有效电平是高电平还是低电平
  //PWM模 - 在 计数 式1 向上无效电平;在向下计数时,一旦TIMx_CNT>则为有效电平(OC1REF=1)。
  //CC1通道被配置为输出,CC1S[1:0]=00
  TIM3_CCMR2=0x60;
  
  //配置CC2P=0,OC2信号有效电平为高电平
  //也就是比TIM3_CCR小时输出高电平,比TIM3_CCR大时输出低电平
  TIM3_CCER1&=0xDF;         
  
  //配置CC2E=1,OC2信号输出到对应的输出引脚
  TIM3_CCER1|=0x10;         
     
  //TIM3_CR1|=0x01;//使能TIM1计数器功能“CEN=1”
}


//将pwm信号接到l298n的使能端就可以了
 printf("现在开始测试PWM信号产生...\n");
 case '1':
      Motor_SpeedSet(20000,0.2,0.2);      //一档速
      break;
 case '2':
      Motor_SpeedSet(20000,0.4,0.4);      //二档速
      break;
  
      Motor_SpeedSet(60000,0.8,0.8);	//可以配置不同当的速度,只要你想,100档速的小车都可以
   
      printf("信号已产生...\n");

4. Por qué pwm puede ajustar la velocidad

Aquí hay un artículo: "Explicación y rutinas detalladas del principio de salida STM32 PWM y el principio de accionamiento PWM del motor de CC", que se puede ver en el enlace de referencia en la parte inferior. Este blogger escribió muy bien. Aquí extraeré algunos principios clave.

Inserte la descripción de la imagen aquí
Significa que cuando la luz está apagada, todavía sientes que está encendida, cuando la luz sigue encendida y luego se apaga, mientras el intervalo sea extremadamente corto, parece que siempre está encendida.

Entonces, piénselo en este momento. Hay dos luces con el mismo voltaje de suministro de energía. En un período de tiempo fijo, la luz A parpadea constantemente. La frecuencia es tan rápida que el ojo humano no puede distinguirla. El 50% de el tiempo está encendido, el 50% está apagado y la luz B está siempre encendida. De esta manera, obviamente sentirá que la lámpara A es mucho más tenue que la lámpara B. Así que esta es una forma de controlar el brillo de las luces pequeñas.

Por supuesto, también puede comprender que bajo la misma potencia, las dos lámparas AB están haciendo el trabajo de convertir la energía eléctrica en energía luminosa. En un día, la lámpara A funciona de manera intermitente durante 12 horas y la lámpara B funciona continuamente durante 24 horas. horas. Entonces es obvio quién convierte más energía luminosa y quién es más brillante es evidente por sí mismo. En
Inserte la descripción de la imagen aquí
este momento, siempre que pueda controlar la luz encendida y apagada en muy poco tiempo, puede controlar el brillo.

En la figura anterior, el voltaje de los terminales de alimentación de las dos lámparas AB puede ser visto como la figura de abajo. No
Inserte la descripción de la imagen aquí
! La bobina del motor, ya sabes, tiene una estructura similar a una inductancia. Tiene la no mutabilidad de la corriente. Esta propiedad es como dijo el maestro de secundaria, la bobina de inductancia es de resistencia CC y CA, y la bobina magnética No se permite el campo generado en su interior El cambio brusco de la corriente, utilizará el campo magnético generado por la corriente para suprimir el cambio de la corriente.
Entonces, si usa PWM para controlar el motor, puede simplificarse y entenderse de la siguiente manera: El PWM generado por el chip se usa para hacer que la imagen de potencia en ambos extremos del motor se vea como una señal PWM sin hablar del principio del placa de circuito de impulsión. En cuanto a cómo se convirtió, nos derrumbaremos la próxima vez.
Esto significa que si el motor está controlado por PWM, el voltaje a través del motor es abruptamente como 010101, pero la corriente del motor no. Incluso si el voltaje es 0, todavía hay corriente fluyendo en el motor debido a la electromotriz autoinducida. fuerza de la bobina, y el motor continúa. Rotación, entonces ¿por qué podemos usar PWM para controlar la velocidad?
Podría pensar en una palabra pronunciada por un profesor de física de la escuela secundaria: voltaje equivalente.
Usamos PWM para controlar el voltaje equivalente. Entonces puedes entender.
También puede pensar en términos de conservación de energía. Después de que se enciende el motor, la resistencia de la bobina permanece constante, la potencia permanece constante y el voltaje pico en ambos extremos también es constante. En este caso, la diferencia en el ciclo de trabajo en la potencia El gráfico de voltaje de suministro cambiará Durante este período de tiempo, el motor eléctrico consume energía de manera diferente, y la energía mecánica a convertir es diferente, y la velocidad también es diferente. ¿No es tan fácil de entender?

Probablemente tome la intercepción aquí. Si desea ver la introducción completa, puede hacer clic en el enlace de referencia en la parte inferior del artículo.

Enlace de referencia:
Principio de salida STM32 PWM y principio de accionamiento PWM del motor de CC, explicación detallada y rutinas

Supongo que te gusta

Origin blog.csdn.net/weixin_44751294/article/details/111567625
Recomendado
Clasificación