Pista analógica paralela a PWM: ¿problemas de diafonía?

Estoy diseñando una placa de circuito impreso para mi robot espeleólogo, que consiste principalmente en un STM32F723ZE y 16 controladores de motor, con medición de corriente.

Mi pregunta es: ¿puedo enrutar las señales PWM que van a los controladores de motor justo al lado del voltaje analógico de la medición de corriente? ¿O tendré una diafonía "significativa"?

En detalle:

  • espacio de la pista: 0,15 mm (probablemente podría aumentar un poco si es necesario, pero no mucho).

  • la pista analógica: el puente H tiene un pin "VpropI" con voltaje proporcional a la corriente (espero alrededor de 0.5 V). Agrego un filtro RC (R = 100 kΩ, C = 10nF): la salida del filtro RC va al pin ADC del STM32 (pista de unos 6 cm de largo). Si es necesario, puedo cambiar fácilmente por R = 10 kΩ, C = 100 nF.

  • las pistas son paralelas durante 5-6 cm.

  • el puente H admite hasta 100 kHz PWM (aún no he elegido la frecuencia PWM, estaba planeando probar diferentes frecuencias una vez que obtenga la PCB y le conecte los motores).

  • digamos que 20 mV de ruido están bien (creo que 50 mV seguirían estando bien con el filtrado de software).

Entonces, ¿tengo que profundizar en cómo calcular la diafonía/reducirla, o puedo seguir así?

¿Existe alguna regla general simple para saber cuándo puedo simplemente ignorar la diafonía y cuándo necesita más investigación?

EDITAR: como lo sugirió, hice una simulación LTspice:

La señal azul es el "punto medio" entre los 2 condensadores (que en el PCB real está conectado a ADC). La señal verde es una señal PWM de 3,3 V, con un período de 40 ns y tiempos de subida/bajada de 1 ns o 0,1 ns (Nota: tracé 0,5 V+V_PWM/1000 (señal verde) para obtener una escala similar a la el ruido).

Con 1 ns de tiempo de subida/bajada:

Con 1 ns de tiempo de subida/bajada

Con un tiempo de subida/bajada de 0,1 ns:ingrese la descripción de la imagen aquí

@Neil_UK: ¿es esta la modelización a la que te refieres?

Si esta es la forma correcta de modelarlo, entonces con efectos capacitivos e inductivos, obtengo como máximo 5 mV de ruido con un tiempo de subida/bajada de 0,1 ns. Entonces, siempre que el tiempo de subida/bajada sea >0.1 ns, debería estar bien (diafonía <5 mV). ¿Correcto?

EDIT 2: nuevo circuito basado en el último comentario Neil_UK (L1 en serie con L1): Entonces con L1 en serie con C1 (nb: sé dividir el PWM solo por 100 para trazar). Con tiempo de subida/bajada de 100 nsingrese la descripción de la imagen aquí

Debo admitir que no entiendo por qué L1 debería estar en serie con C1 y no con C2, pero si es así, los resultados son mucho peores: con 1ns de aumento, obtengo varios voltios de ruido; con un tiempo de subida de 100 ns, sigo teniendo unos 45 mV de ruido

