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

 
 
> Калибровка AD7732, Калибровка АЦП
Leonmezon
сообщение Feb 11 2009, 08:34
Сообщение #1


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

Группа: Участник
Сообщений: 191
Регистрация: 11-02-09
Из: Краснодар
Пользователь №: 44 686



ДОбрый день.
Возникла необходимость (и соотвественно сложность) в калибровке АЦП AD7732.
Сейчас без калибровки получаю напряжение так (пример на 1 АЦП из 3 - все через цфировую логику подключены к Atmega640):
//Чтение регистра ADC Status
PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП
NOP();
SpiWriteByte(0x04+0x40);
reg=SpiReadByte();
// Выбор канала готовых данных (аппаратно RDY дает сигнал только о готовности данных,без указания канала
switch (reg)
{
case 0x01:
{
// Установка чтение 0 канала данных
//Устанавливаем регистр для чтения - выходные данные 24 бит - 3 байта
SpiWriteByte(0x08+0x40);
}
break;
case 0x04:
{
// Установка чтение 1 канала данных
//Устанавливаем регистр для чтения - выходные данные 24 бит - 3 байта
SpiWriteByte(0x0A+0x40);
}
break;
case 0x05:
{
// Установка чтение 0 канала данных
//Устанавливаем регистр для чтения - выходные данные 24 бит - 3 байта
SpiWriteByte(0x08+0x40);
}
break;
default: { return (0x00);}
}
//Чтение данных из регистра АЦП
// Читаем и заносим в буфер
SPDR = 0x00;
while (!(SPSR&0x80)); // ожидание готовности порта, прежде чем считывать
A=SPDR; //считать SPDR - 1 байт
SPDR = 0x00;
while (!(SPSR&0x80)); // ожидание готовности порта, прежде чем считывать
B=SPDR; //считать SPDR - 2 байт
SPDR = 0x00;
while (!(SPSR&0x80)); // ожидание готовности порта, прежде чем считывать
C=SPDR; //считать SPDR - 3 байт
// Закрываем АЦП
PORTF|=BIT(0); // CS1 установить в 1
// Получаем длиное целое из полученных байт
// с учетом что первым идет старший байт
rez=(C+(B<<8)+(A<<16));
// Далее преобразуем с типу double и Преобразуем к напряжению
U=(((double)(rez))*10)/0xFFFFFF; // Получаем напряжение от 0 до 10 В
// Отнимаем 5 В - для сдига в биполярный сигнал - получаем изменение напряжения от -5 до 5 В
U=U-5;
// Преобразуем в микровольты и возращаем результат
rez=(signed long)(U*1000000);
return (rez);

В целом работает не плохо, но возникла задача повысить точность установки нуля. Для этого удобно использовать внутреннею калибровку АЦП. А здесь возникает сложность: чития даташит не фига не понятно, а имеено: (привожу формулу из даташита для калибровки )

For bipolar ranges:
Data = ((ADC result – ADC ZS Cal. reg.) × ADC FS Reg./400000h + 800000h – Ch. ZS Cal. reg.) × Ch. FS Cal. reg./200000h
Where the ADC result is in the range of 0 to FFFFFFh.

Вопрос: как изменяется Data? (с учетом что ADC result может быть меньше ADC ZS Cal.reg.????) и как от нее перейти к напряжению, т.е. как после этой формулы получить для возращения микровольты?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Leonmezon
сообщение Jul 4 2009, 16:45
Сообщение #2


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

Группа: Участник
Сообщений: 191
Регистрация: 11-02-09
Из: Краснодар
Пользователь №: 44 686



