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

 
 
> AVR и дифф сигналы, как правильно измерить?
ivainc1789
сообщение Oct 24 2007, 13:50
Сообщение #1


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

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



Собрал простую схемку и измерил мультиметром VC9808+ разность ADC4-ADC3=-7mV. Далее попробовал измерить разность напряжений делителей двумя способами: измерить сигналы как single ended и differential с внутренним усилителем с Ку=1. Первый способ стабильно дает правильный результат в 7 милливольт (по модулю). А со вторым проблемы, АЦП возвращает чаще всего 0x3FF, что "в переводе с биполярного режима" равно -1. Получить -7 никак не удается даже произведя 10 измерений и взяв среднее. Где может быть ошибка?

Прикрепленное изображение


Код
unsigned int AdcResult;

__C_task void main (void) {
  unsigned char i;
  unsigned long AdcSumma=0;
  unsigned int tmp1;  
  ADCSRA = BIN(10010110); // 125kHz,Fosc=8MHz
  ADCSRB = BIN(10000000); // bipolar mode
  DIDR0 = BIN(11111111);  // digital inputs disable
  DIDR1 = BIN(11110000);  
  ADMUX = BIN(10010011);  // (ADC4-ADC3)*1
  Delay(500*ms);// wait for ADC stable
  for(i=0;i<10;i++){// get 10 conversions
    SETBIT(ADCSRA,ADSC);while(CHKBIT(ADCSRA,ADSC));
    AdcSumma += ADC;
  }
  AdcResult = AdcSumma/10;
  
  while(1);
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
=GM=
сообщение Oct 25 2007, 10:41
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(ivainc1789 @ Oct 24 2007, 12:50) *
Собрал простую схемку и измерил мультиметром VC9808+ разность ADC4-ADC3=-7mV. Далее попробовал измерить разность напряжений делителей двумя способами: измерить сигналы как single ended и differential с внутренним усилителем с Ку=1. Первый способ стабильно дает правильный результат в 7 милливольт (по модулю). А со вторым проблемы, АЦП возвращает чаще всего 0x3FF, что "в переводе с биполярного режима" равно -1. Получить -7 никак не удается даже произведя 10 измерений и взяв среднее. Где может быть ошибка?

Разрешение в Bipolar Differential Conversion уменьшается в два раза, так что вы должны получить -3, а не -7.

Ошибка у вас в том, что тип AdcSumma беззнаковая переменная, а результат из регистра ADC вы читаете, как знаковый. Сделайте AdcSumma знаковой и будет вам щастье.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Oct 25 2007, 16:17
Сообщение #3


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

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



Цитата(=GM= @ Oct 25 2007, 14:41) *
Разрешение в Bipolar Differential Conversion уменьшается в два раза, так что вы должны получить -3, а не -7.


Затупил smile.gif ... А я все думаю, почему в макете все дифф измерения ровно в два раза меньше чем ожидается. Большое спасибо, что нашли время ответить.
Вот только с ошибкой усилителя есть вопрос (ADC возвращает ADCe == +3 для (ADC3-ADC3)*20). Правильно ли будет ее вычесть из результата так: Result = 2*((ADC4-ADC3)*20 - ADCe)?
Да, в коде ошибка, спасибо... Осознал!
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 25 2007, 22:46
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(ivainc1789 @ Oct 25 2007, 16:17) *
Затупил smile.gif ... А я все думаю, почему в макете все дифф измерения ровно в два раза меньше чем ожидается. Большое спасибо, что нашли время ответить.
Вот только с ошибкой усилителя есть вопрос (ADC возвращает ADCe == +3 для (ADC3-ADC3)*20). Правильно ли будет ее вычесть из результата так: Result = 2*((ADC4-ADC3)*20 - ADCe)?
Да, в коде ошибка, спасибо... Осознал!

Ну, если считать, что смещение линейно, то Result = 2*(ADC4-ADC3) - ADCe/10.0


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
ivainc1789
сообщение Oct 26 2007, 05:57
Сообщение #5


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

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



Цитата(=GM= @ Oct 26 2007, 02:46) *
Ну, если считать, что смещение линейно, то Result = 2*(ADC4-ADC3) - ADCe/10.0


Разве не так: 2*((ADC4-ADC3) - ADCe)/10.0
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ivainc1789   AVR и дифф сигналы   Oct 24 2007, 13:50
- - ReAl   Надо оцифровать разность при подключении к одному ...   Oct 24 2007, 14:11
|- - ivainc1789   Цитата(ReAl @ Oct 24 2007, 18:11) Надо оц...   Oct 24 2007, 14:36
|- - =GM=   Цитата(ivainc1789 @ Oct 26 2007, 04:57) Р...   Oct 26 2007, 09:29
- - ivainc1789   Код модифицировал так: Кодsigned int AdcResult; __...   Oct 26 2007, 21:25
|- - ReAl   Цитата(ivainc1789 @ Oct 26 2007, 23:25) A...   Oct 27 2007, 08:03
|- - =GM=   Цитата(ivainc1789 @ Oct 26 2007, 21:25) К...   Oct 27 2007, 14:04
|- - ivainc1789   Цитата(=GM= @ Oct 27 2007, 18:04) Операто...   Oct 27 2007, 17:16
|- - =GM=   Цитата(ivainc1789 @ Oct 27 2007, 17:16) С...   Oct 27 2007, 18:46
- - ivainc1789   Так сказать, ура! Действительно, нужно было ме...   Oct 27 2007, 23:56
- - =GM=   Цитата(ivainc1789 @ Oct 27 2007, 23:56) А...   Oct 28 2007, 20:10
- - ivainc1789   Цитата(=GM= @ Oct 28 2007, 23:10) А в общ...   Oct 28 2007, 20:23
- - =GM=   Цитата(ivainc1789 @ Oct 28 2007, 20:23) Я...   Oct 29 2007, 11:54


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 12:23
Рейтинг@Mail.ru


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