Comparador STM32F0x1 (COMP) e ADC no mesmo pino simultaneamente?

8

Estou montando um projeto que tira proveito do comparador periférico no microcontrolador STM32F051. Li na documentação que, para o comparador funcionar, o pino de entrada precisa ser configurado para analógico ... que é a mesma configuração se você estivesse usando o pino como uma entrada ADC.

Posso usar um único pino, digamos PA1, como entrada e configurá-lo como uma entrada do comparador de janelas e como uma entrada ADC no ADC_IN1?

Há alguma dica nessa configuração, como ruído adicional que devo considerar?

Folha de dados (p 19)

Manual de referência (p 295)

Uma referência interessante, sugerindo que isso seja possível: insira a descrição da imagem aqui Retirado de AN4232: Introdução aos comparadores analógicos da série STM32F3

Daniel
fonte
1
Você poderia criar um link para a documentação relevante? A folha de dados que encontrei não menciona comparadores mas esta é uma questão interessante
David
Certamente o que eu quis dizer foi STM32F0 * 5 * 1 ...
Daniel
Pela minha experiência, isso deve ser possível, mas não posso afirmar com certeza e duvido que você encontre essas informações em fontes oficiais. A melhor coisa que você pode fazer na IMO é experimentar - obtenha uma placa nucleo STM32F07x que é bastante barata (~ 10 USD) e teste-a. Ou adquira uma placa de descoberta F051, elas não são muito mais caras. O ST usa os mesmos núcleos de periféricos IP em diferentes MCUs, para que você possa esperar um comportamento semelhante entre F07x e F051.
Jan Dorniak
@ JanDorniak Sim, essa seria a melhor maneira. Infelizmente, levarei muito tempo (vários dias brincando) para descobrir isso com certeza e eu preciso gastar esse tempo preparando um PCB para a produção de protótipos. Se ninguém voltar com nada, acabarei por fazer isso.
Daniel
1
@ Daniel Uma questão que posso garantir é que alguns periféricos estão conectados através de pinos - tive problemas ao conectar uma saída DAC como entrada COMP porque eles estavam conectados através de um pino que tentei usar como saída digital. Não deu certo, felizmente eu tinha alguns pinos grátis no MCU. Se você quiser dar uma olhada, foi o PA4 em L053
Jan Dorniak

Respostas:

4

Isso funciona, você receberá os números de volta e interromperá. Eu fiz check-out, faça o download em .

A precisão e glitchiness são indeterminadas, ainda. Mas está bem descrito nas Appnotes, conforme indicado por @Bence Kaulics neste tópico (consulte results.txt para AppNotes adicionais)

Eu acredito que será estável pelas seguintes razões.

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.

Isso também funciona com o DAC, ou seja, você pode configurar tudo internamente com o DAC ou externamente com o DAC e alguns resistores.

Apenas olhando para o circuito, você usará o ADC em paralelo ao comparador, essencialmente um amplificador. Como sabemos, estes são dispositivos de grande ganho e impedância muito alta. Falhas não são nosso amigo.

Agora, vamos bater uma tampa descarregada naquele pino de vez em quando para alimentar o ADC.

Como todos sabemos, precisamos exagerar a amostra do ADC e, de preferência, rejeitar a primeira leitura após um evento de troca de mux para eliminar a distorção dos canais adjacentes e para os próximos.

O ADC no STM tem impedância de entrada um pouco <50K // 5pF, dependendo de como eles são usados. (DM00039193.pdf pág. 76ff)

A Tabela 53 fornece 400-> 50KOhm, que foi o que descobri há algum tempo atrás quando calibrei meu F373 ADC.

A página 79 mostra o circuito ADC.

A página 82 fornece uma breve descrição do pino comparador, lido em conjunto com a descrição geral dos pinos analógicos acima (pg73ff)

Coloque isso em paralelo com a entrada do seu comparador e com o ADC MUX e modele-o em especiarias. Lembre-se de carregar a tampa do ADC regularmente a uma tensão aleatória.

O que quer que aconteça no circuito e no software, você terá falhas razoáveis ​​na entrada do comparador. IDADE RUIM, mesmo se você conectar o pino a um seguidor de baixa impedância e uma tampa de desacoplamento (na linha móvel de uma entrada do comparador ????).

A tampa usada pelo ADC é o assassino. Esperançosamente, os dispositivos futuros serão amostrados usando seguidores / isoladores internos no ADC e no comparador. Eles podem já estar presentes como recursos não documentados (improvável devido à interferência do mux).

Como eu, acho que nos envolvemos tanto com o lado digital das coisas que, quando passamos para o analógico e o híbrido, esquecemos o básico.

Como medir pequenas correntes usando o conversor de corrente para tensão? é uma discussão que tive com outra pessoa ontem. Eu sabia a resposta, porque eu mesma me importei. Mesmo nos melhores 3V a 50K, obtemos um AVO de 16K / volt. Quando foi a última vez que usei um AVO / multímetro?

Tudo isso dito, uma olhada nos circuitos do F373 mostra que ST e ARM parecem ter a intenção de obter resultados viáveis ​​com o comparador e o ADC sendo usados ​​simultaneamente em um dispositivo misto. A adição de opamps nas séries 150 e 300 fornece uma pista sobre os requisitos de isolamento de impedância.

Tenho certeza de que alguém mais inteligente do que eu será capaz de reprojetar o ambiente para o qual essas interconexões internas foram projetadas. Eu pensaria automotivo ou HVAC .... inversores e FOC. A biblioteca FOC pode fornecer informações valiosas.