Просьба подсказать как лучше будет (задании параметров для 3-АЦП происходит параллельно - так разведено): делать проверку на готовность калибровки или после выдачи задания на калибровку просто подождать (у меня время на всю калибровку 10 мин всегда от подачи питания, т.е. после на каждый вид калибровки могу потратить 3 мин - этого достаточно? И надо ли задать на каждый канал или можно задать одновременно оба (в даташите на стр.14 - в описании регистров есть две сноски - но не понятно как работать в режиме калибровки? также как и при задании общих параметров? ): примерно так написал для кварца 14МГц и если разница какие регистры надо с начало калибровать (в даташите последовательности калибровки явно не прописано).

void delay (void)
{
unsigned char a, b, c;
for(a=0; a<255; a++)
{
for(b=0; b<255; b++)
{
for(c=0; c<100; c++)
{
NOP();
}
}
}

void Calibrovka(void)
{
// Калибровка по Channel Full-Scale Cal, Mode Register=0b11100010=0xE2;
PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП
PORTF&=~BIT(1); // CS2 установить в 0 - выбор 2 АЦП
PORTF&=~BIT(2); // CS3 установить в 0 - выбор 3 АЦП
SpiWriteByte(0x38);// Установка регистра для 1 канала
SpiWriteByte(0xE2);
PORTF|=BIT(0); // CS1 установить в 1
PORTF|=BIT(1); // CS2 установить в 1
PORTF|=BIT(2); // CS3 установить в 1
delay(); // ждем пока идет калибровка
// Калибровка по ADC Zero-Scale Self-Calibration, Mode Register=0b10000010=0x82
PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП
PORTF&=~BIT(1); // CS2 установить в 0 - выбор 2 АЦП
PORTF&=~BIT(2); // CS3 установить в 0 - выбор 3 АЦП
SpiWriteByte(0x38);// Установка регистра для 1 канала
SpiWriteByte(0x82);
PORTF|=BIT(0); // CS1 установить в 1
PORTF|=BIT(1); // CS2 установить в 1
PORTF|=BIT(2); // CS3 установить в 1
delay(); // ждем пока идет калибровка
// Калибровка по Channel Zero-Scale System Calibration, Mode Register=0b11000010=0xC2
PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП
PORTF&=~BIT(1); // CS2 установить в 0 - выбор 2 АЦП
PORTF&=~BIT(2); // CS3 установить в 0 - выбор 3 АЦП
SpiWriteByte(0x38);// Установка регистра для 1 канала
SpiWriteByte(0xC2);
PORTF|=BIT(0); // CS1 установить в 1
PORTF|=BIT(1); // CS2 установить в 1
PORTF|=BIT(2); // CS3 установить в 1
delay(); // ждем пока идет калибровка
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Leonmezon   Калибровка AD7732   Feb 11 2009, 08:34
- - Tanya   Цитата(Leonmezon @ Feb 11 2009, 11:34) ДО...   Feb 11 2009, 08:57
|- - DS   Цитата(Tanya @ Feb 11 2009, 11:57) Вам ни...   Feb 11 2009, 09:42
|- - Leonmezon   Цитата(Tanya @ Feb 11 2009, 11:57) Вам ни...   May 20 2009, 19:13
|- - Tanya   Цитата(Leonmezon @ May 20 2009, 23:13) Ес...   May 20 2009, 19:44
|- - Leonmezon   Цитата(Tanya @ May 20 2009, 22:44) Я Вас ...   May 21 2009, 08:29
|- - DS   Цитата(Leonmezon @ May 21 2009, 12:29) Ил...   May 21 2009, 11:07
|- - Leonmezon   Просьба подсказать: необходима ли развязка между А...   May 29 2009, 20:03
|- - DS   Цитата(Leonmezon @ May 30 2009, 00:03) Пр...   May 31 2009, 09:13
|- - Leonmezon   Цитата(DS @ May 31 2009, 13:13) Развязка ...   May 31 2009, 17:01
- - DS   Усреднять результаты можно. Теорему Вы не правильн...   Jun 1 2009, 14:58
|- - Leonmezon   Цитата(DS @ Jun 1 2009, 18:58) Усреднять ...   Jun 1 2009, 15:30
|- - DS   Цитата(Leonmezon @ Jun 1 2009, 19:30) До ...   Jun 1 2009, 15:50
|- - Leonmezon   Цитата(DS @ Jun 1 2009, 19:50) Такой филь...   Jun 2 2009, 19:41
|- - DS   Цитата(Leonmezon @ Jun 2 2009, 23:41) Для...   Jun 3 2009, 20:41
|- - Leonmezon   Цитата(DS @ Jun 4 2009, 00:41) Я не писал...   Jun 4 2009, 12:01
- - DS   14 Мгц кварц - не ошибка ? Максимально, что допуст...   Jul 6 2009, 09:37
|- - Leonmezon   Цитата(DS @ Jul 6 2009, 13:37) 14 Мгц ква...   Jul 6 2009, 14:33
|- - Tanya   Цитата(Leonmezon @ Jul 6 2009, 18:33) Пр ...   Jul 6 2009, 15:23
|- - Leonmezon   Цитата(Tanya @ Jul 6 2009, 19:23) Так не ...   Jul 6 2009, 15:33
|- - DS   Цитата(Leonmezon @ Jul 6 2009, 19:33) Вых...   Jul 6 2009, 19:33
|- - Leonmezon   Цитата(DS @ Jul 6 2009, 23:33) Программну...   Jul 6 2009, 19:48
|- - DS   Цитата(Leonmezon @ Jul 6 2009, 23:48) Воп...   Jul 6 2009, 20:35
|- - Leonmezon   Цитата(DS @ Jul 7 2009, 00:35) Вы серьезн...   Jul 6 2009, 20:51
|- - DS   Цитата(Leonmezon @ Jul 7 2009, 00:51) Не ...   Jul 7 2009, 05:45
|- - Leonmezon   Цитата(DS @ Jul 7 2009, 09:45) У них част...   Jul 7 2009, 14:59
|- - Tanya   Цитата(Leonmezon @ Jul 7 2009, 18:59) Что...   Jul 7 2009, 16:01
|- - Leonmezon   Цитата(Tanya @ Jul 7 2009, 20:01) Могу то...   Jul 7 2009, 16:24
|- - Tanya   Цитата(Leonmezon @ Jul 7 2009, 20:24) Поп...   Jul 7 2009, 16:33
|- - Leonmezon   Цитата(Tanya @ Jul 7 2009, 20:33) Кто бы ...   Jul 7 2009, 16:40
|- - Tanya   Цитата(Leonmezon @ Jul 7 2009, 20:40) Да ...   Jul 7 2009, 16:55
|- - DS   Цитата(Leonmezon @ Jul 7 2009, 20:40) Да ...   Jul 7 2009, 18:02
|- - Leonmezon   Цитата(DS @ Jul 7 2009, 22:02) На всех АЦ...   Jul 7 2009, 18:23
|- - DS   Цитата(Leonmezon @ Jul 7 2009, 22:23) С н...   Jul 7 2009, 18:30
|- - Leonmezon   Цитата(DS @ Jul 7 2009, 22:30) У Вас полу...   Jul 8 2009, 14:13
|- - DS   Цитата(Leonmezon @ Jul 8 2009, 18:13) Из ...   Jul 9 2009, 09:41
- - Rockstein   Спасибо за подробное объяснение калибровки, я тоже...   Sep 9 2009, 22:00
|- - DS   А питание как ? Земля ? 1/1000 от значения уже вес...   Sep 10 2009, 15:06
|- - Rockstein   Цитата(DS @ Sep 10 2009, 19:06) А питание...   Sep 10 2009, 19:07
|- - dos622   Цитата(Rockstein @ Sep 10 2009, 23:07) ди...   Sep 11 2009, 11:36
|- - Rockstein   Цитата(dos622 @ Sep 11 2009, 15:36) Как п...   Sep 11 2009, 11:44
|- - dos622   Цитата(Rockstein @ Sep 11 2009, 15:44) По...   Sep 11 2009, 12:09
- - DS   Может быть корявый фронт, который с небольшой веро...   Sep 11 2009, 07:06
|- - Rockstein   Цитата(DS @ Sep 11 2009, 10:06) Может быт...   Sep 11 2009, 10:38
|- - DS   Цитата(Rockstein @ Sep 11 2009, 14:38) Ещ...   Sep 11 2009, 12:10
||- - Rockstein   Цитата(DS @ Sep 11 2009, 16:10) Вообще-то...   Sep 11 2009, 12:23
|- - Tanya   Цитата(Rockstein @ Sep 11 2009, 14:38) Ещ...   Sep 11 2009, 13:18
|- - Rockstein   Цитата(Tanya @ Sep 11 2009, 16:18) Через ...   Sep 11 2009, 14:26
- - Rockstein   УРА!!!! Поздравте меня. Все-таки э...   Sep 11 2009, 20:56
|- - DS   Цитата(Rockstein @ Sep 12 2009, 00:56) УР...   Sep 12 2009, 15:18
|- - Tanya   Цитата(DS @ Sep 12 2009, 19:18) Для этого...   Sep 12 2009, 15:30
|- - Rockstein   Цитата(DS @ Sep 12 2009, 18:18) ACT для т...   Sep 13 2009, 21:43
- - DS   Ну я даже и не знаю как такое откомментировать. Ст...   Sep 14 2009, 12:50
|- - Rockstein   Цитата(DS @ Sep 14 2009, 15:50) Ну я даже...   Sep 14 2009, 19:56
|- - Rockstein   Цитата(DS @ Sep 14 2009, 15:50) Ну я даже...   Sep 14 2009, 21:52
|- - dos622   Цитата(Rockstein @ Sep 15 2009, 01:52) Да...   Sep 15 2009, 09:41
|- - DS   Цитата(Rockstein @ Sep 15 2009, 01:52) Да...   Sep 15 2009, 10:58
|- - Rockstein   Цитата(DS @ Sep 15 2009, 14:58) Нет, глуп...   Sep 15 2009, 11:47
|- - DS   Цитата(Rockstein @ Sep 15 2009, 15:47) А ...   Sep 15 2009, 11:51
|- - Rockstein   Цитата(DS @ Sep 15 2009, 14:51) Не обязат...   Sep 15 2009, 20:55
|- - DS   Цитата(Rockstein @ Sep 16 2009, 00:55) Сп...   Sep 15 2009, 21:13
|- - Rockstein   Цитата(DS @ Sep 16 2009, 01:13) Я надеюсь...   Sep 16 2009, 22:15
- - Herz   Цитата(Rockstein @ Sep 14 2009, 21:56) Се...   Sep 15 2009, 10:26
- - dos622   Цитата(Herz @ Sep 15 2009, 14:26) А зачем...   Sep 15 2009, 10:42


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

 


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


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