Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 1 1 . Аналоговый компаратор и АЦП 293 диапазона изменения измеряемой величины придется лишь 1 00 градаций. А неизмен ную «подставку» , соответствующую величине 4 В , ниже которой исходная величина никогда не опускается , в процессе расчета физического значения всегда можно про сто прибавить, получив таким образом результат с наибольшим возможным разреше нием. Чаще всего эта величина постоянной «подставки» роли не играет - например, медный термометр сопротивления всегда имеет определенное значение сопротивле ния при минимальной температуре диапазона, и оно в общем случае не несет никакой информации . Однако для того , чтобы такую подгонку диапазонов осуществить , неред ко приходится идти на заметное усложнение предварительной аналоговой схемы, да и не всегда задача получения именно наивысшего разрешения стоит так уж остро. При мером может служить рассматриваемый далее датчик атмосферного давления, диа пазон которого в мм рт. ст. как раз примерно соответствует десятибитовой шкале, даже с некоторым запасом , поэтому вычитать «подставку» в 600 или 700 мм рт. ст. , ниже которой давление в той или иной местности не опускается , оказывается нецеле сообразно. На практике для борьбы со случайными флуктуациями результата измерений, ко торые, как показывает опыт, «вылезут» обязательно, невзирая ни на какие приня тые меры, можно применить еще один прием - усреднение нескольких измерений, и о нем мы также поговорим далее. У неопытных (а иногда и у опытных) пользователей часто возникают проблемы с пересчетом кодов АЦП в значения напряжения на входе . Проблема заключается в том, что шкала 1 О-разрядного АЦП по определению имеет 1 024 градации, а мак симальное значение кода, которое АЦП может выдать, равно 1 023 . Пользователь предполагает, что именно максимальный код 1 023 должен соответствовать величи не опорного напряжения (Игед, откуда ошибочно выводит, что цена одного разряда равна Иге�/ 1 023 . Если вы заглянете в «даташит» любого АVR, имеющего АЦП в своем составе, то найдете там формулу пересчета напряжения в код, которая в наших обозначениях выглядит так: ADC = ( Ивх · 1 024)/Цеf· Из нее вытекает правильная формула для цены разряда: Иге�/ 1 024. Как это совместить с тем фактом, что максимальный возможный код равен 1 023? А очень просто - максимальное измеряемое значение напряжения Иmах (соответствующее этому коду) будет не равно опорному, а на цену одного раз ряда меньшей: Иmах = И0п · 1 023/ 1 024 (в «даташите» это написано прямо: « . . .and Ox3FF represents the selected reference voltage minus one LSB»). Ситуация точно та кая же, как если бы мы с помощью только одноразрядных десятичных цифр попы тались бы разметить сантиметровую линейку: с помощью десяти цифр от О до 9 получается максимальная длина линейки в девять сантиметров, десятое деление будет одиннадцатым по счету, и для него требуется число за пределами диапазона. Но от того, что мы не можем его вывести, например, на одноразрядный десятичный индикатор, ничего не меняется : так, середина десятисантиметровой линейки все равно придется на деление номер 5 . И в нашем случае 1 О-разрядного кода середина измеряемого диапазона будет равна коду 5 1 2 (а не 5 1 1 и, боже упаси, не 1 0 2 3 / 2 = 5 1 1 , 5 ! ), который точно соответствует Иге�/2 . Приведем еще для лучшего за поминания аналогичные цифры для часто встречающегося случая 8-разрядного АЦП: цена деления Иге�/256, максимальное измеряемое напряжение Иге( 25 5/256, середина соответствует числу 1 28 (а не 1 27 ! ) . Для 1 6-битового АЦП (65 536 града ций) середина соответствует числу 32 768 и т. д.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==