реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Влияние каналов АЦП друг на друга?, ATMega16
hd44780
сообщение Sep 25 2011, 06:47
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Собирается прибор для одновременного измерения сетевого напряжения и тока.
Входные каскады - схема. БП на LM7805, МК (ATMega16, 8 MHz), LCD типа HD4478, кнопки, светодиодики не рисовал, там всё стандартно.

ОУ DA2.1 - средняя точка 2.5в, регулируется R3.
Входы ADC1, 2 АЦП опрашиваются 20 раз за период 50 Гц (в обработчике таймера, 1 мс):

// Замер напряжения - ADC1
adc = read_adc(ADC_U);
// убираем смещение
adcU=adc-adcUsm;

// Квадрат
adcSqr=adcU;
adcSqr*=adcU;

// Сумма квадратов напряжения
summUsqr+=adcSqr;

....................................

Для тока (ADC2) абсолютно также, переменные другие. Все расчёты здесь - 100% целочисленные, никакой плавающей точки.
АЦП работает без прерываний, по опросам:

// ADC initialization
// ADC Clock frequency: 1000,000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: None
ADMUX=0x00;
ADCSRA=0x83; // 0x10000011 - Enable, CLK/8=1MHz
.......................

// Read the AD conversion result
word read_adc(byte adc_input)
{
ADMUX=adc_input;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);

// Start the AD conversion (ADSC)
ADCSRA|=0x40;

// Wait for the AD conversion to complete (ADIF)
while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10;

// Обнуляем мл. бит
return ADCW&0xFFFE;
} // read_adc

Функция read_adc сгенерирована генератором кода CvAVR. Я её не менял.
Напряжение средней точки (ADC0) - adcUsm - замеряется в начале каждого цикла замеров. Каждый цикл - 0.5 сек - 10 периодов 50 Гц.
ADC2 - канал измерения большого тока (>4A) контроллером пока не обрабатывается.

Далее идут пересчёты в напряжение сети и ток.

Начал отлаживать. Канал напряжения (ADC1) откалибровал, работает. Показывает почти также, как и мультиметры. Для нашего брата сойдёт biggrin.gif .

Приступил к току (ADC2). Вот тут начались странности.
Когда напряжение подано, а нагрузки нет, тока нагрузки нет, на выходе ТТ - чистый 0, а прибор показывает на входе АЦП - 0.01-0.02в (округлённо - %.2f). Вопроса пересчёта напряжения на АЦП в амперы я здесь не касаюсь.
Облазил весь код - ничего, всё нормально.

Потом случайно отключил обмотку измерения напряжения T3 (подключена через разъёмчик), остался только R2, запаянный в плату. И, о, чудо - увидел 0в на обоих входах АЦП 08.gif .
После целенаправленных разборок в этом направлении увидел, что напряжение на ADC1 как-то влияет на ADC2.

Вопрос - можно ли как-то избавиться от этого влияния и как? Может я чего не учёл? Или взять модификацию ATMega16A? Слышал, что у них аналоговая часть сделана более грамотно.
Ставить внешний АЦП? У меня есть микрочиповский MCP3202. Где гарантия, что и у него нету подобных эффектов?

PS. Пошарив по интернету, нашёл ещё пару жалоб на такой же эффект в ATMega8, но решений так и нету. Где-то предлагали реже опрашивать АЦП, но мне это не выход, т.к. идеально вообще - ток и напряжение замерять строго одновременно.

Спасибо.

Сообщение отредактировал hd44780 - Sep 25 2011, 06:50
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
Клим
сообщение Sep 25 2011, 08:05
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541



Цитата(hd44780 @ Sep 25 2011, 09:47) *
а прибор показывает на входе АЦП - 0.01-0.02в

ADC2 относительно ADC0 ?
Попробуйте закоротить тогда ADC2 и ADC0 И посмотреть, что выйдет. Может дело и вовсе не в контроллере.

Также, рекомендую использовать режим непрерывного измерения с переключением каналов в прерывании от АЦП.

