Страница 1 из 2

показометр U/I в Bascom-AVR

Добавлено: Пт окт 16, 2015 21:59:53
SolderC
Здравствуйте, помогите разобраться с заморочкой. Понадобился мне в ЛБП показометр, т.к. старый приказал долго жить. Порывшись в нете решил сделать на контроллере, ещё чуть-чуть порывшись понял, что лучше сообразить прошиву самому, чтобы не иметь лишних фичь в показометре вроде регулируемых порогов отключения нагрузки при перенапряжении и КЗ, "привет от Васи" в момент включения прибора и прочей ебулды, да и прибор сделать именно на нужный диапазон измерения.
Вообщем, остановился на basic, потому что в школе изучал :) и это боле менее интуитивно понятный мне язык в отличие от C и asm. На просторах нета нарыл исходник и начал его коцать под свои нужды.
Написал, собрал(на макете), работает.
Работает-то работает, да не так как хотелось бы, без косяков ну не как!
Почему-то у меня измерения не линейные получаются(( В протеусе норм, а в железе хрена.
Без измерения тока погрешность
мой показометр / "Эталон"
14,9В 0,00А / 14,9В 0,00А
29,3В 0,00А / 28,7В 0,00А
в этом диапазоне уже разница 0,6В, а мне надо чтобы он до 50В мерил, думаю там погрешность будет страшная, к сожалению сейчас не могу 50В подать не откуда взять.
Ладно, теперь при измерении тока и напрежения:
мой показометр / "Эталон"
14,8В 0,21А / 14,8В 0,21А
13,8В 0,78А / 14,3В 0,69А
12,5В 1,54А / 13,5В 1,29А
10,8В 2,38А / 12,8В 1,89А
Вот такая вот фигня(( Помогите начинающему программисту. Вопрос один как добиться линейности, в чём мой косяк?
http://1drv.ms/1LSOB9Q - ссылка для скачивания исходника, проекта Proteus и фоток описанных выше измерений(архив VA).

Re: показометр U/I в Bascom-AVR

Добавлено: Сб окт 17, 2015 21:31:50
Мурик
По ссылке пустая страница.

Re: показометр U/I в Bascom-AVR

Добавлено: Сб окт 17, 2015 21:46:27
SolderC
Proteus, source code.zip
(29.44 КБ) 196 скачиваний


Извиняюсь, странно, пробовал с другого компа заходил вроде((

http://uploads.ru/?g=2FiwX.jpg фото

Re: показометр U/I в Bascom-AVR

Добавлено: Сб окт 17, 2015 22:46:17
Мурик
Почему в качестве ИОН использовано напряжение питания?

Re: показометр U/I в Bascom-AVR

Добавлено: Сб окт 17, 2015 22:55:03
SolderC
Пробовал внутренний на 2.56В те же яйца только в профиль.
Еще пробовал усреднять данные с АЦП то же не помогло.

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 00:24:32
просто КОТ
А что за эталон? Может он сам +/- лапоть сообщает?

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 10:06:19
Мурик
В коде уж слишком просто вычисляются напряжения и токи из данных АЦП. Возможно из-за этого погрешность.
Учтено ли напряжение питания, которое использовано в качестве ИОН? Какова его стабильность? Если отличается на пару милливольт от расчетного - будет погрешность.
Учтено что при 10-битном преобразовании, результат в диапазоне от 0 до 1023 (а не 0 - 1000, как некоторые думают)?
Правильно ли подобраны резисторы в делителе напряжения и насколько соответствует расчетному сопротивление шунта?

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 12:26:01
Adagumer
Мурик писал(а): Правильно ли подобраны резисторы в делителе напряжения и насколько соответствует расчетному сопротивление шунта?
Надо вывести на экран значение АЦП и провести замер какого либо
эталонного напряжения, а потом сравнить полученное значение с расчётным!

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 12:42:10
SolderC
просто КОТ писал(а):А что за эталон? Может он сам +/- лапоть сообщает?
Да :) он может, и лопочет, немного правда. Я его использовал просто для наглядности, чтобы в кадр влез :) , вся эта конструкция на фото которая "эталон" это моя самоделка - электронная нагрузка.
Хоть он и "лопочет", но суть всё-же показывает - нелинейность, замерял на GDM-8145 результаты схожи.
Мурик писал(а):В коде уж слишком просто вычисляются напряжения и токи из данных АЦП. Возможно из-за этого погрешность.
Учтено ли напряжение питания, которое использовано в качестве ИОН? Какова его стабильность? Если отличается на пару милливольт от расчетного - будет погрешность.
Просто не значит не правильно. Стабильность питания возможно и плавает на пару миливольт из-за нагрева, хотя вольтметр(GDM-8145) не показывает этого, но почему когда я использовал внутренний ИОН контроллера результат был тем-же? И ещё значение 14,8-15,2В прибор показывает точно с контрольным прибором, дальше идут расхождение как в сторону увеличения, так и в сторону уменьшения показаний, если бы виной был дрейф напряжения питания эти значения то же плавали бы, верно я рассуждаю?
Учтено что при 10-битном преобразовании, результат в диапазоне от 0 до 1023 (а не 0 - 1000, как некоторые думают)?
Да, учтено.
Правильно ли подобраны резисторы в делителе напряжения и насколько соответствует расчетному сопротивление шунта?
Шунт 0,1 ом, в качестве его резистор 3Вт с допуском 1%.
Но о нём позже, напомню что без нагрузки(измерение только напряжения) нелинейность не исчезает.

Хочу попробовать внешний ИОН на Aref повесить , как думаете TL431 с этой нелегкой задачей?

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 13:19:10
Мурик
SolderC писал(а):Хочу попробовать внешний ИОН на Aref повесить
ИМХО лишнее. Внутреннего для этой задачи достаточно.
На схеме есть несколько ОУ и возможно из-за них погрешность. Там переменников предостаточно. Все правильно настроено?
Хотя не понятно зачем нужны ОУ, если чувствительности АЦП должно хватить.

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 13:32:59
pavel1979
я тоже думаю что оу лишний,при 0,1 ом ток можно мерить без оу,и диоды зеннера смущают,я бы их выкинул
у меня попроще,измерение до 20,48 в и ток 2,048 ампер(там же частотомер нч),меряет норм

и avcc через дроссель бы к плюсу...

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 13:44:40
SolderC
Максимальный ток, который мне надо мерить 3А, с шунта это 0,3В и сразу на вход АЦП, при опоре в 5В шутите?
Да и операционник не при чём, если PC2 посадить на землю, то лучше не станет, это я ещё раньше опробовал.
atmega подделки бывают? мож у меня такая или брак?
Это в протеусе диоды такие в жизни обычные стабилитроны на 5,1В чтоб порты не подпалить

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 13:50:47
pavel1979
а если попробовать подать 0-2,56 в прямо на вход ацп меги и сравнивать с эталоном?
могут ли прерывания мешать измерению?(у меня прерывания мешали адекватному считыванию температуры с дс18б20,хотя в протеусе все было ок),в апноте AN #196 сначала отключаются таймеры,проводится измерение ацп,потом таймеры запускаются

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 13:58:12
SolderC
pavel1979, скажите, а вы за Uref что брали?
То же грешил на прерывания, потом написал прошиву вообще без них, прибор работает точно так же как и с прерываниями, если надо могу выложить прошивку без прерываний.

Нашел у себя TL431 замерил напругу - 2,495В, ну попробую на ней, а что ещё делать :dont_know:

Кстати инфу по расчётам брал от сюда http://radioparty.ru/prog-avr/program-c ... -voltmeter
мож там не правильно описано?

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 14:26:25
pavel1979
опорное 2,56 в

вот как у вас примерно http://avrproject.ru/publ/zadejstvuem_a ... r/1-1-0-13

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 14:31:30
Мурик
SolderC писал(а):Максимальный ток, который мне надо мерить 3А, с шунта это 0,3В и сразу на вход АЦП, при опоре в 5В шутите?
Поставить ОУ LM358 с коэффициентом усиления 10 и будет нормально. Множества перемеников не нужно. Достаточно жестко установить 10-ти кратное усиление.
SolderC писал(а):atmega подделки бывают? мож у меня такая или брак?
Попробуйте другую.
pavel1979 писал(а):в апноте AN #196 сначала отключаются таймеры,проводится измерение ацп,потом таймеры запускаются
Это для уменьшения шума. В данном случае, дело не в этом.
SolderC писал(а):Нашел у себя TL431 замерил напругу - 2,495В, ну попробую на ней, а что ещё делать
Чем это будет лучше внутреннего ИОН на 2.56В?

Скорее всего погрешность из-за неправильно рассчитанного коэффициента усиления ОУ.

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 14:49:01
SolderC

Код: Выделить всё

Поставить ОУ LM358 с коэффициентом усиления 10 и будет нормально. Множества перемеников не нужно. Достаточно жестко установить 10-ти кратное усиление.
На макетке и так LM358 и переменник в её обвязке один, это в протеусе заморочи у меня просто.
Чем это будет лучше внутреннего ИОН на 2.56В?
Читал на форумах, не хвалили внутренний ИОН mega8. Просто чтоб убедиться.
Скорее всего погрешность из-за неправильно рассчитанного коэффициента усиления ОУ
Возможно, при измерении тока и напряжения одновременно. Да. Но я сажал PC2(АЦП ампер) на землю, выкидывал ОУ из схемы вообще, а нелинейность оставалась. Взгляните на первое фото которые я выкладывал, где 28,7В, а у меня показывает 29,3В, амперы по нулям. Да и если бы коэфф ОУ был бы причиной, тогда бы только амперы плавали, а напряжение было бы в норме, АЦП ведь разные, ОУ только на PC2/

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 15:08:12
pavel1979
к сожалению не сохранился исходник от моего вольтамперметра,попробую перепаяю свой термометр http://img.radiokot.ru/files/89927/medium/r8ed9qrop.jpg и испытаю ваш исходник(там уже предусмотрены делители перед ацп-на будущее ставил),отпишусь о результате если надо

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 15:24:20
Мурик
Посмотрел еще раз исходник... По моему в нем неправильно преобразовывается данные АЦП в вольты. Не учитывается ни опорное напряжение, но то что максимум это 1023, а не 1000.

Попробуйте такой вариант.

Код: Выделить всё

Const Aref = 2.56                                 ' Напряжение ИОН.
Config Adc = Single , Prescaler = 128 , Reference = Internal ' Внутренний ИОН.
Dim x As Word
Dim y As Single

x = Getadc(0)                                   ' Опрос канала 0 АЦП.
y = Aref * x
y = y / 1024
y = y * 1000                                    ' Результат в милливольтах на входе АЦП.

Re: показометр U/I в Bascom-AVR

Добавлено: Вс окт 18, 2015 17:58:26
pavel1979
тоже странно-при входном напр 2,0 в показывает 1,98 в,при 5,0 в и до 20,0 в показывает ровно,общая ошибка не более 20 мв
делиталь ставил 10 ком и 91 ком
куски кода
Спойлер$regfile = "m8adef.dat" 'óêàçàòü íóæíûé
$crystal = 8000000 'óêàçàòü íóæíûé
$hwstack = 16
$swstack = 64
$framesize = 32
.................
For T = 1 To 64
Volt_1 = Getadc(0) 'îïðîñ ÀÖÏ 0
Volt_2 = Getadc(1)
Volt = Volt + Volt_2
Next T
Volt = Volt / 64
Volt = Volt_2 * 25.6
Volt = Volt / 1023
lcd Fusing(volt , "#.##")