¿Comparador STM32F0x1 (COMP) y ADC en el mismo pin simultáneamente?

Estoy armando un proyecto que aprovecha el periférico comparador en el microcontrolador STM32F051. He leído en la documentación que para que el comparador funcione, el pin de entrada debe configurarse para analógico ... que es la misma configuración si estuviera usando el pin como entrada ADC.

¿Puedo usar un solo pin, digamos PA1, como entrada y configurarlo como entrada de comparador de ventana y como entrada de ADC en ADC_IN1?

¿Hay algún problema con esta configuración, como ruido adicional, que deba considerar?

Hoja de datos (pág. 19)

Manual de referencia (pág. 295)

Una referencia interesante, que sugiere que esto debería ser posible: ingrese la descripción de la imagen aquíTomado de AN4232: Primeros pasos con comparadores analógicos para la serie STM32F3

¿Podría vincular a la documentación relevante? La hoja de datos que encontré no menciona los comparadores, pero esta es una pregunta interesante
Seguramente lo que quise decir fue STM32F0*5*1...
Desde mi experiencia, debería ser factible, pero no puedo asegurarlo y dudo que encuentre esta información en fuentes oficiales. En mi opinión, lo mejor que puede hacer es experimentar: obtenga una placa nucleo STM32F07x que sea bastante barata (~ 10 USD) y pruébela. O consigue una placa de descubrimiento F051, no son mucho más caras. ST usa los mismos núcleos de IP periféricos en diferentes MCU, por lo que puede esperar que se comporte de manera similar entre F07x y F051.
@JanDorniak Sí, esa sería la mejor manera. Desafortunadamente, me llevará mucho tiempo (varios días de trastear) darme cuenta de esto con certeza y necesito dedicar ese tiempo a preparar una placa de circuito impreso para la producción de prototipos. Si nadie regresa con nada, eventualmente lo haré.
@Daniel Un problema que puedo decirle con seguridad es que algunos periféricos están conectados a través de pines: tuve problemas al conectar un DAC como entrada COMP porque estaban conectados a través de un pin que intenté usar como salida digital. No funcionó, afortunadamente tenía algunos pines libres en la MCU. Si quieres investigarlo, era PA4 en L053
@JanDorniak Me preguntaba exactamente eso y sospechaba que este era el caso. ¡Gracias por confirmar eso! (Qué extraño, ¿verdad?)
@JanDorniak Es una lástima que no escriban notas de aplicación como solía hacerlo Microchip en el pasado: "Consejos y trucos para usar X"...
@Daniel, de nada :) Además, dependiendo de su ubicación, Farnell tiene una excelente entrega al día siguiente en toda Europa, aunque su costo de envío es bastante alto.

Respuestas (3)

Esto funciona, obtendrá números de vuelta, así como interrupciones. Lo he comprobado, descargar desde .

La precisión y la falla aún no se han determinado. Pero está bien descrito en las Notas de aplicación como lo indica @Bence Kaulics en este hilo (ver resultados.txt para obtener Notas de aplicación adicionales)

Creo que será estable por las siguientes razones.

a) The circuit diagram in RM0091 shows a direct connection from comparator to pin. i.e. it is indicated that the comparator cannot be disconnected with a switch or MUX, and will thus work as soon as the pin is assigned 'analog in'.

b) The comparator is NOT dependent on a 'Clock' to enable it (it is alow power device).

c) ST would not be able to make this level of change without assigning a new part number.


The good news is that one can continue to use the comparator for high-speed events such as over current and emergency stop etc whilst still using the ADC analog window events for other software control.

Esto también funciona con el DAC, es decir, puede configurar todo internamente con el DAC o externamente con el DAC y algunas resistencias.

Con solo mirar el circuito, usará el ADC en paralelo al comparador, esencialmente un amplificador. Como sabemos, estos son dispositivos de gran ganancia de muy alta impedancia. Los fallos no son nuestros amigos.

Ahora vamos a golpear una tapa descargada en ese pin de vez en cuando para alimentar el ADC.

Como todos sabemos, necesitamos sobremuestrear el ADC y, preferiblemente, rechazar la primera lectura después de un evento de cambio mux para eliminar la desviación desde y hacia los canales adyacentes.

