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

 
 
12 страниц V  « < 5 6 7 8 9 > »   
Reply to this topicStart new topic
> AD7730 + датчик давления 26PCA, Возбуждение датчика давления напряжением 10В
sensor_ua
сообщение Sep 10 2008, 18:01
Сообщение #91


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



DS говорит
When the ADC is configured for bipolar operation, the output
code is offset binary, with a negative full-scale voltage resulting
in a code of 000...000, a zero differential input voltage resulting
in a code of 100...000, and a positive full-scale input voltage
resulting in a code of 111...111.
А далее берёте формулы из указанного раздела DS и считаете калькулятором.
ЗЫ. У меня такого АЦП нет и, тем более, определений величины шкалы


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 10 2008, 18:15
Сообщение #92


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(sensor_ua @ Sep 10 2008, 21:01) *
А далее берёте формулы из указанного раздела DS и считаете калькулятором.
Я же приводил расчеты по этой формуле. Я хочу разобраться, почему так происходит. Почему перед АЦП сигнал меняется в пределах +/-156мВ относительно +2.5 В?
Вопрос стоит так, - как меняется сигнал на выходе моста : +/-7.8 мВ или +/- 15.6 мВ ? Пока экспериментально получается второе... Хотя априори должно быть первое.
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 10 2008, 18:53
Сообщение #93


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Вы сначала четко определитесь - какой у Вас режим АЦП - униполярный или биполярный?А затем честно померяйт е сигнал на входе (не надо крутого осциллографа/вольтметра) АЦП и прикиньте какой должен бывть ожидаемый код. Эти данные можно попытаться соотнести с чтением регистров настроек АЦП


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 11 2008, 06:16
Сообщение #94


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(sensor_ua @ Sep 10 2008, 21:53) *
Вы сначала четко определитесь - какой у Вас режим АЦП - униполярный или биполярный?
Совершенно очевидно, что биполярный. Иначе и быть не может,- не отображалось бы отрицательные значения. В регистры АЦП пишется все правильно.

Цитата(sensor_ua @ Sep 10 2008, 21:53) *
А затем честно померяйте сигнал на входе (не надо крутого осциллографа/вольтметра) АЦП
Еще раз повторяю, напряжение на входе АЦП, померянное осциллографом и мультиметром составляет +/-156мВ.

Цитата(sensor_ua @ Sep 10 2008, 21:53) *
прикиньте какой должен бывть ожидаемый код.
Затем вывожу на ЖКИ значения в кодах АЦП и постепенно увеличивал GAIN_ADC до тех пор, пока размах сигнала на входе АЦП "вписывался" в диапазон 0x000000 ... 0xFFFFFF без искажения. Это получается при GAIN_ADC = 16. Что соответствует ADC Input range (2.5V Ref) +/-156mV при таком усилении.
Далее для проверки вывожу на ЖКИ это значение АЦП, пересчитанное в Вольты. Получается +/-31.2мВ.
Код
enum { AD7799_1_GAIN, AD7799_2_GAIN, AD7799_4_GAIN, AD7799_8_GAIN,
       AD7799_16_GAIN, AD7799_32_GAIN, AD7799_64_GAIN, AD7799_128_GAIN };

#define Vref          2.51        // 2.5 V
#define GAIN_IA       5.0         // Gain of Instrumental Amplifier 5
#define STEPS_U       16777216.0// Full-Scale 2^24 for unipolar operation
#define STEPS_B       8388608.0 // Full-Scale 2^(24-1) for bipolar operation

#define Vin(adc_value) (((adc_value)-(signed long)STEPS_B)*Vref/GAIN_IA/STEPS_B)

....................................................
// Maintain multiplexing of input channels
if(++mux > 2)  mux=0;

ad7799_write_config(1, 0, AD7799_16_GAIN, 1, 1, AD7799_AIN1_CHAN+mux); //burnout, bipolar, gain, ref_det, buf, chan  

