Trabalhar com sensores de corrente de efeito Hall: ACS758

Olá pessoal!

Talvez valha a pena se apresentar um pouco - sou um engenheiro de circuitos regular que também está interessado em programação e em outras áreas da eletrônica: DSP, FPGA, comunicações por rádio e outras. Recentemente, mergulhei de cabeça nos receptores SDR. No começo, eu queria dedicar meu primeiro artigo (espero que não seja o último) a um tópico mais sério, mas para muitos ele se tornará apenas uma questão de leitura e não trará nenhum benefício. Portanto, o tema foi escolhido altamente especializado e aplicado exclusivamente. Também quero observar que, provavelmente, todos os artigos e perguntas neles serão considerados mais do lado do projetista de circuitos, e não do programador ou de qualquer outra pessoa. Bem - vamos lá!

Há pouco tempo, encomendei o design do "Sistema de Monitoramento da Fonte de Alimentação de um Edifício Residencial", o cliente está envolvido na construção de residências suburbanas, para que alguns de vocês já tenham visto meu dispositivo. Este dispositivo mediu as correntes de consumo em cada fase e tensão de entrada, enviando simultaneamente dados pelo canal de rádio para o sistema Smart Home já instalado + ele foi capaz de interromper o acionador de partida na entrada da casa. Mas a conversa hoje não será sobre ele, mas sobre seu componente pequeno, mas muito importante - o sensor atual. E como você já entendeu a partir do título do artigo, serão sensores de corrente "sem contato" da Allegro - ACS758-100 .
________________________________________________________________________________________________________________________

A folha de dados, sobre a qual falarei sobre o sensor, pode ser encontrada aqui . Como você pode imaginar, o número "100" no final da marcação é a corrente máxima que o sensor pode medir. Francamente - eu tenho dúvidas sobre isso, parece-me que as conclusões simplesmente não podem suportar 200A por um longo tempo, embora seja bastante adequado para medir a corrente de irrupção. No meu dispositivo, um sensor de 100A sem problemas passa pelo menos 35A por si mesmo constantemente + há picos de consumo de até 60A.

imagem
Figura 1 - Aparência do sensor ACS758-100 (50/200)

Antes de passar para a parte principal do artigo, sugiro que você se familiarize com duas fontes. Se você tiver conhecimentos básicos de eletrônica, eles serão redundantes e ficarão à vontade para pular este parágrafo. Aconselho o restante a procurar desenvolvimento geral e compreensão:

1) O efeito Hall. Fenômeno e princípio de operação
2) Sensores modernos de corrente
________________________________________________________________________________________________________________________

Bem, vamos começar com a marcação mais importante, a saber. Eu compro componentes em 90% dos casos em www.digikey.com. Os componentes chegam na Rússia em 5 a 6 dias, provavelmente há tudo no site e também pesquisa e documentação paramétricas muito convenientes. Portanto, uma lista completa de sensores da família pode ser encontrada lá, mediante solicitação " ACS758 ". Meus sensores foram comprados lá - ACS758LCB-100B .

Dentro da folha de dados, tudo é pintado de acordo com a marcação, mas ainda presto atenção ao ponto-chave " 100V ":

1) 100 é o limite de medição em amperes, ou seja, meu sensor pode medir até 100A;
2) " B " - vale a pena prestar atenção especial a esta carta, também pode haver a letra " U " em seu lugar. Sensor com letra Bcapaz de medir corrente alternada e, consequentemente, direta. Um sensor com a letra U só pode medir corrente contínua.

Também no início da folha de dados, há uma excelente placa sobre este tópico:
imagem
Figura 2 - Tipos de sensores de corrente da família ACS758

Além disso, uma das razões mais importantes para o uso desse sensor foi o isolamento galvânico . Os terminais de energia 4 e 5 não estão conectados eletricamente aos terminais 1,2,3. Nesse sensor, a comunicação é apenas na forma de um campo induzido.

Outro parâmetro importante apareceu nesta tabela - a dependência da tensão de saída da corrente. A beleza desse tipo de sensor é que ele possui uma saída de tensão, não uma corrente, como os transformadores de corrente clássicos, o que é muito conveniente. Por exemplo, a saída do sensor pode ser conectada diretamente à entrada ADC do microcontrolador e fazer leituras.

