Измерение тока с помощью AVR
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
а если использовать диф вход АЦП, то как его лучше подключить к имеющейся схеме/выходу ОУ?....плз рис
- Реклама
а зачем вам выход ОУ подключать на дифференциальный вход?
если для повышения точности, то имейте в виду, что при использовании АЦП в режиме диффвходов ожидаемая разрядность еще меньше!
если для повышения точности, то имейте в виду, что при использовании АЦП в режиме диффвходов ожидаемая разрядность еще меньше!
Ставим плюсы: )
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
и все же, как лучше поступить......
есть резистор на 0,001 Ом, ОУ с 20 кратным усилением, атмега 32. Все уже запаяно в плату. Мерять ток нужно до 40 А и напряжение до 6 В, при Vref внутр 2,56В используя 10 битное разрешение используя однопорярные входы. Спасибо.
есть резистор на 0,001 Ом, ОУ с 20 кратным усилением, атмега 32. Все уже запаяно в плату. Мерять ток нужно до 40 А и напряжение до 6 В, при Vref внутр 2,56В используя 10 битное разрешение используя однопорярные входы. Спасибо.
самое главное не написали: с какой точностью нужно измерять?
Ставим плюсы: )
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
напряжение как можно точнее а ток хотя бы +/-0,2-0,3А
- Реклама
Давайте посчитаем:
(ИДЕАЛЬНЫЕ УСЛОВИЯ)
примем разрядность АЦП = 10; (2^10 = 1024)
тогда шаг дискретизации = 2,56В/1024 = 0,0025 В
учитывая ОУ, шаг дискретизации = 0,0025В/20 = 125мкВ (на стороне шунта)
шаг дискретизации измеряемого тока = 125мкВ/0,001 Ом = 0,125 А
Это означает, что мы можем получить показания с погрешностью +/- 0,125А
это САМЫЙ ИДЕАЛЬНЫЙ СЛУЧАЙ.
Теперь реальность:
1) Шунт + провода до шунта явно больше 0,001 Ом
Даже, если верить Ваши измерениям (2,1 А соответствовало падению напряжения 2,4 мВ), то сопротивление шунта равно = 2,4/2,1 = 1,143 мОм = 0,001143 Ом , а это уже 14% (!!!) вдумайтесь
2)АЦП меги без программных ухищрений даст от силы 9 разрядов при идеальном электромагнитном фоне + отсутствии помех по питанию.
В реальных условиях это уже 8 разрядов. отсюда шаг дискретизации увеличивается в 4 раза.
Исходя из Вашего описания схемы можно предположить, что лучшем случае точность ЕДИНИЧНОГО измерения тока будет не выше, чем +/-0,5А
ищите ошибку либо в программе (считывание данных) либо в цепях измерений (вход ОУ, вход АЦП)
(ИДЕАЛЬНЫЕ УСЛОВИЯ)
примем разрядность АЦП = 10; (2^10 = 1024)
тогда шаг дискретизации = 2,56В/1024 = 0,0025 В
учитывая ОУ, шаг дискретизации = 0,0025В/20 = 125мкВ (на стороне шунта)
шаг дискретизации измеряемого тока = 125мкВ/0,001 Ом = 0,125 А
Это означает, что мы можем получить показания с погрешностью +/- 0,125А
это САМЫЙ ИДЕАЛЬНЫЙ СЛУЧАЙ.
Теперь реальность:
1) Шунт + провода до шунта явно больше 0,001 Ом
Даже, если верить Ваши измерениям (2,1 А соответствовало падению напряжения 2,4 мВ), то сопротивление шунта равно = 2,4/2,1 = 1,143 мОм = 0,001143 Ом , а это уже 14% (!!!) вдумайтесь
2)АЦП меги без программных ухищрений даст от силы 9 разрядов при идеальном электромагнитном фоне + отсутствии помех по питанию.
В реальных условиях это уже 8 разрядов. отсюда шаг дискретизации увеличивается в 4 раза.
Исходя из Вашего описания схемы можно предположить, что лучшем случае точность ЕДИНИЧНОГО измерения тока будет не выше, чем +/-0,5А
Вы это измерили мультиметром или предположили исходя из коэффициента усиления?wellcom писал(а):При токе в 2,1 А (меряю тестером), на резисторе падение 2,4мВ и соответственно после ОУ на входе АЦП = 48мВ.
Вот это крайне не похоже на то, что должно получаться.wellcom писал(а):При чтении общего регистра ADCW (содержит ADCH и ADCL бит ADLAR =0) получаю непонятный мне результат, а именно 0х04h
ищите ошибку либо в программе (считывание данных) либо в цепях измерений (вход ОУ, вход АЦП)
Ставим плюсы: )
А, какой ОУ используется для измерения тока?.
Двухполярное питании ИУ или ОУ? иначе как на выходе, получить 0 В. Так, же важен параметр смещения напряжения, у некоторых ОУ может быть и 4мв, и тогда 4мв Х 20 = 80мВ смещения, причем может гулять, а нужно мерять микровольты.
Двухполярное питании ИУ или ОУ? иначе как на выходе, получить 0 В. Так, же важен параметр смещения напряжения, у некоторых ОУ может быть и 4мв, и тогда 4мв Х 20 = 80мВ смещения, причем может гулять, а нужно мерять микровольты.
Такое впечатление, что вы сидиромы никогда не разбирали... Сам элемент холла не может быть цифровым. В старых приводах использовались BLDC двигатели с ДПР на элементах Холла в SOT23-4 (SOT143-4) прямо в двигателе. Их токовые диагонали соеденены последовательно, а выходные - в микросхему драйвера двигателя шпинделя. Подобные схемы были в приводах барабанов видеоголовок и ведущих валов в видиках.YS писал(а):Скорее всего, он был цифровой. А то и вообще не простой ДХ, а совмещенный с переключателем обмоток.eufs писал(а):ДХ взял от ДПР привода диска CDROM
C0FFEE=12648430
- Сообщения: 7518
- Зарегистрирован: Вс мар 29, 2009 22:09:05
Ваша правда, я не специалист в схемотехнике CD-ROM-ов. Просто я работал с отдельными датчиками Холла - цифровыми (переключатели, по факту - замена геркона) и аналоговыми (пропорциональный выход), вот и подумал...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
на входе АЦП Меряю мультиметром (достаточно точным), операционник прецизионный с однополярным питанием AD8211.ibiza11 писал(а):Вы это измерили мультиметром или предположили исходя из коэффициента усиления?wellcom писал(а):При токе в 2,1 А (меряю тестером), на резисторе падение 2,4мВ и соответственно после ОУ на входе АЦП = 48мВ.Вот это крайне не похоже на то, что должно получаться.wellcom писал(а): При чтении общего регистра ADCW (содержит ADCH и ADCL бит ADLAR =0) получаю непонятный мне результат, а именно 0х04h
ищите ошибку либо в программе (считывание данных) либо в цепях измерений (вход ОУ, вход АЦП)
...по программе считывания данных, по идее, должно быть все нормально, так как еще одним и тем же куском кода меряю напряжение на другом канале АЦП. Вот кусок процедуры чтения
Спойлер
Код: Выделить всё
#define ADPS 0x07
#define MAX 100
#define true 1
#define false 0
....
ADMUX=(0x03<<6)|(ucnChannel&0x07); //подключаем к ADC нужный канал и устанавливаем источник опорного напряжения (внутр 2,56В)
ADCSRA=0x40|0x02; //первый раз стартуем преобразование на 64 (необходимо для инициализации)
ADCSRA= (1<<ADEN)|(1<<ADSC)|ADPS; //ON ADC|| ON однокр преобраз || частота ацп=clk/128
ucCounter=0;
while((ucCounter<MAX)&&(!bReady))
{
Ready=((ADCSRA&0x40)==0x0); //(ADSC==0 после окончания преобразования в bReady будет записана истина)
ucCounter++;
delay_us(10);
};
ADCSRA|= 0x10; //сбросили флаг прерывания ADIF
if(Ready) //если преобразование закончено
{
bResult=true; //указать что результат имеется
}
sprintf(Res,"\r\nADCW = %u",ADCW);UARSendStr(Res); //смотрим результат
delay_ms(100);
(*puiValue)=ADCW
Вот результаты измерений:
Спойлер
=================Ток без подключеной нагрузки (8 измерений суммирую и делю на 8 для получения среднего значения)ADCW = 1
ADCW = 0
ADCW = 0
ADCW = 0
ADCW = 0
ADCW = 0
ADCW = 0
ADCW = 0
ADC Summ=:0x1h = 1
ADC Summ/8=:0
ADC Srednee=:0x0h = 0
ADC=0.000000 V
I=0.000000 A
==================Измерение Напряжения (результат с учетом делителя)
ADCW = 770
ADCW = 770
ADCW = 771
ADCW = 771
ADCW = 772
ADCW = 772
ADCW = 771
ADCW = 771
ADC Summ=:0x1818h = 6168
ADC Summ/8=:771
ADC Srednee=:0x303h = 771
U=:5.78 V -------------------------(измеренное мультиметром =5,77В)
==================Ток С подключеной нагрузкой (измерял мультиметром на входе АЦП = 46,6мВ и соответственно ток тоже мультеметром = 2,05А)
ADCW = 4
ADCW = 2
ADCW = 3
ADCW = 4
ADCW = 5
ADCW = 3
ADCW = 3
ADCW = 2
ADC Summ=:0x1Ah = 26
ADC Summ/8=:3 ------------------здесь результат должен быть в раене 18-19 что соответствовало бы 46-47 мВ
ADC Srednee=:0x3h = 3
ADC=0.007500 V
I=0.375000 A
И самое интерестное что в протеусе код измерения как тока так и напряжения работает правильно -
Спойлер
На вход АЦП подаю 0,02ВADCW = 10
ADCW = 10
ADCW = 10
ADCW = 10
ADCW = 10
ADCW = 10
ADCW = 10
ADCW = 10
ADC Summ=:0x50h = 80
ADC Summ/8=:10
ADC Srednee=:0xAh = 10
ADC=0.025000 V
I=1.250000 A
Последний раз редактировалось wellcom Пн окт 08, 2012 13:16:36, всего редактировалось 1 раз.
как этот делитель учитывается в программе измерения напряжения???wellcom писал(а):Измерение Напряжения (результат с учетом делителя)
я тут посчитал: при напряжении на входе делителя 5,77В, у Вас получается результат 771.
При опорном напряжении 2,56В и разрядности АЦП = 10 получается, что на самом деле на входе АЦП напряжение = 771/1024*2,56 = 1,9275 В
а это означает, что у Вас резистивный делитель делит напряжение на число = 5,77/1,9275 = 2,99
Если предположить, что в программе расчета тока тоже учитывается этот делитель, то получаются верные результаты.
И почему мы узнаем о делителе только сейчас? Программу измерения напряжения Вы сами писали?
Ставим плюсы: )
А я опять же нигде не увидел подстройку из-за разброса опорного напряжения, которое (напомню) может быть от 2.3 до 2.7 В. Насколько я понял, там только шунт и прецизионный 20-кратый усилитель.
Конечно, это ошибка не в разы, но всё же...
Конечно, это ошибка не в разы, но всё же...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
ibiza11 Вашы расчеты верны, делитель на 3 стоит, но только по входу измерения напряжения. По входу измерения тока никаких делителей нету.ibiza11 писал(а):wellcom писал(а):Измерение Напряжения (результат с учетом делителя)Спойлер
как этот делитель учитывается в программе измерения напряжения???
я тут посчитал: при напряжении на входе делителя 5,77В, у Вас получается результат 771.
При опорном напряжении 2,56В и разрядности АЦП = 10 получается, что на самом деле на входе АЦП напряжение = 771/1024*2,56 = 1,9275 В
а это означает, что у Вас резистивный делитель делит напряжение на число = 5,77/1,9275 = 2,99
Если предположить, что в программе расчета тока тоже учитывается этот делитель, то получаются верные результаты.
И почему мы узнаем о делителе только сейчас? Программу измерения напряжения Вы сами писали?
Вот как меряю:
Спойлер
Код: Выделить всё
if(ADC_GetSignal_Measure(4,&ui_tmp)) // 4 канал ацп, ток потребления
{
temp1=(0.0025*ui_tmp)/20; //делим на 20 т.к. операционник усиливает ровно в 20 раз
sprintf(Res,"\r\nADC Srednee=:0x%Xh = %u",ui_tmp,ui_tmp);UARSendStr(Res); //вывод для отладки
sprintf(Res,"\r\nADC=%f V\r\n",(ui_tmp*0.0025));UARSendStr(Res);
temp2 = temp1/0.001;
sprintf(Res,"I=%f A\r\n",temp2);UARSendStr(Res);
fl_I = temp2 ;
}
.................
if(ADC_GetSignal_Measure(3,&ui_tmp))// 3 канал ацп напряжение питание
{
temp1=(0.0025*ui_tmp)*DIVIDER_RATIO_V; //DIVIDER_RATIO_V=коеф. деления делителя =3
sprintf(Res,"\r\nADC Srednee=:0x%Xh = %u",ui_tmp,ui_tmp);UARSendStr(Res);
fl_U=temp1;
Подстройки никакой нету, пока и не требуется, измерял мультиметром = 2,53 В. По схеме - да, только шунт и прецизионник *20.Gudd-Head писал(а):А я опять же нигде не увидел подстройку из-за разброса опорного напряжения, которое (напомню) может быть от 2.3 до 2.7 В. Насколько я понял, там только шунт и прецизионный 20-кратый усилитель.
Конечно, это ошибка не в разы, но всё же...
а зачем вы делите результат на 400 (умножаете на 0.0025)? а зачем (в конце) умножаете на 1000? вообще не пойму логики...
какого типа переменные используются в программе? float?
какого типа переменные используются в программе? float?
Ставим плюсы: )
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
именно float. Мое понимание такое: в ADCW сохраняется 10 битный результат преобразования АЦП., т.е. количество квантов. 1 квант = 2,5мВ, отсюда что бы узнать напряжение на входе, я 0,0025В*ADCW (число квантов) и должен получить напряжение на входе АЦП. Так как оно усилено в 20 раз, я его и делю на 20, что бы узнать падение на резисторе и расчитать ток. Возможно все это можно как то по другому записать.....я просто в математике не силен.ibiza11 писал(а):а зачем вы делите результат на 400 (умножаете на 0.0025)? а зачем (в конце) умножаете на 1000? вообще не пойму логики...
какого типа переменные используются в программе? float?
Если у вас резистор 0.001 Ом, то один квант после 20-ти кратного усилителя равен 0,125 А в вашей схеме.
Опять же, при условии что опорное равно 2,56 В. Буду занудой, но один шаг квантования АЦП может быть от 2,2 до 2,6 мВ из-за разброса опорного.
Опять же, при условии что опорное равно 2,56 В. Буду занудой, но один шаг квантования АЦП может быть от 2,2 до 2,6 мВ из-за разброса опорного.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
так и есть 0,125А, пробл в том что на входе 48мВ, а результат читаемый с ADCW = 3-4 (см. пост выше) а должно быть (48/2,5 = 19) в раене 18-19Gudd-Head писал(а):Если у вас резистор 0.001 Ом, то один квант после 20-ти кратного усилителя равен 0,125 А в вашей схеме.
Опять же, при условии что опорное равно 2,56 В. Буду занудой, но один шаг квантования АЦП может быть от 2,2 до 2,6 мВ из-за разброса опорного.
если бы у меня опора была не 2,56, то и измерение напряжения было бы не верным.
Значит, шумы.wellcom писал(а):результат читаемый с ADCW = 3-4, а должно быть (48/2,5 = 19) в районе 18-19
1. Вы переключаете каналы АЦП с "напряжения" на "ток". Так? Сколько времени проходит между переключением и измерением?
2. Вы используете “ADC Noise Canceler”?
3. Ну и никто не знает как это всё реализовано у вас на плате — аналоговое/цифровое питание, земля, фильтруется ли дополнительно опорное напряжение...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 190
- Зарегистрирован: Чт фев 24, 2011 13:00:49
да, похоже что меряет шумы, но должен же мерять 48мВ....
1. вначале ток, потом не менее чем через 100мс напряжение
2. да
3. питание фильтруется (коденсатор), про остальное пока ничего не могу сказать....
1. вначале ток, потом не менее чем через 100мс напряжение
2. да
3. питание фильтруется (коденсатор), про остальное пока ничего не могу сказать....
по опыту могу сказать что первые 100 отсчетов АЦП меги 8-й - полная ересть нелинейность и туфта! даже если это просто 1 килоомный переменник линейный и кондер на 50 микрофарад!!! потому многие и советуют сделать "поднятие" нуля чтоб не мерять околонулевые значения!!!вот только поднятие это тож должно быть очень стабильным и всё бы ничего если б просто делителем с опоры брать но у меги8-й встроенная опора очень слабая и никаких делителей не допускает....нужно вводить внешнюю опору!
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.


