Нелинейное измерение напряжения на ATmega168
Нелинейное измерение напряжения на ATmega168
http://img.radiokot.ru/files/29153/x6o30f36x.jpg
На фото по ссылке выше, видно, что коэффициент нелинейный - квадратичный наверное.
Проблема следующая: вольтметр 10 вольт показывает точно, а вот чем выше напряжение тем разница больше. На фото по ссылке выше это видно.
АЦП 10 битный.
10 10
12 12,4
14 14,6
16 16,8
18 19,1
20 21,4
22 23,8
24 26,1
26 28,4
28 30,6
30 33,2
Вот по этой ссылке есть инфа куда копать, но что то я не пойму как копать: http://www.gaw.ru/html.cgi/txt/doc/micr ... 128/12.htm
Там надо как то компенсировать смещение реальной к идеальной.
Частота АЦП 125 кГц (контроллер работает на частоте 16 мГц) пределитель максимум 128. Но я делал пределитель и 2, то все равно результат та койже!
Где то пишут , что надо как то побайтно работать с младшим и старшим байтом, но что то я не пойму как это и поможет ли мне?!
На фото по ссылке выше, видно, что коэффициент нелинейный - квадратичный наверное.
Проблема следующая: вольтметр 10 вольт показывает точно, а вот чем выше напряжение тем разница больше. На фото по ссылке выше это видно.
АЦП 10 битный.
10 10
12 12,4
14 14,6
16 16,8
18 19,1
20 21,4
22 23,8
24 26,1
26 28,4
28 30,6
30 33,2
Вот по этой ссылке есть инфа куда копать, но что то я не пойму как копать: http://www.gaw.ru/html.cgi/txt/doc/micr ... 128/12.htm
Там надо как то компенсировать смещение реальной к идеальной.
Частота АЦП 125 кГц (контроллер работает на частоте 16 мГц) пределитель максимум 128. Но я делал пределитель и 2, то все равно результат та койже!
Где то пишут , что надо как то побайтно работать с младшим и старшим байтом, но что то я не пойму как это и поможет ли мне?!
Re: Нелинейное измерение напряжения на ATmega168
Программу пишу в CVAVR
Вот куски кода для измерения АЦП:
interrupt [ADC_INT] void adc_isr(void) //прерывание по окончании преобразования
{
//в ADСW сохраняется результ. 10 битного преобразования
adc_data=ADCW; //результат переносим в ads_data
};
_____
void Voltmetr(void)
{
ADCSRA |= (1<< 6);
while ((ADCSRA & 0X40) == 0X40) { }; // 0100 0000
Srednee_znahenie_ADC = adc_data; // в прерывании в переменную adc_data присваиваем значение АЦП
};
_____
ADMUX=0b00000101; // bit 7,6=1 - внутр. ИОН= 5 в, bit 3,2,1,0 канал АЦП-adc5
ADCSRA=0b10001111; // бит 7 - разрешить, бит 0..2 частота преобразования, 3 бит - разрешить прерывание
Voltmetr (); //измеряем бортовое напряжение
Вот куски кода для измерения АЦП:
interrupt [ADC_INT] void adc_isr(void) //прерывание по окончании преобразования
{
//в ADСW сохраняется результ. 10 битного преобразования
adc_data=ADCW; //результат переносим в ads_data
};
_____
void Voltmetr(void)
{
ADCSRA |= (1<< 6);
while ((ADCSRA & 0X40) == 0X40) { }; // 0100 0000
Srednee_znahenie_ADC = adc_data; // в прерывании в переменную adc_data присваиваем значение АЦП
};
_____
ADMUX=0b00000101; // bit 7,6=1 - внутр. ИОН= 5 в, bit 3,2,1,0 канал АЦП-adc5
ADCSRA=0b10001111; // бит 7 - разрешить, бит 0..2 частота преобразования, 3 бит - разрешить прерывание
Voltmetr (); //измеряем бортовое напряжение
Re: Нелинейное измерение напряжения на ATmega168
Amstron писал(а):http://img.radiokot.ru/files/29153/x6o30f36x.jpg
На фото по ссылке выше, видно, что коэффициент нелинейный - квадратичный наверное.
Проблема следующая: вольтметр 10 вольт показывает точно, а вот чем выше напряжение тем разница больше. На фото по ссылке выше это видно.
Где то пишут , что надо как то побайтно работать с младшим и старшим байтом, но что то я не пойму как это и поможет ли мне?!
имхо проблема не в коде и не в мк, а в схеме приведения входного напряжения в диапазон измеряемых мк. Защита диодная или сапрессоры есть? Подтяжка отключена? Схему можете показать?
Фонтаны на Outlet Village Белая Дача, г Наро- Фоминск
Цех упаковки стройматериалов
Цех пиролиза покрышек с крекингом и ректификацией
Серийные приборы "Умный Дом" Uniel
Премия первой степени "Больше чем профессия" 2016 г
Цех упаковки стройматериалов
Цех пиролиза покрышек с крекингом и ректификацией
Серийные приборы "Умный Дом" Uniel
Премия первой степени "Больше чем профессия" 2016 г
Re: Нелинейное измерение напряжения на ATmega168
http://img.radiokot.ru/files/29153/x71ljg2yd.jpg
http://img.radiokot.ru/files/29153/x71la1ux8.jpg
диодов нет на защите.
Светодиоды подключены к другому порту.. То есть все входные сигналы на одном порту, выходные на другом...
Если на входе стабилизатора 8 вольт , то на резисторе 10 Ом падение напряжение 4,8 мВ
Если на входе стабилизатора 30 вольт, то на резисторе 10 Ом падение напряжение 0,5 мВ
На выходе стабилизатора всегда четко 5,08 Вольта, при любом входном напряжении от 8 до 30 вольт.
Получается, что меняется опорное напряжение ..
Вместо резистора 10 Ом впаял перемычку - напряжение также измеряет , ушло в одну сторону на 0,1 вольт.
Ни какие цепи не влияют на измеряемое напряжение. Цепи как: светодиодный индикатор (изменял его яркость, стоит фотодатчик), светодиод, фотоприемник и также изменял напряжение на других двух входах.
http://img.radiokot.ru/files/29153/x71la1ux8.jpg
диодов нет на защите.
Светодиоды подключены к другому порту.. То есть все входные сигналы на одном порту, выходные на другом...
Если на входе стабилизатора 8 вольт , то на резисторе 10 Ом падение напряжение 4,8 мВ
Если на входе стабилизатора 30 вольт, то на резисторе 10 Ом падение напряжение 0,5 мВ
На выходе стабилизатора всегда четко 5,08 Вольта, при любом входном напряжении от 8 до 30 вольт.
Получается, что меняется опорное напряжение ..
Вместо резистора 10 Ом впаял перемычку - напряжение также измеряет , ушло в одну сторону на 0,1 вольт.
Ни какие цепи не влияют на измеряемое напряжение. Цепи как: светодиодный индикатор (изменял его яркость, стоит фотодатчик), светодиод, фотоприемник и также изменял напряжение на других двух входах.
Re: Нелинейное измерение напряжения на ATmega168
Пока жду ответа - решил по экспериментировать.
Так как меняется опорное напряжение, то я решил внести в его изменение с ростом напряжения
Я поставил резистор (точнее подобрал) на 620 ом от входного напряжения к опорному напряжению, то есть к 22 и 18 ноге. эти ноги запаралены по схеме.
Сейчас только подумал, что надо было подавать только на 20 ногу AREF
Ду да ладно, есть результаты - на 30 вольтах стало показывать 30 вольт, а на 10 вольтах 9,5 Вольт, что уже радует.
Но есть одно но, то что на входе опорное напряжение равно 5.4 вольта и питание АЦП столько же!
Резистор 620 Ом очень сильно греется...
Щас попробую запитать АЦП от 5 Вольт и отдельно подать на 20 ногу смещение.
Вот схема как я подключил доп резистор: http://img.radiokot.ru/files/29153/x79u672jt.jpg
Так как меняется опорное напряжение, то я решил внести в его изменение с ростом напряжения
Я поставил резистор (точнее подобрал) на 620 ом от входного напряжения к опорному напряжению, то есть к 22 и 18 ноге. эти ноги запаралены по схеме.
Сейчас только подумал, что надо было подавать только на 20 ногу AREF
Ду да ладно, есть результаты - на 30 вольтах стало показывать 30 вольт, а на 10 вольтах 9,5 Вольт, что уже радует.
Но есть одно но, то что на входе опорное напряжение равно 5.4 вольта и питание АЦП столько же!
Резистор 620 Ом очень сильно греется...
Щас попробую запитать АЦП от 5 Вольт и отдельно подать на 20 ногу смещение.
Вот схема как я подключил доп резистор: http://img.radiokot.ru/files/29153/x79u672jt.jpg
Re: Нелинейное измерение напряжения на ATmega168
Запитал отдельно АЦП. Не помогло. История такая же. Резистор сильно греется, что не мудрено.
Тоесть я проверил то что , а вдруг проблема была то что АЦП запитано от источника опорного напряжения?! НЕТ!
Коты - ЖДУ ПОМОЩИ!
Я понимаю, что опорное напряжение не может быть равно больше напряжения питания контроллера.
И сейчас только одна идея! Сделать делитель, что бы опорное напряжение было 4,5 вольт и подмешивать входное напряжение, по идеи должно получиться.
Но что то мне это не нравится!!!
Тоесть я проверил то что , а вдруг проблема была то что АЦП запитано от источника опорного напряжения?! НЕТ!
Коты - ЖДУ ПОМОЩИ!