Meu sensor de este valor é 20 mV / A . Isto significa que quando a corrente 1A flui através dos terminais 4-5 do sensor, a tensão na sua saída aumenta em 20 mV . Eu acho que a lógica é clara.

No próximo momento, qual será a tensão de saída? Dado que o alimento é "humano", isto é, unipolar, então, ao medir a CA, deve haver um "ponto de referência". Neste sensor, este ponto de referência é 1/2 fonte de alimentação (Vcc). Essa solução geralmente acontece e é conveniente. Quando a corrente flui em uma direção, a saída será " 1/2 Vcc + I * 0,02V ", no outro meio ciclo, quando a corrente fluir na direção oposta, a tensão de saída será " 1/2 Vcc - I * 0,02V ". Na saída, obtemos uma onda senoidal, onde "zero" é 1 / 2Vcc . Se medirmos a corrente contínua, a saída será " 1/2 Vcc + I * 0,02V "; ao processar dados no ADC, subtraímos o componente constante 1/2 Vcce trabalhamos com dados verdadeiros, ou seja, com o restante de I * 0,02V .

Agora é hora de testar na prática o que eu descrevi acima, ou melhor, subtraído na folha de dados. Para trabalhar com o sensor e verificar suas capacidades, construí este “mini suporte”:

imagem
Figura 3 - Local para testar o sensor atual

Primeiro, decidi aplicar energia ao sensor e medir sua saída para garantir que ele fosse “zero” ele tomou 1/2 Vcc . O diagrama de conexão pode ser consultado na folha de dados, mas, apenas querendo me familiarizar, não perdi tempo e esculpi o capacitor do filtro para poder + filtro passa-baixa RC no pino Vout. Em um dispositivo real, em nenhum lugar sem eles! Eu consegui a seguinte figura no final:

imagem
Figura 4 - O resultado da medição de "zero"

Quando a energia é aplicada5V do meu cachecol STM32VL-Discovery, vi esses resultados - 2,38V . A primeira pergunta que surgiu: “ Por que 2,38, e não 2,5 descritos na ficha técnica? ” A pergunta desapareceu quase instantaneamente - eu medi o barramento de força para depuração, e lá estava 4,76-4,77V. Mas o problema é que a energia vem do USB, já existe 5V, depois do USB existe um estabilizador linear LM7805, e esse claramente não é o LDO com uma queda de 40 mV. Aqui, são cerca de 250 mV. Bem, tudo bem, isso não é crítico, a principal coisa a saber é que "zero" é 2,38V. É essa constante que vou subtrair ao processar dados do ADC.

E agora faremos a primeira medição, até agora apenas com a ajuda de um osciloscópio. Vou medir a corrente de curto-circuito da minha fonte de alimentação ajustável, é 3.06A. Isso e o amperímetro embutido mostram e fluka deram o mesmo resultado. Bem, conectamos as saídas da PSU às pernas 4 e 5 do sensor (joguei a bobina na foto) e vemos o que aconteceu:

imagem
Figura 5 - Medição da corrente de curto-circuito da PSU

Como podemos ver, a tensão no Vout aumentou de 2,38V para 2,44V . Se você observar a dependência acima, devemos obter 2,38V + 3,06A * 0,02V / A , o que corresponde a um valor de 2,44V. O resultado atende às expectativas, em uma corrente de 3A obtivemos um aumento para "zero" igual a 60 mV . Conclusão - o sensor funciona, você já pode trabalhar com ele com a ajuda do MK.

Agora você precisa conectar o sensor de corrente com um dos pinos ADC no microcontrolador STM32F100RBT6. A pedrinha em si é muito medíocre, a frequência do sistema é de apenas 24 MHz, mas esse cachecol sobreviveu muito e se provou. Eu já o possuo, provavelmente, cerca de 5 anos, porque foi recebido gratuitamente na época em que a ST os distribuiu pela direita e pela esquerda.

