Comparateur STM32F0x1 (COMP) et ADC sur la même broche simultanément?

8

Je suis en train de monter un projet qui profite du périphérique comparateur sur le microcontrôleur STM32F051. J'ai lu dans la documentation que pour que le comparateur fonctionne, la broche d'entrée doit être configurée pour analogique ... ce qui est la même configuration si vous utilisiez la broche comme entrée ADC.

Puis-je utiliser une seule broche, par exemple PA1, comme entrée et la configurer à la fois comme entrée de comparateur de fenêtre et comme entrée ADC sur ADC_IN1?

Y a-t-il des problèmes avec cette configuration, tels que du bruit supplémentaire, que je devrais considérer?

Fiche technique (p 19)

Manuel de référence (p 295)

Une référence intéressante, suggérant que cela devrait être possible: entrez la description de l'image ici Tiré de AN4232: Premiers pas avec les comparateurs analogiques pour la série STM32F3

Daniel
la source
1
Pourriez-vous créer un lien vers la documentation pertinente? La fiche technique que j'ai trouvée ne mentionne pas de comparateurs mais c'est une question intéressante
David
Ce que je voulais dire, c'était sûrement STM32F0 * 5 * 1 ...
Daniel
D'après mon expérience, cela devrait être faisable, mais je ne peux pas le dire avec certitude et je doute que vous trouverez cette information dans des sources officielles. La meilleure chose que vous pouvez faire à l'OMI est d'expérimenter - obtenez une carte nucléo STM32F07x qui est assez bon marché (~ 10 USD) et testez-la. Ou achetez une carte de découverte F051, elles ne sont pas beaucoup plus chères. ST utilise les mêmes cœurs IP périphériques dans différents MCU, vous pouvez donc vous attendre à ce qu'il se comporte de manière similaire entre F07x et F051.
Jan Dorniak
@JanDorniak Oui, ce serait la meilleure façon. Malheureusement, cela me prendra beaucoup de temps (plusieurs jours de déconner) pour le comprendre à coup sûr et je dois passer ce temps à préparer un PCB pour la production de prototypes. Si personne ne revient avec quelque chose, je finirai par le faire.
Daniel
1
@Daniel Un problème que je peux vous dire avec certitude est que certains périphériques sont connectés via des broches - J'ai eu des problèmes lors de la connexion d'une sortie DAC en tant qu'entrée COMP parce qu'ils étaient connectés via une broche que j'ai essayé d'utiliser comme sortie numérique. Cela n'a pas fonctionné, heureusement, j'avais quelques broches gratuites sur le MCU. Si vous voulez vous renseigner, c'était PA4 sur L053
Jan Dorniak

Réponses:

4

Cela fonctionne, vous récupérerez les numéros, ainsi que les interruptions. Je l'ai vérifié, téléchargez à partir de .

La précision et le glitchiness sont encore indéterminés. Mais est bien décrit dans les Appnotes comme indiqué par @Bence Kaulics dans ce fil (voir results.txt pour des AppNotes supplémentaires)

Je pense qu'il sera stable pour les raisons suivantes.

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.

Cela fonctionne également avec le DAC, c'est-à-dire que vous pouvez configurer le tout en interne avec le DAC ou en externe avec le DAC et quelques résistances.

En regardant simplement le circuit, vous utiliserez l'ADC en parallèle au comparateur, essentiellement un amplificateur. Comme nous le savons, ce sont des appareils à grand gain à très haute impédance. Les pépins ne sont pas notre ami.

Maintenant, nous allons frapper un bouchon déchargé sur cette broche de temps en temps pour alimenter l'ADC.

Comme nous le savons tous, nous devons suréchantillonner l'ADC et rejeter de préférence la première lecture après un événement de commutateur de multiplexage pour éliminer l'inclinaison depuis et vers les canaux adjacents.

L'ADC sur le STM a une impédance d'entrée quelque peu <50K // 5pF selon la façon dont ils sont utilisés. (DM00039193.pdf pg 76ff)

Le tableau 53 donne 400-> 50KOhm, ce que j'ai trouvé il y a quelque temps lorsque j'ai étalonné mon ADC F373.

