Ревич, Ю.В. Программирование микроконтроллеров 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 и т. д.

RkJQdWJsaXNoZXIy MTExODQxMg==