El ADC en el STM tiene una impedancia de entrada algo < 50K // 5pF dependiendo de cómo se usen. (DM00039193.pdf pág. 76ff)

La tabla 53 da 400->50KOhm, que es lo que descubrí hace algún tiempo cuando calibré mi F373 ADC.

La página 79 muestra el circuito ADC.

La página 82 ofrece una breve descripción del pin del comparador, leída junto con la descripción general de los pines analógicos anterior (pg73ff)

Póngalo en paralelo con la entrada de su comparador y ADC MUX y modele en especias. Recuerde cargar la tapa del ADC a un voltaje aleatorio con regularidad.

Pase lo que pase en el circuito y el software, obtendrá fallas bastante razonables en la entrada de su comparador. MALA IDEA, incluso si conecta el pin a un seguidor de baja impedancia y una tapa de desacoplamiento (¿en la línea móvil de una entrada de comparador????).

La gorra utilizada por el ADC es el asesino. Es de esperar que los dispositivos futuros muestreen utilizando seguidores/aisladores internos tanto en el ADC como en el comparador. Es posible que ya estén allí como características no documentadas (poco probable debido a la diafonía mux).

Al igual que yo, creo que nos involucramos tanto con el lado digital de las cosas que cuando pasamos a lo analógico y lo híbrido nos olvidamos de los conceptos básicos.

¿Cómo medir pequeñas corrientes usando un convertidor de corriente a voltaje? es una discusión que tuve con otra persona ayer. Sabía la respuesta porque yo mismo me enfadé con ella. Incluso en los mejores 3V a 50K obtenemos un AVO de 16K/volt. ¿Cuándo fue la última vez que usé un AVO / multímetro de este tipo?

Dicho todo esto, una mirada a los circuitos del F373 muestra que ST y ARM parecen haber tenido la intención de poder obtener resultados viables del comparador y el adc que se usan simultáneamente en un dispositivo mixto. La adición de amplificadores operacionales en las series 150 y 300 da una pista sobre los requisitos de aislamiento de impedancia.

Estoy seguro de que alguien más inteligente que yo podrá rediseñar el entorno para el que se diseñaron estas interconexiones internas. Yo pensaría en automoción o HVAC... inversores y FOC. La biblioteca FOC puede proporcionar información valiosa.

A menos que esté construyendo un instrumento de alta velocidad y alta precisión, dicho uso puede ser lo suficientemente estable para ser utilizado en la práctica (dentro de las advertencias anteriores). Ciertamente ahorrará una gran cantidad de circuitos externos. Probablemente sea mejor dejar las pruebas rigurosas a altas velocidades como un ejercicio para el estudiante (Tientame a estudiar).

Solución aquí .

Parece que la biblioteca HAL ADC está un poco rota para DMA multicanal. He publicado en el sitio web de STM para obtener una respuesta. Soluciones alternativas: -

a) IRQ ambos ADC

b) Sondear ambos ADC

c) DMA un canal y sondear el otro

d) Inicializar manualmente los registros de bajo nivel

Esta es otra advertencia para la solución donde se usan ambos comparadores, hasta que se encuentre una solución mejor.

