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

Вообще-то 0.9(9) = 1 по определению значения бесконечной десятичной дроби, записываемой таким образом. R-2R ЦАП выдаст Uref - LSB.

Ну хорошо не 0.9(9) а 0,9999999 (кол-во 9-ок зависит от разрядности ЦАПа). А LSB это и есть 1-0,9999999.

 

 

 

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


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

Залезем внутрь АЦП.

Там есть ЦАП.

Вопрос.

111111 на входе цапа. Чему равно выходное напряжение?

Правильно. Опорному.

Агащас. В смысле - надо смотреть конкретный ЦАП.

Ближе всего нашлась эта картинка

http://en.wikipedia.org/wiki/R-2R#R-2R_res..._ladder_network

Но вот если на всех входах единички, то все входы резисторной матрицы будут подключены к Vref. И сколько будет на выходе?

ЦАП на коммутации токов (с необращённой матрицей R-2R) аналогчино себя будет вести.

ЦАП на коммутации зарядов C-C/2 вроде как в итоге то же самое.

Конечно, при настройке можно выгнать Uref_effective = Uref_input * 2N / (2N - 1) и тогда все единички дадут на выходе Uref

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


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

Ну понаписали, блин! Это ж сколько мне разбираться! :)

Всем спасибо! Пойду переваривать

 

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


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

В ту-же тему задачка: при оверсемлинге N-отсчетов суммируются и сдвигаются вправо на М. Например, если хотим получить 10 бит из восьми, то суммируем 16 отсчетов и сдвигаем вправо на 2. Если все отсчеты были равны 255, то результат будет 1020, а не 1023. И насколько делить в этом случае? :biggrin:

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


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

Нешуточно все это. И неубедительно совсем.

 

3 сторона.

 

8 разрядов -> 0...255 в десятичном представлении.

Попытка закодировать 8 разрядами произвольный (Vref, например) отрезок даст точность 1\255 этого отрезка. (Ибо от 0 до 255 всего дискретных 255 отрезков, а не 256).

 

Так что делители на степень N покушаются на основы бытия!

 

 

 

 

 

 

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


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

В ту-же тему задачка: при оверсемлинге N-отсчетов суммируются и сдвигаются вправо на М. Например, если хотим получить 10 бит из восьми, то суммируем 16 отсчетов и сдвигаем вправо на 2. Если все отсчеты были равны 255, то результат будет 1020, а не 1023. И насколько делить в этом случае? :biggrin:

 

А если так:  (1020*256/255) - 1 = 1023

Правда для остальных значений результат получается дробный

 

update. Да, понял что чушь сморозил)) Надо просто сначала прибавить единицу! 255+1=256, теперь 256*4 - 1 = 1023. Вот и все, получилось так сказать выравнивание по левому краю.

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


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

(Ибо от 0 до 255 всего дискретных 255 отрезков, а не 256).

Так что делители на степень N покушаются на основы бытия!

Нарисуйте в тетрадке в клетку кубики с номерами 0...15, а потом сосчитайте их количество.

Основы бытия вернутся на свое место.

 

И насколько делить в этом случае?

И в этом, и во всех других делите на 1024!

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


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

(Ибо от 0 до 255 всего дискретных 255 отрезков, а не 256).
От 0 до 255 лежит 255 отрезков, но они нумеруются от 0 до 254.

Номерами от 0 до 255 можно пронумеровать 256 отрезков.

Дальше вопрос, что и как делить на отрезки.

 

Можно поделить участок от 0 до Vref на 256 отрезков и все их перенумеровать. Тогда числу n Є 0..255 будет отвечать диапазон напряжений [ n * Vref/256, (n+1) * Vref/256 ), числу 255 отвечает отрезок [ Vref - Vref/256 , Vref ) .

U = Vref -- начало переполнения АЦП.

 

Можно поделить участок от 0 до Vref на 255 отрезков с номерами 0..254. Тогда «лишнему» числу 255 отвечает отрезок [ Vref , Vref + Vref/255 ) .

Переполнение АЦП наступает при напряжениях Vref + Vref/255 и выше. При напряжении, например, Vref + Vref/255/2 АЦП ещё далеко не перепонен, он правильно показывает номер отрезка.

 

Дальше вопрос, что и как имели ввиду разработчики конкретного АЦП, голосование на форуме не заменяет чтение документации.

Возможно, они решили код 255 использовать как признак переполнения, так как отдельного выхода переполнения нет. Счастья от этого прибавляется мало, разве что ещё и напряжению 0 присвоить код 1, чтобы код 0 использовать как признак выхода сигнала за диапазон опорных вниз.

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


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

Дальше вопрос, что и как имели ввиду разработчики конкретного АЦП, голосование на форуме не заменяет чтение документации.

Я на 50% уверен, что разработчики АЦП сами запутались в этом вопросе, когда писали в документации, что делить нужно не на степень двойки.

В принципе, ошибка небольшая. А процедура деления на 1023, например, отъест кучу ресурсов. Ну и нахера хоть кому-нибудь это нужно?

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


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

Гость @Ark

Если мне склероз не изменяет, то часовые кварцы тоже когда-то делали на 32767Гц. А потом перешли на 32768Гц.

Видимо у разработчиков мозги наконец встали на свое место. С разработчиками АЦП это тоже рано или поздно произойдет...

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


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

Ладно.

 

Берем Vref = 1 вольт. 8 разрядов.

 

Подаем на вход АЦП тоже 1 вольт.

 

Получаем код FF - верно? Верно.

 

255\256*1=0.996 вольта.

 

1 вольт не равно 0.996 вольта.

 

Но если попробовать делить на 255, то результат будет ВЕРНЫМ.

 

Мерси за внимание.

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


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

Но если попробовать делить на 255, то результат будет ВЕРНЫМ.

 

Попробуйте подать на вход 2 вольта.

 

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


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

Ладно.

Берем Vref = 1 вольт. 8 разрядов.

Подаем на вход АЦП тоже 1 вольт.

Получаем код FF - верно? Верно.

Если вы на тот же АЦП подадите напряжение от 0.996V до 1V, вы тоже получите код FF.

0.996V - это порог переключения. Ниже него будет код FE, а выше FF.

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


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

Вот этот, кстати, тоже.

Думал я, думал и вот что надумал. Исходя из предположения, что картинка, приведенная ViKo в посте №17 верна для некоторого АЦП.

Каждому коду с АЦП соответствует не точка напряжения, а интервал: код 00000 соответствует точке в интервале 0...1LSB, код 11111 - Vref-1LSB...Vref (и больше, но это сейчас не важно). Поскольку истинного положения точки в танном интервале мы не знаем, логично брать середину этого интервала.

Тогда для этого АЦП правилной будет такая формула:

 

U=(X+0.5)*Vref/2N

 

U - вх. напр.

Х - код с АЦП

N - разрядность

Формула легко проверяется подстановкой N=2 или N=1.

 

Теперь если 0.5 не прибавлять, а только делить на что-то. 2N или 2N-1? (пусть Vref=1)

 

ΔU256 = (X+0.5)/2N - X/2N = 0.5/2N

получили постоянную ошибку.

 

ΔU255 = (X+0.5)/2N - X/(2N-1) = 0.5/2N – X*(1/(2N-1) - 1/2N)

А здесь ошибка зависит от Х.

Х=0 -> ΔU=0.5/2N

Х=2N-1 -> ΔU= -0.5/2N

а в середине ΔU=0! (если про всякие нелинейности забыть)

 

Я решил: делть буду на 255 (для АЦП, которому годится та картинка(!!) )

 

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


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

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

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

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

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

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

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

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

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

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