Cómo generar PWM con cambio de fase de 4 canales con una frecuencia de 150 kHz

1

Estoy diseñando un PCB en el que necesito generar 4 señales PWM 'independientes':

  • Todos funcionan con el mismo reloj
  • Frecuencia fija, cualquiera entre 97kHz y 150kHz (idealmente)
  • Al menos 256 pasos del ciclo de trabajo (más - mejor)
  • Todos con tiempos de encendido y apagado independientes
  • no va a conducir leds, por lo que no puede ser una solución de corriente constante

Al principio estaba mirando PCA9685. Se adapta a todas mis necesidades, excepto la frecuencia máxima = ~ 2kHz, que es 50 veces más baja.

Luego, se me ocurrió PCA9635, que es lo suficientemente rápido (97kHz máx.), sin embargo, no permite establecer tiempos de encendido y apagado independientes.

Mi siguiente idea fue utilizar dos señales de PCA9635s para cada canal y poner puertas lógicas y flip-flops para habilitar la salida por la primera pendiente de señales y Deshabilitar por segundos. Sin embargo, esto va a ser muy complejo, ya que el pestillo S-R disparado por el borde consiste en al menos 8 compuertas.

Ahora mismo también tengo atmega88pa a bordo, así que:

  • Estoy buscando algo con interfaz digital (spi / i2c / ...)
  • No puedo usar el temporizador incorporado porque su resolución y frecuencia son demasiado bajas
  • No puedo usar bit-bang porque la uC tiene otras tareas
pregunta peku33

2 respuestas

2

Así que se me ocurrieron soluciones.

En lugar de atmega88pa, voy a utilizar AT90PWM3B . Tiene 3 'Controladores de Etapa de Potencia', cada uno implementado como un generador PWM de alta frecuencia de 12 bits, alimentado por PLL de 64MHz.

Con una frecuencia de 150 kHz, puedo obtener ~ 450 pasos.

Todas las etapas de potencia se pueden sincronizar, cada canal tiene un valor S (et) y R (eset).

    
respondido por el peku33
1

Podrías considerar un \ $ 25MHz \ $ MSP430 con un temporizador B7. (El temporizador B es bastante elegante y en muchas partes incluye 7 registros separados de captura / comparación atados a un contador). Computo que \ $ 97kHz \ veces 256 = 24.832MHz \ $, por lo que esto sugiere que es factible con estas partes MSP430. Algunos también se pueden ejecutar en \ $ 32MHz \ $ cristales, lo que permitiría una mayor frecuencia. (O una fuente externa puede suministrar ese reloj). Por lo tanto, hay un margen disponible. (Podrían ser algunos aún más rápidos que no conozco en este momento). Si sigue esta ruta, DEBE seleccionar un dispositivo con un Temporizador B, ya que son los únicos que conozco que admiten cuatro o más capturas / comparaciones fuera de un solo reloj.

La cadena de herramientas IAR Kickstart es completamente gratuita y es extremadamente buena, muy fácil de usar y admite ensamblaje, C y C ++. Tendría que mantener el código bajo algún límite de tamaño cuando use C o C ++, pero no hay límite con la codificación de ensamblaje, con su versión gratuita. El ensamblador también es de alta calidad, con todas las características que podrías esperar.

Pero sería una cadena de herramientas separada para agregar y eso complica las cosas. También puede contratar esa tarea de software: es realmente un proyecto fácil, para ser honesto. Lo he hecho tantas veces, es casi factible mientras duermo, es tan fácil de lograr.

Esto permitiría que una sola parte haga el trabajo. Necesitarías definir las comunicaciones, por supuesto. Pero eso es menor. Puede haber un cambio de fase notable, las salidas en relación con la fuente del reloj de conducción, si maneja el MSP430 desde una fuente de reloj externa.

    
respondido por el jonk

Lea otras preguntas en las etiquetas