Я понимаю, что опорное напряжение не может быть равно больше напряжения питания контроллера.
И сейчас только одна идея! Сделать делитель, что бы опорное напряжение было 4,5 вольт и подмешивать входное напряжение, по идеи должно получиться.
Но что то мне это не нравится!!!
- Mishany
- Электрический кот
- Сообщения: 1031
- Зарегистрирован: Чт июн 20, 2013 00:00:58
- Откуда: москва, м.Сходненская
Re: Нелинейное измерение напряжения на ATmega168
а попробовать использовать внутренний ион на 2,56 ? как изменится картина?
Да и ногу AREF вообще отвязать от питания только керамику на GND повесить, внутренней коммутации достаточно.
Да и ногу AREF вообще отвязать от питания только керамику на GND повесить, внутренней коммутации достаточно.
Re: Нелинейное измерение напряжения на ATmega168
Mishany писал(а):а попробовать использовать внутренний ион на 2,56 ? как изменится картина?
Да и ногу AREF вообще отвязать от питания только керамику на GND повесить, внутренней коммутации достаточно.
В 168 меги опорное внутреннее 1,1 Вольт. Сейчас попробую. Мало очень, но ради интересе.
Сейчас ради интереса сделал следующее: изменил биты на ключь внутри контроллера который подключает питание 5 Вольт на опорное напряжение (тоесть внутри коммутируется).
Снаружи только конденсатор 0,1 н. Дак вот, на 10 вольтах показывает 4,8 вместо 10 как раньше при этом же опрорном напряжении.
В программе изменил коэффициент в 2,08 раза больше ))
Сейчас на 10 показывает 10 Вольт, на при питании 30 вольт показывает 34.9 Вольт.
Это хуже чем было! Но, тут не изменно остается опорное напряжение равное напряжению питания на ноге.
Раньше на резисторе 10 ом было изменение напряжения от 0 до 5 мВ.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Нелинейное измерение напряжения на ATmega168
А Ваш эталонный вольтметр в порядке? Может не с тем боретесь?
Re: Нелинейное измерение напряжения на ATmega168
Z_h_e писал(а):А Ваш эталонный вольтметр в порядке? Может не с тем боретесь?
На кренки 5 вольтовой показывает 5,04 я и подумал что правильный ...
Re: Нелинейное измерение напряжения на ATmega168
Сейчас запитал от опорного внутреннего 1,1 вольта. Результат такой 30 вольтах показывает 34,3 Вольта
Возможно если я делитель изменю по питанию скажем в два раза, то показания улучшаться, но я их не замечу.
В АЦП есть нелинейность измерения, но не на 5 же процентов?!
ЕСТЬ ПРЕДЛОЖЕНИЯ? КУДА КОПАТЬ?
Возможно если я делитель изменю по питанию скажем в два раза, то показания улучшаться, но я их не замечу.
В АЦП есть нелинейность измерения, но не на 5 же процентов?!
ЕСТЬ ПРЕДЛОЖЕНИЯ? КУДА КОПАТЬ?
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: Нелинейное измерение напряжения на ATmega168
у микроконтроллерных АЦП есть такая штука:
они около нуля и около верха плохо измеряют, врут то есть.
Нуля у вас точно не будет, т.е. полное отсутствие напряжения, но важна верхняя точка.
Я это к тому, что не обязательно делать соответствие 30В входных = 5 Вольтам на АЦП.
Сделайте соответствие 32Вольта входных = 3.2Вольта на АЦП, для эксперимента не затруднительно поменять номиналы резисторов делителя.
Я много где делал таким образом:
За максимум напряжение питания считается 16 Вольт
После делителя из 16 Вольт, получаем 4 Вольта.
Опорное 5 Вольт.
То есть при максимуме получим: при 4 => 4*1023/5 = 818 АЦП отсчетов.
они около нуля и около верха плохо измеряют, врут то есть.
Нуля у вас точно не будет, т.е. полное отсутствие напряжения, но важна верхняя точка.
Я это к тому, что не обязательно делать соответствие 30В входных = 5 Вольтам на АЦП.
Сделайте соответствие 32Вольта входных = 3.2Вольта на АЦП, для эксперимента не затруднительно поменять номиналы резисторов делителя.
Я много где делал таким образом:
За максимум напряжение питания считается 16 Вольт
После делителя из 16 Вольт, получаем 4 Вольта.
Опорное 5 Вольт.
То есть при максимуме получим: при 4 => 4*1023/5 = 818 АЦП отсчетов.
Последний раз редактировалось pcb Пн мар 28, 2016 20:20:43, всего редактировалось 1 раз.
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Re: Нелинейное измерение напряжения на ATmega168
Ну и наконец ВЫВОДЫ над моей лабораторной работой
Я проверил как может измерять АЦП от разных источников опорного напряжения:
1 - 5 Вольт от стабилизатора подтянутый внешне - напряжение на 30 вольтах было 33,2 Вольта
2 - 5 Вольт подтянуто внутри микроконтроллера при помощи внутреннего ключа - напряжение на 30 вольтах было 34,9 Вольта
3 - 1,1 Вольт от внутреннего опорного напряжения - напряжение на 30 вольтах было 34,2 Вольта
А ВЫВОД такой, завтра проверю свой тестер, так как уж очень значение близкие при разных методах замера!
А У ВАС есть соображения по этому поводу? Как тестер проверить? Есть у меня на работе которому инженер доверяет ))
Я проверил как может измерять АЦП от разных источников опорного напряжения:
1 - 5 Вольт от стабилизатора подтянутый внешне - напряжение на 30 вольтах было 33,2 Вольта
2 - 5 Вольт подтянуто внутри микроконтроллера при помощи внутреннего ключа - напряжение на 30 вольтах было 34,9 Вольта
3 - 1,1 Вольт от внутреннего опорного напряжения - напряжение на 30 вольтах было 34,2 Вольта
А ВЫВОД такой, завтра проверю свой тестер, так как уж очень значение близкие при разных методах замера!
А У ВАС есть соображения по этому поводу? Как тестер проверить? Есть у меня на работе которому инженер доверяет ))
Re: Нелинейное измерение напряжения на ATmega168
pcb писал(а):у микроконтроллерных АЦП есть такая штука:
они около нуля и около верха плохо измеряют, врут то есть.
Нуля у вас точно не будет, т.е. полное отсутствие напряжения, но важна верхняя точка.
Я это к тому, что не обязательно делать соответствие 30В входных = 5 Вольтам на АЦП.
Сделайте соответствие 32Вольта входных = 3.2Вольта на АЦП, для эксперимента не затруднительно поменять номиналы резисторов делителя.
Да, я про это и говорил, что есть нелинейность чем выше.
У меня после запятой есть еще одно число. По сути как Вы сказали 10 битного АЦП должно хватить даже если треть опорного использовать, ну или половину. Наверное половину.
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: Нелинейное измерение напряжения на ATmega168
Рекомендую посмотреть следующий файл
http://www.atmel.com/images/doc2545.pdf
страница 259, сразу понятно станет, почему такая головоломка
Хотя у вас в первом сообщении уже есть ссылка на GAW
http://www.atmel.com/images/doc2545.pdf
страница 259, сразу понятно станет, почему такая головоломка