Атмел рекомендует не использовать первый результат измерения сразу после переключения канала, но это касается дифф-режимов.
И вообще, по поводу измерения сетевых параметров будет весьма полезен аппнот 465
Go to the top of the page
 
+Quote Post
hd44780
сообщение Sep 25 2011, 08:15
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Дифф режим не использую, смещение вычитается программно:

// Замер напряжения - ADC1
adc = read_adc(ADC_U);
// убираем смещение (ADC0)
adcU=adc-adcUsm;

МК в DIP40, там дифф. режим пользовать не рекоомендуют.

Аппнот этот я знаю.

Сообщение отредактировал hd44780 - Sep 25 2011, 08:31


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
hd44780
сообщение Sep 25 2011, 09:38
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(Клим @ Sep 25 2011, 11:05) *
Попробуйте закоротить тогда ADC2 и ADC0 И посмотреть, что выйдет. Может дело и вовсе не в контроллере.


А что это даст? Ведь резистор R9 для этого и поставил...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
-SANYCH-
сообщение Sep 25 2011, 10:45
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 6-12-05
Пользователь №: 11 864



Цитата
Вопрос - можно ли как-то избавиться от этого влияния и как?


Нужно уменьшить частоту выборки АЦП и этот эффект пропадет. Делал похожее устройство и тоже столкнулся с таким эффектом.
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Sep 25 2011, 11:23
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Цитата(hd44780 @ Sep 25 2011, 09:47) *
(ATMega16, 8 MHz)
Входы ADC1, 2 АЦП опрашиваются 20 раз за период 50 Гц (в обработчике таймера, 1 мс):
// ADC initialization
// ADC Clock frequency: 1000,000 kHz
ADCSRA=0x83; // 0x10000011 - Enable, CLK/8=1MHz

А зачем такая большая частота синхронизации АЦП ?
(если частота выборок всего лишь 1(4) кГц)
Цитата
By default, the successive approximation circuitry requires an input clock frequency between 50
kHz and 200 kHz to get maximum resolution
. If a lower resolution than 10 bits is needed, the
input clock frequency to the ADC can be higher than 200 kHz to get a higher sample rate.

-----------------------------------------------------------------------------------------------------------------
На Мега64 использовал 4 входных канала никакого влияния не заметил, работает хорошо.

А вот диф.режим выдаёт странные результаты - воспользоваться им так и не смог.

Сообщение отредактировал Юрий_СВ - Sep 25 2011, 11:56
Go to the top of the page
 
+Quote Post
hd44780
сообщение Sep 25 2011, 13:14
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Поставил частоту синхронизации 125 кГц и добавил 2 холостых выборки:

read_adc(ADC_U);
read_adc(ADC_U);
adc = read_adc(ADC_U);

......................................................
read_adc(ADC_I_LO);
read_adc(ADC_I_LO);
adc = read_adc(ADC_I_LO);

отличий не заметил.

Сейчас буду переделывать весь алгоритм замеров, чтобы АЦП по прерываниям работал...

Сообщение отредактировал hd44780 - Sep 25 2011, 13:15


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
dac
сообщение Sep 25 2011, 13:24
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482



имхо косяк в отрицательном напряжении на входе. многие многоканальные ацп этим грешат. поставьте последовательно резистор и диоды как на ADC2. только желательно шоттки типа BAS70, с токами утечки поменьше.
и еще 100кОм слишком большое сопротивление последовательно со входом, в этом случае время выборки больше надо делать, что бы конденсатор УВХ успевал зарядиться.
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Sep 25 2011, 14:23
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Цитата(dac @ Sep 25 2011, 16:24) *
100кОм слишком большое сопротивление последовательно со входом, в этом случае время выборки больше надо делать, что бы конденсатор УВХ успевал зарядиться.


В описании сказано так:
"The ADC is optimized for analog signals with an output impedance of approximately 10 kΩ or less."



ADC0 логичнее подключить к выходу повторителя - иначе будете мерять смещение.
И на входах АЦП лучше поставить ёмкости. (чтобы получить RC)
Go to the top of the page
 
