АЦП для последовательных аккумуляторных батарей
- Сообщения: 550
- Зарегистрирован: Ср авг 17, 2011 23:12:30
Всем привет подскажите пожалуста как мерить напряжение на каждой акк батарее которые соединены последовательно,хочу с помощью atmega8 ,знаю что такое ацп, но не пойму коего чего при измерении ведь минус то всегда один минус atmega8 ,как же измерять напряжение каждой батареи которые соединены последовательно?,можете нарисовать чтобы понятнее стало
- Реклама
- Сообщения: 3794
- Зарегистрирован: Ср дек 24, 2008 09:58:58
Напряжение заземленной батареи измеряйте как обычно. Потом измерьте напряжение двух последовательно соединенных батарей. Напряжение на второй батарее получите вычитанием.
- Сообщения: 550
- Зарегистрирован: Ср авг 17, 2011 23:12:30
СпасибоSer60 писал(а):Напряжение заземленной батареи измеряйте как обычно. Потом измерьте напряжение двух последовательно соединенных батарей. Напряжение на второй батарее получите вычитанием.
off: несказанно удивлен отсутствием восклицательных знаков (а то и не одного) после каждого предложения ТС. Приятно видеть.
Docendo discimus
Если пара батарей то проблем не будет, а вот если много последовательно включённых то почитайте статью http://embedders.org/node/168sirha писал(а):Всем привет подскажите пожалуста как мерить напряжение на каждой акк батарее которые соединены последовательно,... ,как же измерять напряжение каждой батареи которые соединены последовательно?,можете нарисовать чтобы понятнее стало
- Реклама
- Сообщения: 550
- Зарегистрирован: Ср авг 17, 2011 23:12:30
Подскажите пожалуйста что не так с двумя батареями получилось ,вообщем с четырьмя результат не всегда точный ,нужна точность до 0.1 вольта как это сделать?
фото в протеусе:
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
int a;
int b;
int c;
int d;
#define FIRST_ADC_INPUT 0
#define LAST_ADC_INPUT 4
unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
#define ADC_VREF_TYPE 0x20
interrupt [ADC_INT] void adc_isr(void) //стандартное прерывание по ADC от CVAVR
{
static unsigned char input_index=0;
// Read the 8 most significant bits
// of the AD conversion result
adc_data[input_index]=ADCH;
// Select next ADC input
if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
input_index=0;
ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
}
void main(void)
{
PORTD=0x00;
DDRD=0xFF;
PORTB=0x00;
DDRB=0xFF;
ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff);
ADCSRA=0xCC;
#asm("sei")
while (1)
{
a=adc_data[3];
b=adc_data[2];
c=adc_data[1];
d=adc_data[0];
if ((d-c)>48) PORTD.3=1;
else PORTD.3=0;
if ((c-b)>48) PORTD.2=1;
else PORTD.2=0;
if ((b-a)>48) PORTD.1=1;
else PORTD.1=0;
if (a>48) PORTD.0=1;
else PORTD.0=0;
}}фото в протеусе:
- Вложения
-
- Безымянный.JPG
- (115.23 КБ) 404 скачивания