Хотя у вас в первом сообщении уже есть ссылка на GAW
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Re: Нелинейное измерение напряжения на ATmega168
Сейчас поставил делитель. При 30 вольтах, напряжение на микроконтроллере 0,2 вольта.
Дискретность до десятых показывает нормально.
А вот при 30 вольтах напряжение показывает 35,8 Вольта. Ни фига не уменьшилось.
Дискретность до десятых показывает нормально.
А вот при 30 вольтах напряжение показывает 35,8 Вольта. Ни фига не уменьшилось.
Re: Нелинейное измерение напряжения на ATmega168
pcb писал(а):Рекомендую посмотреть следующий файл
http://www.atmel.com/images/doc2545.pdf
страница 259, сразу понятно станет, почему такая головоломка
Хотя у вас в первом сообщении уже есть ссылка на GAW
Вы мне Америку не открыли. А уже во всех статьях с этими графиками сталкивался. Но ме могут эти графики давать погрешность 5-10 %
Читал как улучшить измерение - надо делать аппроксимацию. Как сделать догадываюсь.
Как же у других работает??? Завтра прибор поверять буду!
-
pcb
- Опытный кот
- Сообщения: 833
- Зарегистрирован: Пт авг 12, 2011 09:14:27
- Откуда: Млечный путь/Земля/РФ/Екатеринбург
Re: Нелинейное измерение напряжения на ATmega168
Amstron писал(а):Вы мне Америку не открыли.
Ну-с, простите.
Статьи я читаю только в Сайнс
На микрокнтроллеры только пдфки.
Amstron писал(а):Как же у других работает???
а может код кривоват?
Есть вот такая [url=
http://pcb-admin.ru/nashy-razrabotky/35 ... okanalnaya]измерялка[/url]
при измерении 250В показывает 250В.
при измерении 30В показывает 30В
Разработал:
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
-BLDC
-ФУОЗ/МПСЗ
-SMART BMS
-ECU/EDC на STM32F4(43%)+CPLD(57%)
-Моноинжектор на ATSAMD20G16
-контроллер эффектов для RGB LED ленты
-умные часы/обратный счет/секундомер
-устройство измерения емкости АКБ
Re: Нелинейное измерение напряжения на ATmega168
Поверил мультиметр. На 35 вольтах есть отличие на 0.2 Вольта.
Дело не в мультиметре.
Подскажите что посмотреть?
Дело не в мультиметре.
Подскажите что посмотреть?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Нелинейное измерение напряжения на ATmega168
Лично что мне в Вашей схеме не нравится. Это использование в качестве ИОН 7805 - у него ж погрешность стабилизации 2%. Мне слабо верится что на выходе неизменное напряжение при изменении входного. Непонятно на кой ляд включен стабилитрон в цепь опорного напряжения, погрешность обычного стабилитрона будет не лучше, да еще будут бороться 7805 и стабилитрон друг с другом.
1. Внимательно проверьте схему на сопли, грязь и т.д.
2. Измените программу и отображайте код АЦП без преобразования в напряжение. Посчитайте "ручками" линейность.
3. Откиньте по максимуму всю схему от МК. Подайте опорное напряжение с батареи, а на вход АЦП подайте напряжения через потенциометр подключенный к хорошей батарее. Проверьте
4. Поменять МК
5. Показать исходник форумчанам.
1. Внимательно проверьте схему на сопли, грязь и т.д.
2. Измените программу и отображайте код АЦП без преобразования в напряжение. Посчитайте "ручками" линейность.
3. Откиньте по максимуму всю схему от МК. Подайте опорное напряжение с батареи, а на вход АЦП подайте напряжения через потенциометр подключенный к хорошей батарее. Проверьте
4. Поменять МК
5. Показать исходник форумчанам.