La page 79 montre les circuits ADC.

La page 82 donne une brève description de la broche de comparaison, lue de concert avec la description générale des broches analogiques ci-dessus (pg73ff)

Mettez cela en parallèle avec votre entrée de comparateur et ADC MUX et modélisez-la en piquant. N'oubliez pas de charger régulièrement le bouchon ADC à une tension aléatoire.

Quoi qu'il arrive d'autre dans le circuit et le logiciel, vous obtiendrez des problèmes assez raisonnables sur votre entrée de comparateur. MAUVAISE IDÉE, même si vous connectez la broche à un suiveur à faible impédance et à un capuchon de découplage (sur la ligne mobile d'une entrée de comparateur ????).

La casquette utilisée par l'ADC est le tueur. Espérons que les futurs appareils échantillonneront à l'aide d'un suiveur / isolateur interne à la fois sur l'ADC et le comparateur. Celles-ci peuvent déjà être là en tant que fonctionnalités non documentées (peu probable en raison de la diaphonie mux).

Comme moi, je pense que nous nous impliquons tellement avec le côté numérique des choses que lorsque nous passons à l'analogique et à l'hybride, nous oublions les bases.

Comment mesurer de petits courants en utilisant un convertisseur courant-tension? est une discussion que j'ai eue avec quelqu'un d'autre hier. Je connaissais la réponse car je m'en suis moi-même trompé. Même au meilleur 3V en 50K, nous obtenons une AVO de 16K / volt. Quand ai-je utilisé pour la dernière fois un tel AVO / multimètre?

Tout cela étant dit, un coup d'œil aux circuits du F373 montre que ST et ARM semblent avoir l'intention d'obtenir des résultats exploitables à la fois du comparateur et de l'adc étant utilisés simultanément dans un appareil mixte. L'ajout d'amplificateurs opérationnels dans les séries 150 et 300 donne un indice quant aux exigences d'isolation d'impédance.

Je suis sûr que quelqu'un de plus intelligent que moi pourra réorganiser l'environnement pour lequel ces interconnexions internes ont été conçues. Je pense que l'automobile ou le HVAC ... les onduleurs et les FOC. La bibliothèque FOC peut fournir des informations précieuses.

Sauf si vous construisez un instrument à haute vitesse et très précis, une telle utilisation peut être suffisamment stable pour être utilisée pratiquement (dans les mises en garde ci-dessus). Cela permettra certainement d'économiser beaucoup de circuits externes. Il est préférable de laisser des tests rigoureux à grande vitesse comme exercice pour l'étudiant (tentez-moi d'étudier).

Solution ici .

On dirait que la bibliothèque HAL ADC est un peu cassée pour le DMA multicanal. J'ai posté sur le site de la STM pour obtenir une réponse. Solutions de contournement: -

a) IRQ les deux ADC

b) Interroger les deux ADC

c) DMA un canal et interroger l'autre

d) Initialiser les registres de bas niveau manuellement

Ceci est encore une autre mise en garde à la solution où les deux comparateurs sont utilisés, jusqu'à ce qu'une meilleure solution soit trouvée.

ChrisR
la source
Sur un STM32F4Discovery, ADC2 et ADC3 fonctionnent parfaitement avec HAL. J'utilise DMA2 Stream1 avec ADC3 et DMA2 Stream2 avec ADC2, il y a deux canaux configurés sur les deux ADC. Le mode DMA est circulaire. Aussi avec HAL sur un STM32F3, j'utilise quatre ADC différents avec DMA, 3 canaux sur DMA2 et 1 DMA1. Quel est le problème lorsque vous essayez également d'utiliser le DMA multicanal?
Bence Kaulics
@Bence - J'ai travaillé avec F1, F3 et F4 dans une configuration ADC-DMA multicanal - ils utilisent un mécanisme différent pour ajouter des canaux au DMA. Les canaux peuvent être balayés dans n'importe quelle séquence. La série STM32L0 a une structure interne différente, les canaux sont automatiquement classés par numéro de canal. Il existe différentes structures et appels à sa mise en place. Chaque canal ne peut apparaître qu'une seule fois dans un balayage.
ChrisR
Je vois, et cet ordre de priorité est fixe?
Bence Kaulics
Merci de votre réponse et de votre effort pour confirmer directement que cela fonctionne, ainsi que pour trouver des recherches à l'appui. Très appréciée!
Daniel
1
@Bence - Oui, la priorité et l'ordre sont fixes - allez par numéro de canal. Une grande chose est que vous pouvez suréchantillonner et faire la moyenne dans l'analyse. voir RM lié ci-dessus, ça vaut le coup d'être lu. Comme beaucoup, je suis un peu triste que les bibliothèques HAL ne soient pas (et ne puissent pas être) transparentes sur tous les appareils ARM.
ChrisR
4

