Перейти к содержанию
    

Влияние каналов АЦП друг на друга?

а еще попробуйте померить осциллографом, что реально на входах ацп, а то может он совсем не причем.

и не путайте время выборки (sample time, hold time) со временем преобразования (convertion time), с авр не работал, у мсп430, пик, стм32 и стм8 эти вещи задаются раздельно. ну и увеличить паузу, как советовали выше, тоже может помочь.

если другие шоттки не помогли, BAS70 не помогут тоже, можете не искать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Осциллографом глядел миллион раз. Когда нагрузки нет - на ADC2 идеально ровная полоса 2.5в.

 

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

Теперь при полном отсутствии сигнала и по напряжению и по току показывает 0.1в и 0.4-0.5в соответственно.

 

Я иссяк :( . Пошёл менять АЦП на MCP3202....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как-то натыкался на взаимовлияние каналов. Лечилось или полным отказом от sleep-режима или холостым преобразованием при переключении канала. Последнее как по мне проще всего делать выключением АЦП в начале прерывания, а затем включением при запуске. Тогда АЦП делает полный цикл в 25 тактов, что эквивалентно первому выброшенному.

Что-то типа такого:

 

#define ADCSRA_ON     (1 << ADEN)|(1 << ADIF)|(1 << ADIE)|(1<<ADSC)|(1<<ADPS1)    
#define ADCSRA_OFF     (1 << ADIF)    // выключение АЦП    

__interrupt void ADC_INT (void)
{
  unsigned int adc = ADC;            // Считываем значение
//.....
  ADCSRA = ADCSRA_OFF;                //полное отключение АЦП
//.....
  {
//.....
    ADMUX = MUX_12V_IN;
//.....
  }

//.....
    ADCSRA=ADCSRA_ON;
    return;
};

 

 

// 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. Я её не менял.

Зря не меняли. Она оставляет работать АЦП после преобразования и при этом не стирает бит флага прерывания при запуске нового преобразования.

Откуда уверенность, что это:

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

ловит результат этого преобразования, а не предыдущего - уже готового на момент входа в процедуру???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Осциллографом глядел миллион раз. Когда нагрузки нет - на ADC2 идеально ровная полоса 2.5в.

Ровная... не ровная...

Что на ADC2 относительно ADC0 ?

Что именно выдает АЦП? (не в вольтах)

Какая опора, все таки, AVCC или AREF?

Если AREF, то какое там напряжение?

И вообще, схема подключения? А то "все стандартно", в моем понимании - это использование внутренней опоры с кондесатором на AREF.

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

Теперь при полном отсутствии сигнала и по напряжению и по току показывает 0.1в и 0.4-0.5в соответственно.

Т.е. после программных изменений "влияние каналов друг на друга" стало еще больше" ???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сначала не обратил внимание но когда присмотрелся то увидел что Вы измеряете сигнал через 100к резистор. Если это так то АЦП и будет плясать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сначала не обратил внимание но когда присмотрелся то увидел что Вы измеряете сигнал через 100к резистор. Если это так то АЦП и будет плясать.

Ну он уже написал, что эти резисторы убрал.

Мне больше неясно, почему напряжение средней точки меряется на входе ОУ, а не на выходе.

назначение резистора в 1М мне тоже непонятно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

назначение резистора в 1М мне тоже непонятно.

 

Это я притягивал вход АЦП к земле. Думал, там какие-то наводки в отсутствии сигнала. Видел такое решение с промышленно выпускаемых приборах. Не помогло оно ...

Резисторов в 100кил на входах уже нет. Одни диоды остались.

 

Опора - AREF=VCC=5в со стабилизатора. Кондёр, там как в ДШ есть. Только дросселя нету.

 

Остальное, думаю до вечера проверю, отпишусь.

Изменено пользователем hd44780

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы будете смеятся ,но в одном из приборов взаимовлияние устранил увеличением частоты преобразования.Т.е. был делитель 1/128 после смены на 1/32 всё заработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не по делу, так как все что мог придумть уже посоветовали.

Какой трансформатор используете в качестве датчика напряжения (T3)? Решаю похожую задачу.

Описываемые вами эфекты встречал, но все они лечились двойным опросом, причем запускаем первое преобразование сразу после переключения канала.

Как предположение - возможно компилятор "оптимизировал" это дейтсвие в вашем случае?

Изменено пользователем SAWushka

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой трансформатор используете в качестве датчика напряжения (T3)?

 

Обычный, как в БП. Использовал сперва 2 транса (один на питание, 2-й для измерения), потом купил какую-то китайчатину с 2-мя независимыми вторичками. На нём написано T08339A. 2 вторички по 15в.

Никакой разницы не заметил. Только R2 подкрутил, чтобы синусоида была в границах где-то 0.5-4.5в и всё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот изобразил текущую схему.

 

Может уже оффтоп в данной теме.

 

Выдернул из колодки контроллер и снял осциллограмму на ADC2 oтносительно ADC0 - рис 1. Рис 2 - просто увеличенный кусок.

Вольтметр AC показывает 0.03-0.04в. При подключении T3 становится 0.06-0.07в.

Откуда лезут эти 50 Гц, не могу понять...

Питание смотрел, оно чистое.

 

Осциллограф - цифровой UNI-T UT-81B. Всё ничего, но в программе, на скриншотах размерности по осям хрен знает какие ...

post-7980-1317309291_thumb.png

post-7980-1317309297_thumb.png

post-7980-1317311068_thumb.png

Изменено пользователем hd44780

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всё работает.

Сделал 50 нс ожидания после переключения канала и 3 холостых выборки. АЦП без прерываний, по опросу. Пока нормально.

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...