Hola a todos!Quizás valga la pena presentarse un poco: soy un ingeniero de circuitos habitual que también está interesado en la programación y algunas otras áreas de la electrónica: DSP, FPGA, comunicaciones por radio y algunas otras. Recientemente, me lancé de cabeza a los receptores SDR. Al principio quería dedicar mi primer artículo (espero que no sea el último) a un tema más serio, pero para muchos se convertirá en una cuestión de lectura y no traerá ningún beneficio. Por lo tanto, el tema fue elegido altamente especializado y aplicado exclusivamente. También quiero señalar que, probablemente, todos los artículos y preguntas en ellos serán considerados más desde el lado del diseñador de circuitos, y no desde el programador o cualquier otra persona. Bueno, vamos!No hace mucho tiempo, ordené el diseño del "Sistema de monitoreo para el suministro de energía de un edificio residencial", el cliente se dedica a la construcción de viviendas suburbanas, por lo que algunos de ustedes ya han visto mi dispositivo. Este dispositivo midió las corrientes de consumo en cada fase y voltaje de entrada, enviando simultáneamente datos a través del canal de radio al sistema Smart Home ya instalado, y fue capaz de cortar el arrancador en la entrada de la casa. Pero la conversación de hoy no será sobre él, sino sobre su componente pequeño pero muy importante: el sensor de corriente. Y como ya entendió por el título del artículo, estos serán sensores de corriente "sin contacto" de Allegro - ACS758-100 .________________________________________________________________________________________________________________________La hoja de datos, sobre la que hablaré sobre el sensor, se puede encontrar aquí . Como puede suponer, el número "100" al final de la marca es la corriente máxima que puede medir el sensor. Francamente, tengo dudas sobre esto, me parece que las conclusiones simplemente no pueden soportar 200A durante mucho tiempo, aunque es bastante adecuado para medir la corriente de entrada. En mi dispositivo, un sensor de 100 A sin problemas pasa al menos 35 A por sí mismo constantemente + hay picos de consumo de hasta 60 A.
Figura 1 - Aspecto del sensor ACS758-100 (50/200)Antes de pasar a la parte principal del artículo, le sugiero que se familiarice con dos fuentes. Si tiene conocimientos básicos de electrónica, serán redundantes y no dude en omitir este párrafo. Aconsejo al resto que revise el desarrollo general y la comprensión:1) El efecto Hall. Fenómeno y principio de funcionamiento2) Sensores de corriente modernos________________________________________________________________________________________________________________________Bueno, comencemos con lo más importante, a saber, el marcado. Compro componentes en el 90% de los casos en www.digikey.com. Los componentes llegan a Rusia en 5-6 días, probablemente hay todo en el sitio, y también una búsqueda y documentación paramétrica muy conveniente. Por lo tanto, se puede encontrar una lista completa de sensores de la familia bajo pedido " ACS758 ". Mis sensores fueron comprados allí: ACS758LCB-100B .Dentro de la hoja de datos, todo está pintado de acuerdo con la marca, pero aún prestaré atención al punto clave " 100V ":1) 100 es el límite de medición en amperios, es decir, mi sensor puede medir hasta 100A;2) " B ": vale la pena prestar especial atención a esta letra, también puede existir la letra " U ". Sensor con letra Bcapaz de medir corriente alterna y, por consiguiente, directa. Un sensor con la letra U solo puede medir corriente continua.También al comienzo de la hoja de datos hay una placa excelente sobre este tema:
Figura 2 - Tipos de sensores de corriente de la familia ACS758Además, una de las razones más importantes para usar dicho sensor fue el aislamiento galvánico . Los terminales de alimentación 4 y 5 no están conectados eléctricamente a los terminales 1,2,3. En este sensor, la comunicación es solo en forma de campo inducido.
Otro parámetro importante apareció en esta tabla: la dependencia del voltaje de salida de la corriente. La belleza de este tipo de sensor es que tiene una salida de voltaje, no una corriente, como los transformadores de corriente clásicos, lo cual es muy conveniente. Por ejemplo, la salida del sensor se puede conectar directamente a la entrada ADC del microcontrolador y tomar lecturas.Mi sensor de este valor es 20 mV / A . Esto significa que cuando la corriente 1A fluye a través de los terminales 4-5 del sensor, el voltaje en su salida aumentará en 20 mV . Creo que la lógica es clara.El próximo momento, ¿cuál será el voltaje de salida? Dado que la comida es "humana", es decir, unipolar, entonces cuando se mide AC, debe haber un "punto de referencia". En este sensor, este punto de referencia es 1/2 fuente de alimentación (Vcc). Tal solución sucede a menudo y es conveniente. Cuando la corriente fluye en una dirección, la salida será " 1/2 Vcc + I * 0.02V ", en el otro medio ciclo, cuando la corriente fluya en la dirección opuesta, el voltaje de salida será " 1/2 Vcc - I * 0.02V ". En la salida, obtenemos una onda sinusoidal, donde "cero" es 1 / 2Vcc . Si medimos la corriente continua, la salida será " 1/2 Vcc + I * 0.02V ", luego, al procesar datos en el ADC, simplemente restaremos el componente constante 1/2 Vccy trabajamos con datos verdaderos, es decir, con el resto de I * 0.02V .Ahora es el momento de probar en la práctica lo que describí anteriormente, o mejor dicho, restado en la hoja de datos. Para trabajar con el sensor y verificar sus capacidades, construí este "mini soporte":
Figura 3 - Sitio para probar el sensor de corriente Enprimer lugar, decidí aplicar energía al sensor y medir su salida para asegurarme de que sea "cero". él ha tomado 1/2 Vcc . El diagrama de conexión se puede tomar en la hoja de datos, pero, solo queriendo conocerlo, no perdí el tiempo y esculpí el condensador del filtro para poder + filtro de paso bajo RC en el pin Vout. ¡En un dispositivo real, en ninguna parte sin ellos! Al final obtuve la siguiente imagen:
Figura 4 - El resultado de medir "cero"cuando se aplica potencia5V de mi bufanda STM32VL-Discovery, vi estos resultados: 2.38V . La primera pregunta que surgió fue: " ¿Por qué 2.38, y no 2.5 se describe en la hoja de datos? " Pero el problema es que la energía proviene del USB, ya hay 5V, después del USB hay un estabilizador lineal LM7805, y esto claramente no es LDO con una caída de 40 mV. Aquí, alrededor de 250 mV. Bueno, está bien, esto no es crítico, lo principal es saber que "cero" es 2.38V. Es esta constante la que restaré cuando procese datos del ADC.Y ahora tomaremos la primera medición, hasta ahora solo con la ayuda de un osciloscopio. Mediré la corriente de cortocircuito de mi fuente de alimentación ajustable, es 3.06A. Esto y los espectáculos de amperímetro integrados y fluka dieron el mismo resultado. Bien, conectamos las salidas de la fuente de alimentación a las patas 4 y 5 del sensor (en mi foto se lanza la bobina) y vemos lo que sucedió:
Figura 5 - Medición de la corriente de cortocircuito de la fuente de alimentaciónComo podemos ver, el voltaje en Vout aumentó de 2.38V a 2.44V . Si observa la dependencia anterior, entonces deberíamos obtener 2.38V + 3.06A * 0.02V / A , que corresponde a un valor de 2.44V. El resultado cumple con las expectativas, a una corriente de 3A obtuvimos un aumento a "cero" igual a 60 mV . Conclusión: el sensor funciona, ya puedes trabajar con él con la ayuda de MK.Ahora necesita conectar el sensor de corriente con uno de los pines ADC en el microcontrolador STM32F100RBT6. El guijarro en sí es muy mediocre, la frecuencia del sistema es de solo 24 MHz, pero esta bufanda ha sobrevivido mucho y ha demostrado su eficacia. Ya lo tengo, probablemente, unos 5 años, porque se recibió gratis en ese momento cuando ST los distribuyó de derecha a izquierda.Primero, por costumbre, quería poner un amplificador operacional con un coeficiente después del sensor. gané "1", pero, mirando el diagrama estructural, me di cuenta de que él ya estaba parado adentro. Lo único a tener en cuenta es que a la corriente máxima la potencia de salida será igual a la fuente de alimentación del sensor de Vcc, es decir, aproximadamente 5V, y el STM puede medir de 0 a 3.3V, por lo que es necesario en este caso colocar un divisor de voltaje resistivo, por ejemplo, 1: 1.5 o 1: 2 Mi corriente es escasa, así que descuidé este momento hasta ahora. Mi dispositivo de prueba se ve así:
Figura 6 - Poniendo nuestro "amperímetro"Además, para visualizar los resultados, atornillé la pantalla china en el controlador ILI9341, el beneficio estaba al alcance de la mano, pero mis manos no lo alcanzaron en absoluto. Para escribir una biblioteca completa para él, mató un par de horas y una taza de café, ya que la hoja de datos era sorprendentemente informativa, lo cual es raro para las artesanías de los hijos de Jackie Chan.Ahora necesita escribir una función para medir Vout usando el ADC del microcontrolador. No contaré en detalle, según STM32 ya hay un mar de información y lecciones. Así que solo mira:uint16_t get_adc_value()
{
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
return ADC_GetConversionValue(ADC1);
}
A continuación, para obtener los resultados de medir el ADC en el código ejecutable del cuerpo principal o la interrupción, debe escribir lo siguiente: data_adc = get_adc_value();
Habiendo declarado previamente la variable data_adc: extern uint16_t data_adc;
Como resultado, obtenemos la variable data_adc, que toma un valor de 0 a 4095, porque El ADC en el STM32 es de 12 bits. A continuación, debemos convertir el resultado "en loros" en una forma más familiar para nosotros, es decir, en amperios. Por lo tanto, primero debe calcular el precio de la división. Después del estabilizador en el bus de 3.3V, mi osciloscopio mostró 3.17V, no entendía con qué estaba conectado. Por lo tanto, dividiendo 3.17V por 4095, obtenemos el valor 0.000774V: este es el precio de la división. Es decir, obteniendo el resultado del ADC, por ejemplo, 2711, simplemente lo multiplico por 0.000774V y obtengo 2.09V.En nuestra tarea, la tensión es solo un "mediador", aún necesitamos convertirla en amperios. Para hacer esto, necesitamos restar 2.38B del resultado y dividir el resto por 0.02 [B / A]. El resultado es esta fórmula:float I_out = ((((float)data_adc * presc)-2.38)/0.02);
Bueno, es hora de llenar el firmware en el microcontrolador y ver los resultados:
Figura 7 - Resultados de medición de los datos del sensor y su procesamiento.Medí mi propio consumo del circuito como se ve 230 mA. Habiendo medido lo mismo con el fluke verificado, resultó que el consumo es de 201 mA. Bueno, la precisión con un decimal ya es muy buena. Explicaré por qué ... ¡El rango de la corriente medida es 0..100A, es decir, la precisión de hasta 1A es del 1%, y la precisión de hasta las décimas de amperio ya es del 0.1%! Y tenga en cuenta que esto no tiene soluciones de circuitos. Incluso era demasiado vago para colgar los Cóndores de filtro para la comida.Ahora necesita medir la corriente de cortocircuito (cortocircuito) de mi fuente de energía. Giro el mango al máximo y obtengo la siguiente imagen:
Figura 8 - Mediciones de corriente de cortocircuitoBueno, en realidad las lecturas en la fuente misma con su propio amperímetro:
Figura 9 - Valor en la escala BPDe hecho, mostró 3.09A, pero mientras estaba fotografiando, el vitukha se calentó y su resistencia aumentó, y la corriente, en consecuencia, cayó, pero esto no lo hizo. tan aterradorEn conclusión, ni siquiera sé qué decir. Espero que mi artículo ayude de alguna manera a los radioaficionados novatos a su manera difícil. Quizás a alguien le guste mi forma de presentación del material, luego puedo continuar escribiendo periódicamente sobre el trabajo con varios componentes. Puede expresar sus deseos sobre el tema en los comentarios, intentaré tenerlo en cuenta.Y, por supuesto, adjunto el código fuente para el programa , puede ver quién necesita una biblioteca para trabajar con la pantalla o el ADC. El proyecto en sí en Keil 5.