Depende ¿Puede colocar una ruta de tierra o un vertido de cobre entre ellos, o mejor aún, en lados opuestos de un plano de tierra?
Todo depende de para qué necesites la señal analógica, ¿qué vas a hacer con la medida de corriente?. Si ha agregado at = 1 ms => filtro de paso bajo de 160 Hz a la entrada del ADC de todos modos, esta es una línea de medición de muy baja velocidad. La diafonía PWM de 100 kHz tendrá una reducción de 55 dB solo debido al filtro de primer orden.
@winny: si es necesario, sí, puedo hacer ambas cosas. Sin embargo, la PCB ya está muy llena, por lo que si lo hago, será a costa de algunas otras características "opcionales" que podrían ayudar con la depuración/creación de prototipos (si me queda algo de espacio, estaba planeando agregar LED de depuración , pines de depuración, pines para GPIO no utilizados por si decido usarlos más adelante, cut-traces+jumper por si quiero experimentar con un motor independiente del STM32, ...). Así que si dices que sin "protección" haré mucho ruido, lo haré. Pero si no es necesario, prefiero no hacerlo.
@Neil_UK: el objetivo es monitorear la corriente del motor (es decir, el par) y, para algunos motores, implementar un control de corriente (aproximado) (es decir, el par). El problema es que el filtro RC se coloca al lado del puente H, por lo que las pistas paralelas de 6 cm están entre el filtro y el ADC: por lo tanto, no estoy seguro de si todavía me beneficio del filtro. Cerca del STM32, está demasiado lleno para agregar los filtros, por lo que sería más fácil ejecutar las señales analógicas en el lado de los componentes (el resto está en el lado inferior) que agregar los filtros al lado del STM32
@Sandro Si ese filtro está clavando su pista a tierra con 10n o 100n, no importa en qué extremo, entonces ya es bastante difícil contra la diafonía acoplada capacitiva. Calcule el acoplamiento capacitivo entre las pistas del agresor y la víctima, supongo que está en el rango de 10-100 pF. Esa es una proporción increíble de 10n o 100n. A medida que el PWM oscila a través de un voltaje, inyecta una carga en la víctima. Una oscilación PWM de 5 V daría un paso de 5 mV si las relaciones de tapa son 1000:1. La tasa de borde de la señal PWM es importante para los efectos inductivos, es posible que pueda reducirlos si es necesario, o puede que no sea necesario.
Gracias @Neil_UK. Usando esta calculadora ( emisoftware.com/calculator/coplanar-capacitance ) obtengo una capacitancia de 3,7 pF entre las 2 pistas, por lo que con el condensador de 10 nF, hace una relación de 3,7/10000, por lo que para 3,3 V PWM, obtengo alrededor de 1,2 mV de ruido. Muy dentro de las especificaciones. Intentaré encontrar información sobre el acoplamiento inductivo.
@Sandro No es un acoplamiento inductivo, es el efecto de la inductancia en serie de la línea al capacitor a 6 cm de distancia, lo que permite que pasen los picos de los bordes. Entonces, tomando una regla general de 1 nH/mm, eso es 60 nH en serie con su condensador de filtro. La forma más fácil de ver lo que va a hacer sería colocarlo en un simulador SPICE y probar diferentes tasas de borde en su PWM en el filtro de 3.7 pF + 60 nH. Aunque 3,7 pF es tan pequeño, creo que no tendrá ningún problema con las velocidades prácticas de cambio de borde lógico de baja velocidad.
@Neil_UK: Hice una simulación de especias (la agregué a la pregunta): ¿coincide con lo que te referías?
@Sandro No, tienes el 60 nH en el lugar equivocado. Debe estar en serie con C1, su impedancia empeora el efecto de supresión de C1.
@Neil_UK: ¿podría explicar por qué está en serie con C1 (no me parece intuitivo)? Pero si es así, probablemente tendré que hacer algo para evitar la diafonía.
@Sandro Gran parte del acoplamiento C2 está en el extremo ADC de la línea, mientras que la derivación C1 está en el otro extremo de la línea, a 6 cm o 60 nH de distancia. El borde puntiagudo entra directamente en el ADC. Esto se resuelve fácilmente colocando C1 en el extremo de la línea ADC, ahora la tapa de derivación está en el lugar correcto. Todavía puede dejar R1 en el otro extremo si tiene poco espacio en el extremo ADC. Incluso podría usar un límite más pequeño, aunque puede obtener 1n, 10n y 100n en 0402 para que el tamaño físico no limite la elección del valor.
Gracias @Neil_UK. Ahora entiendo (idealmente, dividiría C2 y L en muchas partes, para simular el aspecto "distribuido". Solo para mover el capacitor, podría ayudar. Si cambio a 100nF (y 10k), incluso puedo reutilizar el 0201 capacitores que ya uso para desacoplar los pines de potencia del STM32

Respuestas (1)

La corriente del motor tendrá un fuerte componente de ondulación en la frecuencia PWM.

Si maneja el chip con PWM más señal de dirección, y el motor recibe VCC o 0V, con polaridad determinada por la dirección... entonces VPROPI solo emitirá un voltaje válido cuando la corriente realmente pase por la resistencia de detección, lo que significa que cuando el PWM está en el estado ON. Por lo tanto, el voltaje instantáneo en VPROPI será proporcional al producto de la corriente real y la resistencia de detección cuando el PWM esté encendido, pero será cero cuando esté apagado. Su filtro promediará eso a un voltaje que es proporcional al producto de la corriente del motor, la resistencia y el ciclo de trabajo. Esto significa que, con un ciclo de trabajo bajo, probablemente no medirá nada útil.

Si maneja el chip con dos PWM independientes y el motor recibe +VCC o -VCC, lo que pone el neutro en un ciclo de trabajo del 50 %, entonces la corriente siempre fluirá en la resistencia de sentido y VPROPI ya no será proporcional al ciclo de trabajo. .

Dado que lo primero es preferible, personalmente eliminaría el filtro por completo y sincronizaría el ADC con el periférico PWM (está en algún lugar del manual de STM32, no recuerdo dónde) para que el ADC muestre un pequeño retraso después de que se enciende el PWM. Para obtener este retraso, sume el tiempo de conmutación del puente H, el tiempo de establecimiento del amplificador de detección actual, etc.

El tiempo de muestreo establece un ciclo de trabajo mínimo, pero eso no debería importar para los motores, ya que un ciclo de trabajo muy bajo significa que de todos modos no girarán. También establece una frecuencia de conmutación máxima, que tampoco debería importar, porque los motores no necesitan funcionar a 100 kHz, sino a unos pocos kHz.

Si se hace correctamente, esto dará como resultado menos ruido que la opción de filtro, porque cuando el muestreo se sincroniza con PWM, siempre se muestrea en el mismo punto en la forma de onda de diente de sierra actual, lo que significa que ignora la ondulación. Y dado que muestrea después de que se realiza la conmutación, también ignorará el ruido de conmutación. La solución ideal es muestrear todos los canales del motor mientras ninguno de ellos está cambiando. Es hora de darle un buen uso a ese ADC rápido.

También elimina el retraso del filtro, por lo que si desea implementar un bucle de retroalimentación, menos retraso de fase siempre es una ventaja.

La hoja de datos no menciona el tiempo de establecimiento o el ancho de banda para el amplificador de sentido actual, lo cual es sospechoso. Le recomiendo encarecidamente que lo mida, porque si no tiene suficiente ancho de banda o la sedimentación es demasiado lenta, el muestreo sincronizado no funcionará. Si el amplificador de detección actual limita la velocidad de respuesta, es posible que incluso el promedio con el filtro no funcione en absoluto.

Muchas gracias. Necesitaré algo de detección para comprenderlo todo, pero parece una idea interesante hacer un muestreo sincronizado. Para el puente H, tengo que usar un solo PWM por motor, porque tengo 16 motores y no tengo suficientes salidas PWM para dar 2 por motor (excepto si hago PWM suave).
Para la sincronización, tendré que verificar si puedo sincronizar tantos temporizadores (tengo los PWM conectados a 6 temporizadores diferentes, pero solo tengo 3 ADC). De lo contrario, podría agrupar los 8 motores que necesitan control de torque en 2 temporizadores (sincronizados con 2 ADC) y mantener mi filtro para los otros 8, para los cuales todo lo que me importa es detectar el estancamiento.
¿Has construido un prototipo?
¿Si porque? Para saber, el prototipo se basa en 8 atmega328P, pero lleva bastante tiempo actualizar el código en los 8, y tengo problemas con I2C (los cables largos captan ruido y la biblioteca arduino I2C cuelga si el protocolo es no perfectamente respetado). Es posible quitar un atmega328P para conectar una placa de evaluación STM32 (tengo una con STM32F722ZE, que es casi idéntica a la STM32F7223ZE que voy a usar).
Porque si usa la sincronización ADC con PWM, creo que sería mejor probar el código antes de construir la placa... nunca se sabe, en caso de que haya leído mal algo en la hoja de datos y el temporizador que quería usar no puede ser Sirve para eso, o algo así.
Sí, si voy por ese camino, definitivamente es peor probar primero la sincronización (programarla en todos los puentes H, incluso si se conecta solo uno a la vez. En el prototipo, tengo DRV8870 en lugar del 8801, así que no tengo el pin VPROPI, pero he usado una resistencia de sentido 2.5 más grande, por lo que puedo trabajar directamente con eso
¡Está bien! ¡Espero que funcione muy bien!