Как получить входное напряжение из значения АЦП

Я использую atmega328p для своего проекта. Я должен прочитать напряжение батареи и отобразить его в своем облаке. Для этого я использую АЦП. Теперь я получаю значение АЦП для приложенного входного напряжения. Но мне нужно преобразовать АЦП в напряжение.

Когда я перехожу к таблице данных, я заметил следующее уравнениездесь

Итак, чтобы преобразовать АЦП, Vin=(ADC/1024)*Vref.

Но когда я искал в Google, я нашел другое уравнение, и оно

Vin=(ADC/1023)*Vref

Теперь я сомневаюсь, какое уравнение использовать?

Если мы используем 1024, значение АЦП будет 0001, когда входное напряжение равно напряжению 1LSB( Vref/1024).

Если мы используем 1023 (второе уравнение), значение АЦП будет 0000, когда входное напряжение равно напряжению 1LSB ( Vref/1024)

Ответы (3)

Сначала позвольте мне процитировать картинку, на которой уже есть ответ: «0x000 представляет аналоговую землю, а 0x3FF представляет выбранное опорное напряжение минус один младший бит». Это означало бы, что для представления опорного напряжения Vref потребуется на один LSB больше, чтобы результат был 0x400 или 1024. Таким образом, напряжение, равное Vref, просто не может быть представлено в качестве результата, это особый случай. Для всех других напряжений, которые по крайней мере на 0,5 шага ниже Vref (между 1022,5 и 1023,5), результат действителен.

У Atmel есть примечания по применению АЦП для AVR, в которых объясняется, как работает последовательный АЦП, и это не очевидно, но помогает понять, какой из них правильный. На AVRFreaks также есть много тем о том, какая из них верна. И вооружившись этой информацией, 1024 правильный и в таблице данных нет ошибки.

На самом деле, АЦП не идеальны, так как результаты могут иметь более 1 отсчета ошибки, и на самом деле не имеет большого значения, используется ли 1023 или 1024, поскольку в любом случае вам редко требуется точность 1 отсчета из 1024 в крайнем случае Vin = Vref. .

Итак, взятие 1023 даст ложное значение, верно?
Да. 1023 неправильно, потому что 1024 правильно. Но погрешность ниже 0,098%.
Каким будет значение АЦП, когда vref=5v и vin=4,375 для 3-битного АЦП? будет ли SAR ADC выдавать 110?

10-битный АЦП означает, что вы можете представить ввод как число от 0 до 1023, поэтому правильный ответ - использовать 1023, а не 1024. Похоже, в таблице данных есть ошибка, поскольку 0x3FF - это 1023, а не 1024.

Но они упомянули, что 0x3FFVref-1LSB voltage

когда мы рассматриваем n-битный АЦП. Он будет читать опорное напряжение как (2 ^ n - 1),

но когда мы говорим о шагах, это ((2 ^ n - 1) + 1 (а также подсчет нулевого значения))

пример: когда вы начинаете считать что-то с «нуля». если у вас есть общее количество, скажем, 81 ... но на самом деле это не 81, это будет 82 (включая 0 как одно значение)

так что в вашем случае вы говорите о 10-битном АЦП, поэтому ... максимальное опорное напряжение, которое он может прочитать, равно (2 ^ 10 - 1) = 1023.

но он имеет максимальные шаги 1023 + 1 = 1024

значит надо брать 1024..