.........................................................
Vin(ValueADC.data[0])/(1<<AD7799_16_GAIN);
Т.е. получается, что сигнал на выходе датчика меняется все-таки +/-31.2mV !!!
Или скажите, в чем я не прав.
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 11 2008, 07:36
Сообщение #95


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Возвращаясь к вопросу о заниженных в два раза показаниях моего прибора относительно другого.
Я считаю, что одно из двух: либо датчик расчитан на диапазон 2PSI (хотя таких не бывает), либо врет "поверенный" прибор smile.gif Я ошибки в расчетах не вижу.
Судите сами. Если значение Vin(ValueADC)/(1<<AD7799_16_GAIN) при максимальном давлении составляет 31.2мВ (это подтверждается выводом на ЖКИ), то при пересчете в дифференциальное давление (нижняя формула) получится 703 мм.вод.ст. , что я и наблюдаю при выводе на ЖКИ. Но при том же давлении другой "проверенный" прибор показывает в два раза больше!
Код
#define SPAN          (0.015687*2)      // Span (V) of Pressure Sensors = 1 psi
#define mm_Hg         51.714        // мм. рт. ст. (@ 0 гр. C)
#define mm_H2O        703.05        // мм вод. ст. (@ 0 гр. C)
#define sPRESSURE(ain_value) ((ain_value)/SPAN*mm_Hg)    // Статическое давление, мм. рт. ст.
#define dPRESSURE(ain_value) ((ain_value)/SPAN*mm_H2O)   // Дифференциальное давление, мм. вод. ст.
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 11 2008, 07:39
Сообщение #96


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Читаю и не понимаю. Что-то Вы путаете. Без привязки к конкретному типу АЦП если 24 бит, то максимальное беззнаковое 0xFFFFFF = 16777215. Делим 2.5В на 16 и получаем 2.5/16 = 1.5625E-1 (В)= 156.25 мВ. Это ВСЯ шкала и неоткуда ей становиться больше. Если плюс-минус, то половина шкалы туда, половина сюда - итого +/-78 мВ с копейками. Ваш усилитель имеет Ку = 5 и это относится к дифференциальному напряжению на его входе. Сигнал моста должен быть равен не более 156.25/5 = 3.125E+1 мВ, т.е. +/-1.5625E+1. Формула из DS, которую Вы вывернули в
Цитата
#define Vin(adc_value) (((adc_value)-(signed long)STEPS_B)*Vref/GAIN_IA/STEPS_B)

при коде равном 0xFFFFFF даёт 5 В, т.е. без оговорки о половине шкалы она не соответствует голому коду - она относится именно к положительной или отрицательной шкале. Т.е. если привести к математике без тех лишних оговорок, то получится
#define Vin(adc_value) (((adc_value)-(signed long)STEPS_B)*Vref/GAIN_IA/STEPS_U)


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 11 2008, 07:56
Сообщение #97


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(sensor_ua @ Sep 11 2008, 10:39) *
Формула из DS, которую Вы вывернули в ...
при коде равном 0xFFFFFF даёт 5 В
Вы не правы.
При значении 0xFFFFFF получается не 5, а 0.5 . А теперь с этого места идем дальше... И не подгоняйте результат под "сочиненную" формулу.

Стр.22 из даташита AD7799:
Код
with a 2.5 V reference, the unipolar ranges are
from (0 mV to 19.53 mV) to (0 V to 2.5 V), and the bipolar
ranges are from ±19.53 mV to ±2.5 V.


Формулы для расчета входного напряжения:
Код
DATA OUTPUT CODING
When the ADC is configured for unipolar operation, the output
code is natural (straight) binary with a zero differential input
voltage resulting in a code of 00...00, a midscale voltage resulting
in a code of 100...000, and a full-scale input voltage resulting in
a code of 111...111. The output code for any analog input voltage
can be represented as
Code = (2^N × AIN × GAIN)/VREF
When the ADC is configured for bipolar operation, the output
code is offset binary, with a negative full-scale voltage resulting
in a code of 000...000, a zero differential input voltage resulting
in a code of 100...000, and a positive full-scale input voltage
resulting in a code of 111...111. The output code for any analog
input voltage can be represented as
Code = 2^(N – 1) × [(AIN × GAIN/VREF) + 1]
where:
AIN is the analog input voltage.
N = 16 for the AD7798, and N = 24 for the AD7799.