Primeiro, por hábito, eu queria colocar um amplificador operacional com um coeficiente após o sensor. ganho “1”, mas, olhando para o diagrama estrutural, percebi que ele já estava parado lá dentro. A única coisa a considerar é que, na corrente máxima, a potência de saída será igual à fonte de alimentação do sensor Vcc, ou seja, cerca de 5V, e o STM pode medir de 0 a 3,3V, portanto, neste caso, é necessário colocar um divisor de tensão resistivo, por exemplo, 1: 1,5 ou 1: 2. Minha corrente é escassa, então negligenciei esse momento até agora. Meu dispositivo de teste é mais ou menos assim:

imagem
Figura 6 - Colocando nosso "amperímetro"

Além disso, para visualizar os resultados, estraguei a tela em chinês no controlador ILI9341, o benefício estava à mão, mas minhas mãos não o alcançaram. Para escrever uma biblioteca completa para ele, ele matou algumas horas e uma xícara de café, o benefício da folha de dados era surpreendentemente informativo, o que é raro no artesanato dos filhos de Jackie Chan.

Agora você precisa escrever uma função para medir o Vout usando o ADC do microcontrolador. Não vou contar em detalhes, de acordo com o STM32, já existe um mar de informações e lições. Então, basta olhar:

uint16_t get_adc_value()
    {
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
    return ADC_GetConversionValue(ADC1);
    }

Em seguida, para obter os resultados da medição do ADC no código executável do corpo principal ou na interrupção, você precisa escrever o seguinte:

 data_adc = get_adc_value();

Tendo declarado anteriormente a variável data_adc:

 extern uint16_t data_adc;

Como resultado, obtemos a variável data_adc, que assume um valor de 0 a 4095, porque O ADC no STM32 é de 12 bits. Em seguida, precisamos transformar o resultado "em papagaios" em uma forma mais familiar para nós, isto é, em amperes. Portanto, você deve primeiro calcular o preço da divisão. Após o estabilizador no barramento de 3,3V, meu osciloscópio mostrou 3,17V, não entendi com o que estava conectado. Portanto, dividindo 3.17V por 4095, obtemos o valor 0.000774V - este é o preço da divisão. Ou seja, obtendo o resultado do ADC, por exemplo, 2711, simplesmente o multiplico por 0,000774V e obtenho 2,09V.

Em nossa tarefa, a tensão é apenas um "mediador", ainda precisamos convertê-la em amperes. Para fazer isso, precisamos subtrair 2,38B do resultado e dividir o restante por 0,02 [B / A]. O resultado é esta fórmula:

float I_out = ((((float)data_adc * presc)-2.38)/0.02);

Bem, é hora de colocar o firmware no microcontrolador e ver os resultados:

imagem
Figura 7 - Resultados da medição dos dados do sensor e seu processamento Eu

medi meu próprio consumo do circuito, visto 230 mA. Tendo medido o mesmo com o acaso verificado, o consumo é de 201 mA. Bem - a precisão com uma casa decimal já é muito legal. Vou explicar o porquê ... O intervalo da corrente medida é 0..100A, ou seja, a precisão de até 1A é de 1% e a precisão de até décimos de um ampère já é de 0,1%! E, por favor, note que isso é sem soluções de circuitos. Eu estava com preguiça de pendurar condores de filtro por comida.

Agora você precisa medir a corrente de curto-circuito (curto-circuito) da minha fonte de energia. Giro a alça ao máximo e obtenho a seguinte figura: Figura 8 - Medições de corrente de curto-

imagem
circuito

Bem, na verdade as leituras na própria fonte com seu próprio amperímetro:

imagem
Figura 9 - Valor na escala BP

De fato, mostrou 3,09A, mas enquanto eu fotografava, o vitukha foi aquecido e sua resistência aumentou, e a corrente, consequentemente, caiu, mas isso não aconteceu tão assustador.

Em conclusão, eu nem sei o que dizer. Espero que meu artigo ajude de alguma maneira os amadores de rádio iniciantes da maneira mais difícil. Talvez alguém goste da minha forma de apresentação do material, então eu posso continuar escrevendo periodicamente sobre como trabalhar com vários componentes. Você pode expressar seus desejos sobre o assunto nos comentários, tentarei levar em consideração.

E, claro, estou anexando o código fonte do programa , você vê quem precisa de uma biblioteca para trabalhar com o monitor ou o ADC. O projeto em si no Keil 5.

Source: https://habr.com/ru/post/pt397641/


All Articles