La configuration la plus pertinente que j'ai pu trouver est la suivante, tirée de Utilisation des comparateurs analogiques STM32F05xx dans les cas d'application , ( AN4112 ), page 4:

entrez la description de l'image ici

Ça dit:

La figure 1 montre comment connecter une sortie de capteur (capteur de température, capteur de pression, détecteur infrarouge pyroélectrique, capteur à photodiode) à un appareil STM32F05xx dans une application de surveillance de tension analogique à l'aide du comparateur 2 (COMP2). COMP2 surveille la tension analogique en mode Stop tandis que l'ADC la mesure en mode Run.

Ici, l'ADC et le COMP fonctionnent alternativement, mais je pense que les deux sont configurés en même temps. Si nous continuons dans le document, il y a un schéma de principe sur la configuration COMP.

entrez la description de l'image ici

Sur la base de cette image, je pense que l'ADC et le COMP partagent le même canal ADC, la seule différence est le nombre de sources de seuil analogiques activées .

Le texte sous la figure 5 de la question indique que le

l'entrée du comparateur est un canal ADC

peut-être le même que ADC_IN1.

Le but de toute cette configuration est d'économiser de l'énergie, le COMP déclenche des changements d'état du MCU (STOP <--> RUN). Ainsi, lorsque l'entrée est inférieure à un certain seuil, le MCU et l'ADC sont fermés et seul le comparateur fonctionne, et lorsque l'entrée est supérieure au seuil, le MCU et l'ADC se réveillent, l'ADC mesure la tension d'entrée. Mais si l'entrée tombe à nouveau en dessous du seuil, le COMP envoie le MCU à l'état STOP.

entrez la description de l'image ici

C'est une façon de les utiliser ensemble, j'espère que cela fera avancer la question.

Bence Kaulics
la source
Merci pour votre réponse. Cela a beaucoup ajouté à la discussion. En fin de compte, j'ai décidé d'attribuer la prime à quelqu'un qui pourrait confirmer directement la réponse, mais cela a mon vote positif et est grandement apprécié!
Daniel
C'était une question très intéressante, j'étais heureuse de participer. De plus, je suis d'accord avec le fait que Chris a reçu la récompense :). Il a fait beaucoup de travail, sans perdre de temps et d'efforts.
Bence Kaulics
3

Je pense que vous devriez demander sur le forum STM. Il y a aussi (STM32F1) UART RX et TIMx sur la même broche, les deux entrées, mais vous ne pouvez pas les utiliser ensemble, comme la détection d'une interruption de temporisation de fin de transmission. Au lieu de cela, une broche TIMx différente doit être connectée en parallèle pour que la fonction UART RX et la temporisation soient interrompues. Je suppose qu'une seule fonction peut être active en même temps.
Essayez de télécharger MxCube et voyez quelle configuration peut être créée.

Marko Buršič
la source
C'est un bon point. Je l'ai, je devrais voir si ça le permet. Mais même si ce n'est pas le cas, cela ne signifie pas nécessairement que vous ne pouvez pas: /
Daniel
C'est-à-dire que je souhaite que la documentation soit meilleure et plus complète, et que je puisse avoir confiance en toute autre réponse que "Je l'ai essayé une fois et cela n'a pas fonctionné"
Daniel
@Daniel Vous avez raison, je pense que la réponse finale vous donnera le MCU lui-même lorsque vous essaierez.
Marko Buršič