Я разбил ход мыслей на тезисы:
1) АЦП настроен на биполярный режим.
2) Коэффициент усиления АЦП = 16, при этом нет искажения сигнала. Сигнал (в кодах АЦП) меняется почти от 0x000000 до 0xFFFFFF . В спокойном состоянии код равен почти 0x800000.
3) При этом напряжение на входе АЦП (после ИУ) меняется от +2.5В-156мВ до +2.5В+156мВ. Это подтверждается измерением тестером и осциллографом.
4) Значение АЦП по формуле для биполярного режима перевожу значение АЦП в напряжение в Вольтах с учетом коэффициента усиления ИУ = 5 по формуле
Код
#define Vref          2.51        // 2.5 V
#define GAIN_IA       5.0         // Gain of Instrumental Amplifier 5
#define STEPS_U       16777216.0  // Full-Scale 2^24 for unipolar operation
#define STEPS_B       8388608.0   // Full-Scale 2^(24-1) for bipolar operation

#define Vin(adc_value) (((adc_value)-(signed long)STEPS_B)*Vref/GAIN_IA/STEPS_B)  

Vin(ValueADC.data[0])/(1<<AD7799_16_GAIN)
и вывожу полученное значение на ЖКИ. Это значение на ЖКИ меняется от -31мВ до +31мВ. Т.е. при создании давления 1PSI = 703мм.вод.ст. сигнал меняется по модулю 31мВ в зависимости от направления давления.
5) Значение напряжения в Вольтах перевожу в мм.вод.ст. по формуле:
Код
#define SPAN          (0.015687*2)      // Span (V) of Pressure Sensors = 1 psi
#define mm_H2O        703.05        // мм вод. ст. (@ 0 гр. C)
#define dPRESSURE(ain_value) ((ain_value)/SPAN*mm_H2O)   // Динамическое давление, мм. вод. ст.

Это подтверждается выводом на ЖКИ - при создании максимального давления выводится по модулю значение 703 мм.вод.ст.
6) При создании давления аспиратором (компрессором) значения, например 300 (по моему прибору), другой "поверенный" прибор показывает в два раза больше, т.е. 600.

А теперь скажите, пожалуйста, в каком месте я не прав? sad.gif
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 11 2008, 09:30
Сообщение #98


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Вы не правы.
Похоже дважды не так
вот почему -GAIN_IA не там
#define GAIN 16
и тогда поправленная Ваша формула работает
Vin:=(((adc_value)-STEPS_B)*Vref/(GAIN*STEPS_B))
Только это относится ко входу АЦП
получается +/-156.2

Если считать как я предполагал, что шкала не менялась (при установке биполярного режима), то для двуполярного сигнала смещение в половину шкалы просто прибавляется (к формуле для униполярного режима)
Code:=(2^24*AIN*GAIN)/VREF+2^23
Соответственно имеем
Ain:=(Code-2^23)*VREF/(GAIN*2^24)
учитывая Ваши дефайны получаем
#define Vin(((adc_value)-STEPS_B)*Vref/(GAIN*STEPS_U))

либо шкала действительно в 2 раза больше и фсё соответствует формуле для биполярного режима
Если верить стр. 22, то так оно и есть - шкала для биполярного в 2 раза больше и формула в DS правильная
и получается Vin:=(((adc_value)-STEPS_B)*Vref/(GAIN*STEPS_B))

Цитата
Я считаю, что одно из двух: либо датчик расчитан на диапазон 2PSI (хотя таких не бывает), либо врет "поверенный" прибор smile.gif Я ошибки в расчетах не вижу.

А что c переключением питания моста? Может, вы складываете отсчёты и забываете поделить пополам?


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 11 2008, 11:25
Сообщение #99


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(sensor_ua @ Sep 11 2008, 12:30) *
Похоже дважды не так
Что не так? Я указал Вам на ошибку в расчетах (0.5 вместо 5).

