Cómo crear una modulación de ancho de pulso (PWM) en un módulo Verilog para ejecutar un motor / servo

Una modulación de ancho de pulso es una manera de controlar la rotación o la posición de un motor eléctrico o servo.


Contenido

  • Consejos advertencias


  • Utilizando Verilog HDL, voy a mostrar lo fácil que es utilizar contadores con el fin de crear un PWM.

    Cosas que necesitará

    • Xilinx ISE
    • FPGA
    • Servo motor
    • Entonces, ¿cómo funciona un pwm?

      Tener una señal rectangular periódica, cambiamos el ciclo de trabajo (modular) a ser más pequeño o más grande y por lo tanto controlar nuestro dispositivo.

      ¿Por qué usar un PWM?

      Es una cámara digital simple de la técnica de conversión analógica que no requiere un ADC.

    • Ok, por lo que permite pensar lo entradas, salidas, registros y contadores que se necesita y lo que el diseño que queremos crear.

      Quiero usar los ocho interruptores en el tablero Spartan FPGA para controlar cómo mis motor / servo se mueve o qué tan rápido o lento que quiero que se mueva.

      Entradas: reloj, 8 interruptores
      Salidas: PWM
      Registros: PWM
      Contadores: contador de 16 bits (a explicar por qué los 16 bits más adelante)

    • Saber cuál es la velocidad de reloj de la FPGA y qué período que le gustaría utilizar.

      Tengo un tablero Spartan FPGA con un reloj de 50 MHz. Me gustaría actualizar la señal de cada 1 milisegundo (t). Aplicamos el siguiente cálculo para encontrar el período de forma de onda (p)

       p = t * reloj FPGA

      En mi caso:

       p = .001 segundos * 50MHz = 50,000

      Conociendo mi p es importante con el fin de calcular mi retardo de paso (SD):

       sd = p / 256 = 195

      ¿Por qué utilizo 256? Me va a utilizar 8 interruptores para controlar mi servo / motor, por lo que 2 ^ 8 = 256.

      Adición de sd al módulo Verilog
    • Finalmente queremos utilizar nuestro contador como nuestro ciclo de trabajo. Para calcular el número de bits consta nuestro contador usamos:

      log2 (sd) = cantidad de bits es nuestro contador

      Mientras que el contador es menor que sd (retardo de paso) multiplicado por el valor interruptores (que puede variar de 0 a 255), este es nuestro ciclo de trabajo.

      código final para un PWM utilizando 8 interruptores para controlar el ciclo de trabajo

    Consejos advertencias

    • Al crear el contador de registro que no pueda hacerlo inicializado a cero de lo contrario el programa no funcionará.
    Artículos Relacionados