21.01.2014, 11:57
|
#1
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Вопрос по AD7794 (усиление, уровень VREF)
Что-то не понимаю я, как с этим АЦП работать: не получается менять коэффициент усиления + непонятно, как переводить получаемые единицы в напряжение.
Для повышения точности измерения я хочу повторить статью Henry He "Minimizing errors in multiplexed 3-wire RTD Data-aquisition systems". Для начала я подсоединил IOUT1 к AIN1+, IOUT2 к AIN1-, между ними воткнул переменный резистор на 47к, в качестве Rref воткнул резистор на 15к, соединил VIN1- с REFIN1+.
1) Коэффициент усиления изменяю записью регистра:
Код:
|
int change_AD7794_gain(uint8_t gain){
if(gain › 7) return 0;
ADC_gain = gain;
uint16_t Conf = read_AD7794_conf();
check_err();
Conf &= ~GAIN_MASK; // clear gain bits
Conf |= (GAIN_MASK & ADC_gain); // update gain
sendWord(CONF_REGISTER, Conf);
check_err();
return 1;
} |
а после этого сразу делаю внутреннюю калибровку:
Код:
|
uint8_t AD7794_calibration(uint8_t channel){
DBG("AD7794 calibration\n");
if(ADC_gain == 7){
DBG("gain = 7, can't calibrate!\n");
return 0;
}
if(!AD7794_set_channel(channel)) return 0;
sendWord(MODE_REGISTER,
INT_FS_CAL ); // make a full-scale calibration
check_err();
Delay(1);
DBG("READY!\n");
return 1;
} |
однако, какой бы коэффициент усиления я не выставлял, получаемые данные не меняются.
2) Еще странная вещь: я, конечно, понимаю, что на макетке у меня все шуметь будет, но оно реально шумит так, что по сути только ~7 старших бит являются значимыми!
Где бы вменяемо почитать, как с этим АЦП работать, а то в даташите только описания регистров и элементарщина (непосредственное измерение напряжения) в примере?
3) В даташите на AD7794 написано, что в используемом мною "униполярном" режиме выдаваемый код есть (N = 24):
CODE = (2^N * AIN * GAIN) / VREF
т.е. напряжение на входе есть
AIN = VREF * CODE / (2^N * GAIN).
Как узнать уровень VREF, когда я задаю опорный ток с АЦП, а не опорное напряжение? Сопротивление резистора RREF априори считаем неизвестным и варьируемым. Т.е. перед каждым преобразованием кода в число необходимо узнать, чему равно VREF.
Как это сделать?
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
21.01.2014, 12:09
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Вопрос по AD7794 (усиление, уровень VREF)
UPD: с коэффициентом усиления у меня самого проблема в коде была:
Код:
|
Conf |= (GAIN_MASK & ADC_gain); |
надо заменить на
Код:
|
Conf |= ADC_gain ‹‹ 8; |
Но опять какая-то чушь получается. И данные скачут туда-сюда.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
21.01.2014, 12:12
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: Вопрос по AD7794 (усиление, уровень VREF)
У меня вроде была пара устройств с этим чипом. Завтра постараюсь ответить
|
|
|
|
21.01.2014, 12:22
|
#4
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Вопрос по AD7794 (усиление, уровень VREF)
Gnider, да мне бы руководство вменяемое. Возможно, после смены коэффициента усиления, нужно не только калибровку сделать, а еще что-то. А в даташите хрен что написали!
Ну, а с VREF вообще непонятно: где ж я возьму резистор с точностью ~6E-6%? Их же в природе тупо не существует! Да и температурные флуктуации явно сопротивление RREF будут сильней менять.
Сейчас глянул внимательней статью Генри Хе: блин, он действительно на RREF рассчитывал!
Я в шоке! Ну и нафига тогда 24 бита, если в самом лучшем случае у нас будет ~10 бит значащих?
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
21.01.2014, 12:34
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Вопрос по AD7794 (усиление, уровень VREF)
Хорошие резисторы шумят и имеют ткс порядка десятков ппм, а неточность сопротивления можно компенсировать программно
У этого чипа если не ошибаюсь нужно соблюдать тайминги при записи. См даташит
|
|
|
|
21.01.2014, 18:13
|
#6
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Вопрос по AD7794 (усиление, уровень VREF)
Ничего не понимаю: скорость преобразования уменьшил до минимума. Меняю коэффициент усиления - значения вроде как меняются (но меняются совершенно странно!). Однако, уровень шума все равно очень большой: шумит чуть ли не половина разрядов АЦП!
Вот пример измерений для одного и того же сопротивления (G - коэффициент усиления).
1) опорный ток 1мА
G1 0x0002acc9, 0x0002ac3b, 0x0002ac83, 0x0002acb5, 0x0002ac8d
G2 0x000558fd, 0x0005584f, 0x000558f5, 0x00055903, 0x0005584f
G4 0x0000135d, 0x00003123, 0x00004135, 0x0000223b, 0x00001ba3
G8 0x0000af8, 0x0000f6c1, 0x00004925, 0x000032db, 0x0000aa95
2) опорный ток 210мА
G1 0x000375a3, 0x000374f7, 0x00037559, 0x000374f5, 0x00037571
G2 0x0006e80f, 0x0006e78f, 0x0006e7af, 0x0006e7c1, 0x0006e7c9
G4 0x0000236f, 0x00002c07, 0x00004ef9, 0x000047ad, 0x00004ccb
G8 0x000076bd, 0x0000a455, 0x00009d99, 0x00008665, 0x0000b1b5
G16 0x0000e11d, 0x0000e041, 0x0000efc5, 0x0000d677
3) опорный ток 10мА
G1 0x0009b6dd, 0x0009b4ab, 0x0009b9ad, 0x0009b33f
G2 0x0013a23b, 0x00139abf, 0x00139cff, 0x00139b37
G4 0x002771f5, 0x002774f5, 0x0027709d, 0x00276ce3
G8 0x004e57f5, 0x004f1c49, 0x004f183b, 0x004f1f35
G16 0x009e7ec9, 0x009e7ddd, 0x009e58a3, 0x009e6423
Похоже, что Rref у меня таки не согласован по сопротивлению, поэтому для разных опорных токов получаются разные значения. Может ли такое быть, если Rref › 1к (в моем случае - 47к)?
При росте коэффициента усиления (в последнем случае) шумы тоже растут. Может, это действительно вина макетки? Или опять косяк в коде?
На всякий случай сделал коммит и обновил тарбол для тех, у кого не установлен mercurial.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
21.01.2014, 18:36
|
#7
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Вопрос по AD7794 (усиление, уровень VREF)
Сообщение от eddy
|
Rref › 1к (в моем случае - 47к)
|
Не, ну, сами посудите: ток 1мА протекает по Rref = 47кОм, какое при этом будет на опорном резисторе падение напряжения? Причём рабочее напряжение для источника опорного тока не более AVdd-0.65В, а то и меньше.
Единственно рабочий ток в данном случае - это 10мкА. Даже 210мкА слишком много.
|
|
|
|
21.01.2014, 19:49
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Вопрос по AD7794 (усиление, уровень VREF)
Сообщение от Yurkin2014
|
какое при этом будет на опорном резисторе падение напряжения?
|
Ой, дурная моя башка! Что-то я про закон Ома и не вспомнил... Позор на мою седую голову!
Буду завтра сразу пробовать с TRD (1кОм) и резистор Rref поставлю килоомный. Тогда точно можно будет спокойно 1мА загонять.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.01.2014, 12:02
|
#9
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Вопрос по AD7794 (усиление, уровень VREF)
Итак, поставил Rref = 1.5k и проверил на 100-омном TRD и 150-омном постоянном резисторе. Пока что делал простые измерения без переключения опорных токов. Коэффициенты усиления: от 1 до 16 (т.к. через Rref течет двойной опорный ток, предел сопротивления измеряемого резистора == 2Rref).
С TRD было тяжело, т.к. для постоянства значений нужен термостат. Но примерные результаты такие: относительная погрешность измерений порядка 1E-4, в среднем около 12 значащих разрядов (из 24).
С постоянным резистором попроще: ошибка около 1E-5, 15-16 значащих разрядов. Как ни странно, с ростом коэффициента усиления ошибка росла очень медленно.
Однако, при изменении коэффициента усиления, несмотря на калибровку, нуль таки дрейфовал: вычисленные для разных Gain значения сопротивления составили: 155.96, 155.83, 156.21, 156.32 и 156.23 Ом. Т.о., получилось, что по результатам всех измерений R = 156.1 ± 0.2 Ом и относительная погрешность уже составляет аж 0.13%!!! Что-то я явно не так делаю, раз такая дрянь получается!
Ну, еще проверю метод Генри Хе. Правда, сомневаюсь, что он даст результаты лучше: все равно слабым звеном остается Rref (проверил, как меняются его показания при нагревании рукой: "холодный" показывал R=156.3 Ом, нагретый показал R=156.9 Ом!), из-за его нестабильности реальное разрешение АЦП составляет ~8 разрядов — отсюда и вылезает упомянутая выше погрешность в 0.1%! При нагреве самого резистора показания падают со 156.3 Ом до 155.9 Ом.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
22.01.2014, 18:11
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Вопрос по AD7794 (усиление, уровень VREF)
Написал заметку в ЖЖ по результатам сегодняшних опытов.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:28.
|
|