Цитата(sensor_ua @ Sep 11 2008, 12:30) *
вот почему -GAIN_IA не там
#define GAIN 16
и тогда поправленная Ваша формула работает
Vin:=(((adc_value)-STEPS_B)*Vref/(GAIN*STEPS_B))
Только это относится ко входу АЦП
получается +/-156.2
Все верно. А теперь если разделить 156.2 на 5 (GAIN_IA), то получим прежние +/-31мВ.
И покажите мне разницу между вычислением Vin:
Код
#define Vin(adc_value) (((adc_value)-(signed long)STEPS_B)*Vref/GAIN_IA/STEPS_B)
с последующим делением на 16 (напомню, что AD7799_16_GAIN = 4):
Код
Vin(ValueADC.data[0])/(1<<AD7799_16_GAIN)
... и Вашим вариантом. Результат тот же.

Цитата(sensor_ua @ Sep 11 2008, 12:30) *
А что c переключением питания моста? Может, вы складываете отсчёты и забываете поделить пополам?
Питание я пока не переключаю. Хотя сейчас как-раз думаю над этим. Уже купил IR4428.

PS. Взял измеритель кровяного давления. ..

PS2. Сравнение с третьим манометром (кровяного давления) показало, что мои показания действительно занижены в два раза. Так в каком месте мне нужно поделить/умножить на 2 ?
Получается, как у Шарикова:"...взять все и поделить". smile.gif
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 11 2008, 11:38
Сообщение #100


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Цитата
Результат тот же.

Тот же, только дефайну Vin название другое дать надо было

Цитата
Что не так? Я указал Вам

да у меня не так - сначала тупо в формулу всё подставил и не посмотрел на GAIN_IA а потом посчитал неправильно, ну и с английским не сложилось без чтения 22-й страницыwink.gif


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 11 2008, 12:21
Сообщение #101


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Получается, мой прибор будет "правильно" показывать (по крайней мере показания будут совпадать с другим приборами. Хотя не исключено, что третий прибор тоже врет wink.gif) , если задать коэффициент усиления АЦП = 32, GAIN_IA=5, SPAN = 0.0156, mm_H2O=703. Но ведь при таком усилении будет ограничение сигнала в два раза !!! Это можно увидеть по значению кодов АЦП при создании давления.
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 11 2008, 12:38
Сообщение #102


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Если действительно отличается диапазон, то главное, чтобы Вы его могли оцифровать и оно максимально близко вписывалось в динамический диапазон АЦП. Масштабирование никто не отменял. Погрешность преобразования немного ухудшится, но а сколько надо? Ведь реальный сенсор если имеет основную погрешность, например, 0.1, то при таком неслабом питании чувствительность такая, что при изменении Ку в 2 раза ничего и не заметите - погрешности АЦП будут за 13-м битом шкалы сигнала


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 11 2008, 14:15
Сообщение #103


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Провел такой эксперимент. При таких условиях, как описано топиком выше, на ЖКИ вывожу значение АЦП для первого канала и значение динамического давления для второго канала АЦП в мм. вод. ст. Оба датчика отрицательными портами подключены к одной трубке. Включаю аспиратор, и плавно повышаю отрицательное давление. В итоге, все правильно получается: ноль давления - значение 0x800000, плавно повышаю давление до 703 мм.вод.ст. (значение на втором канале) - соответствует значению 0xFFFFFF.
Может мостовой датчик должен так работать: на половину своего диапазона? При усилении АЦП = 16 сигнал меняется почти от 0x800000 до 0xFFFFFF.

PS. Есть еще ряд вопросов.

1) Как правильно реализовать АРУ АЦП, чтобы максимально точно мерять в режиме малого сигнала..
2) Какие схемотехнические меры можно предпринять для снижения уровня помех по питанию. Пока все собрано на макетной плате с проводками. Осциллограф показал большой уровень шумов по питанию +10В и +5В. На мой взгляд, основной источник шумов вносит Step-Up преобразователь на MAX1523 (схему я выкладывал чуть выше). Улучшит ли ситуацию дроссель L2 600uH (или большего номинала) после преобразователя? Или наоборот, он будет работать как антенна. И увеличить емкости до 1000uF...4700uF. Плату я начал разводить, но нужно окончательно определиться со схемотехническими решениями.
Может стоит вместо Step-Up преобразователя использовать "Крону" +9В. Последовательно с источником +3В получится +12В, из которых формируется ИОНы +10В и +5В. Но мне кажется, - это изврат.
3) Как производить установку 0 датчика давления? Правильно ли сделал (см. схему)? Очень трудно добиться точной установки, на мой взгляд, из-за большого шума. Можно ли вместо подстроечного резистора применить цифровой потенциометр на 256 значений. Было бы удобно в режиме калибровки смещения нуля балансировать мост внешними цепями. А остаточное смещение убрать уже в АЦП системной калибровкой смещения нуля.