A menos que você esteja construindo um instrumento de alta velocidade e alta precisão, esse uso poderá ser suficientemente estável para ser utilizado na prática (dentro das advertências acima). Certamente economizará muitos circuitos externos. Provavelmente, é melhor deixar um teste rigoroso em alta velocidade como um exercício para o aluno (tente-me a estudar).

Solução aqui .

Parece que a biblioteca HAL ADC está um pouco danificada para o DMA multicanal. Publiquei no site do STM para obter uma resposta. Soluções alternativas: -

a) IRQ ambos ADCs

b) Poll ambos ADC

c) DMA um canal e pesquisa no outro

d) Inicialize os registros de baixo nível manualmente

Esta é mais uma advertência para a solução em que os dois comparadores são usados, até que uma solução melhor seja encontrada.

ChrisR
fonte
Em um STM32F4Discovery, o ADC2 e o ADC3 simplesmente funcionam bem com o HAL. Estou usando o DMA2 Stream1 com ADC3 e o DMA2 Stream2 com ADC2, existem dois canais configurados nos dois ADCs. O modo DMA é circular. Também com HAL em um STM32F3, estou usando quatro ADCs diferentes, juntamente com o DMA, 3 canais no DMA2 e 1 um DMA1. O que há de errado quando você tenta usar o DMA multi-canal?
Bence Kaulics
@Bence - Eu trabalhei com F1, F3 e F4 na configuração multicanal do ADC-DMA - eles usam um mecanismo diferente para adicionar canais ao DMA. Os canais podem ser verificados em qualquer sequência. A série STM32L0 possui uma estrutura interna diferente, os canais são priorizados automaticamente pelo número do canal. Existem diferentes estruturas e chamadas para configurá-lo. Cada canal pode aparecer apenas uma vez em uma varredura.
ChrisR
Entendo, e essa ordem de prioridade foi corrigida?
Bence Kaulics
Agradecemos sua resposta e nos esforçamos para confirmar diretamente que isso funciona, além de encontrar pesquisas de apoio. Muito apreciado!
Daniel
1
@Bence - Sim, prioridade e ordem são fixadas - vá pelo número do canal. Uma grande coisa é que você pode exagerar e calcular a média na varredura. veja RM linkado acima, vale a pena ler. Como muitos, estou um pouco triste que as bibliotecas HAL não sejam (e não possam ser) transparentes em todos os dispositivos ARM.
ChrisR
4

A configuração mais relevante que encontrei é a seguinte, em Usando comparadores analógicos STM32F05xx em casos de aplicativos ( AN4112 ), página 4:

insira a descrição da imagem aqui

Diz:

A Figura 1 mostra como conectar uma saída do sensor (sensor de temperatura, sensor de pressão, detector piroelétrico de infravermelho, sensor de fotodiodo) a um dispositivo STM32F05xx em um aplicativo de monitoramento de tensão analógico usando o comparador 2 (COMP2). O COMP2 monitora a tensão analógica no modo Stop enquanto o ADC a mede no modo Run.

Aqui o ADC e o COMP funcionam alternadamente, mas acho que ambos estão configurados ao mesmo tempo. Se continuarmos no documento, há um diagrama de blocos sobre a configuração COMP.

insira a descrição da imagem aqui

Com base nessa imagem, acho que o ADC e o COMP compartilham o mesmo canal ADC, a única diferença é o número de fontes de limite analógico ativadas .

O texto da Figura 5 na pergunta afirma que o

entrada do comparador é um canal ADC

possivelmente o mesmo que ADC_IN1.

O objetivo de toda essa configuração é economizar energia, o COMP aciona alterações de estado do MCU (STOP <--> RUN). Portanto, quando a entrada está abaixo de um certo limite, o MCU e o ADC são desligados e apenas o comparador funciona. Quando a entrada está acima do limite, o MCU e o ADC acordam e o ADC mede a tensão de entrada. Mas se a entrada cair abaixo do limite novamente, o COMP envia o MCU ao estado STOP.

insira a descrição da imagem aqui

É uma maneira de usá-los juntos, espero que isso leve a questão adiante.

Bence Kaulics
fonte
Obrigado pela sua resposta. Isso acrescentou bastante à discussão. No final, decidi conceder a recompensa a alguém que pudesse confirmar a resposta diretamente, mas isso tem meu voto positivo e é muito apreciado!
Daniel
Foi uma pergunta muito interessante, fiquei feliz em participar. Além disso, concordo com o fato de Chris ter recebido a recompensa :). Ele trabalhou muito, não poupando tempo e esforço.
Bence Kaulics
3

Eu acho que você deveria perguntar no fórum STM. Há também (STM32F1) UART RX e TIMx no mesmo pino, ambas as entradas, mas você não pode usá-las juntas, como detectar a interrupção do temporizador da transmissão. Em vez disso, um pino TIMx diferente deve ser conectado em paralelo para que o recurso UART RX e o temporizador sejam interrompidos. Eu acho que apenas uma função pode estar ativa ao mesmo tempo.
Tente baixar o MxCube e veja qual configuração pode ser criada.

Marko Buršič
fonte
Esse é um ponto decente. Eu tenho, eu deveria ver se isso permite. Mas, mesmo que isso não aconteça, isso não significa necessariamente que você não pode: /
Daniel
Ou seja, eu gostaria que a documentação era melhor e mais abrangente, e eu podia ter confiança em qualquer outra resposta do que "eu tentei uma vez e não funcionou"
Daniel
@ Daniel Você está correto, acho que a resposta final lhe dará o próprio MCU quando você tentar.
Marko Buršič