Inicialización de registro PWM

Este módulo realiza principalmente la función de forma de onda PWM y la función de captura de entrada con ciclo de trabajo de frecuencia de salida ajustable, y también se puede utilizar como contador.

1. Características principales

1. Contador ascendente o descendente de 16 bits;
2. Admite hasta 6 canales PWM;
3. Cada canal admite la comparación de salida o la salida de forma de onda del modo PWM alineado con el borde, admite operaciones de comparación de salida de configuración, limpieza y conmutación, y la polaridad de la salida PWM es opcional;
4. Cada canal admite activación de captura de entrada ascendente, descendente o cualquier borde;
5. En todos los canales, admite modulación de ancho de pulso alineado al centro;
6. La fuente del reloj del temporizador, que se puede seleccionar como reloj del sistema, reloj oscilador de cristal o entrada de reloj externo, admite la división de frecuencia del reloj 1/2/4/8/16/32/64/128;
7. Admite una interrupción de función y una interrupción de desbordamiento de contador para cada canal;
8. Cada puerto de canal y puerto de reloj externo se puede habilitar y estroboscópico individualmente, y el puerto de canal o el puerto de reloj externo no se habilitan cuando se admite el conteo de PWM. Se pueden configurar por separado como funciones GPIO;
9. Admite el conteo de PWM para activar el muestreo ADC;

2. Inicialización

pwm_init

/*!
    \brief      pwm initialize 
    \param[in]  pwm_sc: pwm control register  
    \param[in]  pwm_mod: pwm mod count        
    \param[out] none
    \retval     none
*/
void pwm_init(uint8_t pwm_sc,uint16_t pwm_mod)
{
    PWM_MOD = pwm_mod;
    PWM_SC = pwm_sc;
    if((pwm_sc & PWM_SC_TOIE) != 0U){
        NVIC_EnableIRQ(PWM_TOF_IRQN);
    }else{
        NVIC_DisableIRQ(PWM_TOF_IRQN);
    }
}

La entrada es el registro pwm_sc y pwm_mod  

registro pwm_sc:

son ocho

El bit 0-2 es  PWM_SC_CLK_DIV (XXX) El reloj de conteo se divide por la potencia PWM_SC_CLK_DIV de X

El bit 3-4 PWM_SC_CLK_SEL (01) indica la selección de la cuenta del reloj del sistema

5 bits PWM_SC_CPWMS (0) significa contar

6 bits PWM_SC_TOIE (1) Activar la habilitación de interrupción

PWM_SC_TOF (0) de 7 bits no desbordado

El registro PWM_SC_CLK_DIV de 0-2 bits es el siguiente, elegimos 32 divisiones de frecuencia para convertir 5 en binario (101) 

 Luego pwm_sc se configura como 01001101 y se convierte a hexadecimal como 0x4D

 registro pwm_mod:

Tiene de 0 a 15 dígitos, lo que significa que el valor máximo del ciclo del contador es 111111111111111, que es 32767 cuando se convierte a decimal

Registro de módulo de contador
Configure el período del contador, reinicie el sistema o escriba el registro PWM_CNT para borrar el contador. modo de escritura
Antes de contar registros, es necesario cerrar el contador o reiniciar el contador para evitar el primer desbordamiento del contador.
Se produce el caos del tiempo.

 Lo configuramos en 2000 (el período es de 2 ms). El tamaño específico depende de cómo lo use. Generalmente, no es demasiado grande. Uso PWM para impulsar el motor.

Convertido a hexadecimal es 0x07D0

Entonces pwm_init se inicializa como pwm_init(0x4D,0x07D0);

inicialización del canal pwm_ch1_init

Introduzca el registro de control pwm_ch_sc y pwm_ch_cnt

pwm_ch_sc

/*!
    \brief      pwm channel 1 initialize 
    \param[in]  pwm_ch_sc: pwm channel 1 control register
    \param[in]  pwm_ch_cnt: pwm channel 1 count  
    \param[out] none
    \retval     none
*/
void pwm_ch1_init(uint8_t pwm_ch_sc,uint16_t pwm_ch_cnt)
{
    PWM_C1SC = pwm_ch_sc;
    PWM_C1V = pwm_ch_cnt;   //占空比
    if((pwm_ch_sc & PWM_CnSC_IE) != 0U){
        NVIC_EnableIRQ(PWM_CH1_IRQn);
    }else{
        NVIC_DisableIRQ(PWM_CH1_IRQn);
    }
}

El bit 0-2 es  PWM_SC_CLK_DIV (000) El reloj de conteo se divide por la potencia de 2 PWM_SC_CLK_DIV

El bit 3-4 PWM_SC_CLK_SEL (01) indica la selección de la cuenta del reloj del sistema

PWM_SC_CPWMS de 5 bits (1) significa cuenta ascendente seguida de cuenta regresiva (alineado al centro)

6 bits PWM_SC_TOIE (1) Activar la habilitación de interrupción

PWM_SC_TOF (0) de 7 bits no desbordado

pwm_ch1_sc es  01101000


pwm_ch_cnt

Registro de valor de conteo
Registre el valor de conteo actual, reinicie el sistema o escriba este registro para borrar el contador.

 3. Período y ciclo de trabajo

El período de la señal PWM está determinado por el valor del registro de módulo PWM_MOD (hexadecimal 0x07D0=decimal 2000=2ms )

El ciclo de trabajo está determinado por la configuración en el registro de canal PWM_C x V. La polaridad de esta señal PWM está determinada por la configuración de los bits de control PWM_C x SC_ELS. Son posibles ciclos de trabajo de 0% y 100%.

PWM_C x V en la inicialización del canal pwm_ch1_init PWM_C1V = pwm_ch_cnt;

Y PWM_C1V  es la dirección de registro de la siguiente manera

 Ciclo de trabajo = ( pwm_ch_cnt)/( pwm_mod )

50% = 1000/2000 = 0x03E8 /  0x07D0

Luego, pwm siempre genera un ciclo de trabajo de 50, si desea ajustar el ciclo de trabajo, ajuste el tamaño de pwm_ch_cnt.

El principio en el hardware es probablemente que el pwm ingresa un nivel alto, lo que hace que se conecte el triodo, y luego conecte los polos positivo y negativo para impulsar el motor, y luego la velocidad del ciclo de trabajo es el momento de establecer el nivel alto en el ciclo Un período de nivel alto es un ciclo de trabajo del 100 %.

Para la dirección, el relé generalmente se usa para controlar la dirección del motor, y el PWM controla la velocidad del motor.

Supongo que te gusta

Origin blog.csdn.net/qq_51679917/article/details/130195075
Recomendado
Clasificación