AFON // радиотехник affonya@mail.ru
← Все проекты для дронов

Датчик тока

Измерение тока потребления с датчика Холла (ACS712) через АЦП.

DMC.04 · Питание · ATmega328P

Задача

Считывать выход датчика тока ACS712, вычитать середину шкалы и переводить в амперы.

Алгоритм

ACS712 выдаёт напряжение вокруг Vcc/2 с чувствительностью мВ/А; ток = (Uизм - Vcc/2)/чувствительность.

Исходный код (C, avr-gcc)

⇩ Скачать 04-current-sensor.c

#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>

static uint16_t adc_read(uint8_t ch){
  ADMUX=(1<<REFS0)|(ch&0x0F);
  ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
  ADCSRA|=(1<<ADSC); while(ADCSRA&(1<<ADSC));
  return ADC;
}
int main(void){
  DDRB|=(1<<PB5);
  _delay_ms(50);
  uint16_t zero = adc_read(1);            // калибровка нуля на ADC1
  const float VREF=5.0f, SENS=0.066f;     // 66 мВ/А
  for(;;){
    int16_t d = (int16_t)adc_read(1) - (int16_t)zero;
    float amps = (d*VREF/1024.0f)/SENS;
    if(amps<0) amps=-amps;
    if(amps>20.0f) PORTB|=(1<<PB5); else PORTB&=~(1<<PB5); // индикация перегрузки
    _delay_ms(100);
  }
}

Сборка: avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os файл.c -o файл.elf

Пояснения

Середину шкалы (нулевой ток) калибруют при старте. Чувствительность зависит от модели (напр. 66/100/185 мВ/А).

Смотрите также

Измерение напряжения и тока