PS2. Если датчики подключены к одной трубке, то должны ли они показывать одинаковое давление? Или тот, который первый стоит будет показывать больше? У меня так и получается, причем чем выше давление, тем больше разница в показаниях датчиков.
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Sep 11 2008, 16:36
Сообщение #104


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

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Для начала нужно определиться что же Вы хотите получить и тогда выбирать меры. Если закладываться на начальную точность датчика (смещение и чувствительность/шкала), то нужно решить собираетесь ли Вы компенсировать и то и другое? А то смещение нуля Вы аж подстроечным резистором пытаетесь подстроить, а шкалу ищете. Мы не делаем датчиков без калибровок, и даже не пытались. Погрешность шкалы можно было бы подстроить, например, управляя питанием моста. Мы, имея на борту контроллер, всё делаем полсе оцифровки с помощью поправок различного рода.
Основная погрешность сенсора складывается из нескольких составляющих и часть из них опять же может быть математически скомпенсирована.
Кроме того при борьбе за малые погрешности выходного значения уже становттся важна, например, погрешность установки сенсора (угол наклона).
Итого - на одной оцифровке без калибровок побороть начальный разброс при приличных требованиях к точности, ИМХО, нереально. Да и другие погрешности Вас замучают.

Что касается вопросов, то
1) никакой АРУ, кроме как ЦАП по питанию (и то это было аж в одном экперименте) для компенсации некторых видов погрешностей, не делал и делать не собираюсь - динамического диапазона современных АЦП или хватает, или нужны такие стабильные сенсоры в таком узком диапазоне, что без усилителя и использования именно узкого диапазона не обойтись. (На всякий вспомните какие величины у гистерезиса, а он вырпажается в процентах от полной шкалы). А дальше - математика - фильтрация, масштабирование, линеаризация и всякие компенсации.
2) step-up можно подгрузить или выбрать другой способ преобразования, например, трансформатор с пушпульной накачкой и обычный выпрямитель, можно со стабилизатором. Например, раскачать NMP 78253 на каких-нибудь 128 кГц
3) см. выше - проще чуть опустить питание мосту, чтобы сигнал завсегда вписывался в шкалу и ещё и при любой адекватной величине смещения. Остальное отдать контроллеру. Ведь если уж собираетесь потенциометр цифровой ставить, то хранить настройки, управлять им - всё же надо (хотя конечно есть сейчас RDAC-и с nonvolatile памятью) и даже ручным управлением. Кроме того у ADI есть специальные усилители с кучей программируемых (пережиганием встроенных перемычек) параметров типа AD8556 - если уж сильно надо, то лучше так.
У нас ВСЕ датчики индивидуально калибруются, при этом электроника не меняется, а сенсоров применяется небольшой, но зоопарк, с разными чувствительностями и прочая


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
alux
сообщение Sep 12 2008, 05:01
Сообщение #105


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(sensor_ua @ Sep 11 2008, 19:36) *
А то смещение нуля Вы аж подстроечным резистором пытаетесь подстроить, а шкалу ищете.
А что не так с резистором? В подборке схем Cypress, которую Вы сами мне предложили, там реализован похожий механизм балансировки моста.
По поводу АРУ АЦП... Я имел в виду переключение коэффициента АЦП на больший, если сигнал слишком мал. Точнее наоборот, установить коэффициент усиления АЦП максимальным, а переключать на меньший, когда значение АЦП достигает значений 0x000000 ил 0xFFFFFF, т.е. поддерживать оптимальным для данного диапазона входного сигнала.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 21:39
Рейтинг@Mail.ru


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