En un STM32F4Discovery ADC2 y ADC3 funciona bien con HAL. Estoy usando DMA2 Stream1 con ADC3 y DMA2 Stream2 con ADC2, hay dos canales configurados en ambos ADC. El modo DMA es circular. También con HAL en un STM32F3 estoy usando cuatro ADC diferentes junto con DMA, 3 canales en DMA2 y 1 en DMA1. ¿Qué está mal cuando intentas usar DMA multicanal?
@Bence: he trabajado con F1, F3 y F4 en la configuración ADC-DMA multicanal; usan un mecanismo diferente para agregar canales al DMA. Los canales se pueden escanear en cualquier secuencia. La serie STM32L0 tiene una estructura interna diferente, los canales se priorizan automáticamente por número de canal. Existen diferentes estructuras y convocatorias para configurarlo. Cada canal solo puede aparecer una vez en un escaneo.
Ya veo, ¿y este orden de prioridad está arreglado?
Gracias por su respuesta y por esforzarse para confirmar directamente que esto funciona, así como para encontrar investigaciones de apoyo. ¡Muy apreciado!
@Daniel: placer, espero que ayude, hay (desafortunadamente) algunas advertencias. Parece que ST (o ARM) no pensaron en usarlo de esta manera cuando lo documentaron. Pensando en ello, la composición es un dispositivo 'siempre encendido' - 1 puerta - con muxes de entrada y salida conmutables. Es un buen periférico, a pesar de las limitaciones. Gracias por la pregunta (y la generosidad).
@Bence: sí, la prioridad y el orden son fijos: vaya por número de canal. Una gran cosa es que puede sobremuestrear y promediar en el escaneo. ver RM vinculado arriba, vale la pena leerlo. Como muchos, estoy un poco triste porque las bibliotecas HAL no son (y no pueden ser) transparentes en todos los dispositivos ARM.
Sí, en mi experiencia limitada, los HAL son muy buenos para permitirle mantenerse por encima de la refriega en algunas situaciones muy comunes. Algo más y está de vuelta en la parte mía otra vez...

La configuración más relevante que pude encontrar es la siguiente, de Uso de comparadores analógicos STM32F05xx en casos de aplicación , ( AN4112 ), página 4:

ingrese la descripción de la imagen aquí

Dice:

La Figura 1 muestra cómo conectar una salida de sensor (sensor de temperatura, sensor de presión, detector infrarrojo piroeléctrico, sensor de fotodiodo) a un dispositivo STM32F05xx en una aplicación de monitoreo de voltaje analógico usando el comparador 2 (COMP2). COMP2 monitorea el voltaje analógico en modo Stop mientras que el ADC lo mide en modo Run.

Aquí el ADC y el COMP funcionan alternativamente pero creo que ambos se configuran al mismo tiempo. Si continuamos en el documento hay un diagrama de bloques sobre la configuración de COMP.

ingrese la descripción de la imagen aquí

Según esta imagen, creo que el ADC y el COMP comparten el mismo canal ADC, la única diferencia es la cantidad de fuentes de umbral analógico habilitadas .

El texto debajo de la Figura 5 en la pregunta establece que el

la entrada del comparador es un canal ADC

posiblemente lo mismo que ADC_IN1.

El propósito de toda esta configuración es ahorrar energía, el COMP activa los cambios de estado de la MCU (STOP <--> RUN). Entonces, cuando la entrada está por debajo de cierto umbral, la MCU y el ADC se apagan y solo funciona el comparador, y cuando la entrada está por encima del umbral, la MCU y el ADC se activan, el ADC mide el voltaje de entrada. Pero si la entrada vuelve a caer por debajo del umbral, COMP envía la MCU al estado STOP.

ingrese la descripción de la imagen aquí

Es una forma de usarlos juntos, espero que esto haga avanzar la pregunta.

Gracias por su respuesta. Aportó bastante a la discusión. Al final, decidí otorgar la recompensa a alguien que pudiera confirmar la respuesta directamente, ¡pero esto tiene mi voto a favor y es muy apreciado!
Fue una pregunta muy interesante, me alegró participar. Además, estoy de acuerdo con que Chris haya recibido la recompensa :) . Hizo mucho trabajo, sin escatimar tiempo y esfuerzo.

Creo que deberías preguntar en el foro STM. También hay (STM32F1) UART RX y TIMx en el mismo pin, ambas entradas, pero no puede usarlas juntas, como detectar el final de la interrupción del temporizador de transmisión. En su lugar, se debe conectar un pin TIMx diferente en paralelo para que la función UART RX y el temporizador se interrumpan. Supongo que solo una función puede estar activa al mismo tiempo.
Intente descargar MxCube y vea qué configuración se puede construir.

Ese es un punto decente. Yo lo tengo, debería ver si lo permite. Pero incluso si no es así, eso no significa necesariamente que no puedas :/
Es decir, desearía que la documentación fuera mejor y más completa, y podría tener confianza en cualquier otra respuesta que no sea "Lo intenté una vez y no funcionó".
@Daniel Tienes razón, creo que la respuesta final te dará el MCU cuando lo intentes.