+Quote Post
Клим
сообщение Sep 25 2011, 15:54
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 230
Регистрация: 7-04-08
Из: Украина, Запорожье
Пользователь №: 36 541



Цитата(hd44780 @ Sep 25 2011, 12:38) *
А что это даст? Ведь резистор R9 для этого и поставил...

Имел в виду вообще оторвать вывод от входных измерительных цепей, чтобы удостоверится, что "наводка" именно внутри мультиплексора АЦП.
насчет частоты выборок - было озвучено 20 на период = 10 на полуволну - это уже довольно мало. Для линейной нагрузкт еще можно так упрощать, но любой импульснный БП вам испортит всю точность измерений на 20-30%.
и, кстати о цифрах. Если у вас "средняя точка 2,5В", то я так понимаю, опора = напряжение питания ?? если так то это +1 источник проблем. Во-вторых, при таких раскладах, 10-20мв это 1-2 разряда АЦП - а это в пределах погрешностей.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Sep 26 2011, 06:14
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



BAS70-04 в прайсе нашёл, доберусь до магазина, куплю. Они заразы, SMD, у меня макетка DIP crying.gif . Придётся изголяться ...
Пока на канал ADC2 поставил шоттки SR110, были под руками. На ADC3 оставил те, что указаны на схеме. Там некритично.
Резисторы R7, R8 пока вообще убрал. Для экспериментов.
Изменений не увидел.

Насчёт частоты выборки не понял sad.gif .
-SANYCH- советует её понизить, для снижения эффекта взаимовлияния каналов, Клим советует увеличить для улучшения точности.
Я помню, раньше, ещё где-то в мае, пытался поднять частоту выборок за период раз в 10 кажется - 200 на период. Вообще фигня была - все показания "дрожали" - очень быстро менялись вблизи каких-то центральных значений. Усреднять тогда не стал, понизил частоту выборок.
Чую, дело пахнет заменой АЦП ...


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение Sep 26 2011, 09:46
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134



Цитата(hd44780 @ Sep 26 2011, 10:14) *
Насчёт частоты выборки не понял sad.gif .
-SANYCH- советует её понизить, для снижения эффекта взаимовлияния каналов, Клим советует увеличить для улучшения точности.
Я помню, раньше, ещё где-то в мае, пытался поднять частоту выборок за период раз в 10 кажется - 200 на период. Вообще фигня была - все показания "дрожали" - очень быстро менялись вблизи каких-то центральных значений. Усреднять тогда не стал, понизил частоту выборок.
Чую, дело пахнет заменой АЦП ...

Необходимо увеличить паузу между переключением каналов о измерением. Пока устаканится напряжение на УВХ(устройство выборки хранения). При большой разнице напряжений каналов конденсатор УВХ не успевает перезарядиться.
Для повышения точности необходимо повышать частоту выборок. Это и есть противоречие не решаемое на одном внутреннем АЦП.
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Sep 26 2011, 09:47
Сообщение #13


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Известная проблема sm.gif Я делаю так:
- делитель тактирования АЦП ставите на 128, таким образом время преобразования будет 104 мкс
- завожу таймер на 200 мкс, АЦП настраивается на запуск от таймера, таким образом практически устраняется влияние каналов друг на друга, еще как вариант можно пропускать первое измерение в канале, но это обычно для режима Free running.


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
Navovvol
сообщение Sep 26 2011, 11:01
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 105
Регистрация: 9-09-11
Пользователь №: 67 080



Я как то словил интересный баг на быстром переключении каналов АЦП, а именно : на ADC0 подал 1,7В, на ADC1 - 1B. Так сначала выдавало: ADC0-1.7В ADC1-1.7B, потом ADC0-1B, ADC1-1,7B, т.е. сигналы поменялись местами.
Go to the top of the page
 
+Quote Post
Юрий_СВ
сообщение Sep 26 2011, 11:20
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 73
Регистрация: 4-05-08
Пользователь №: 37 272



Попробуйте увеличить задержку в word read_adc(byte adc_input) раз в 5 (н-р, с 10 до 50).
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 08:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016