Вы находитесь на странице: 1из 6

7/2.

Временные характеристики и "конструкция" одного цикла работы модуля


10-разрядного АЦП (или "как перерабатываются яблоки").

Прежде чем составлять программу, в которой задействуется модуль 10-разрядного


АЦП, нужно детально разобраться с временными характеристиками одного цикла его
работы.

На "планете" с названием "АЦП" существует два "царства – государства" с различными


"конституциями".
Они граничат друг с другом, но "цари" в них разные (а каков "царь", таковы и
"подданные").
Представьте себе следующий "маразм": в одном "царстве – государстве" выращиваются
яблоки.
И их там завались. Девать некуда. И переработать нечем.
В другом "царстве – государстве", яблоки вообще не растут (почва не та и т.д.), но
есть завод по их переработке.
Короче, при наличии отсутствия коллективизма, получается полнейший "Гитлер капут".
Слава Богу, что "цари" еще из ума не выжили. Скооперировались.
В одном "царстве – государстве" грузят фуру, она пересекает границу (на ней "махают"
флагом статуса. В зависимости от этого, "шлагбаум" открывается или закрывается), и
прямиком на завод.
А на заводе - "тьма тьмущая умных железяк", с помощью которых делаются всякие
полезные и вкусные соки.
Детишки этим очень довольны, да и взрослым есть чем заняться и на что семью
содержать.
Вот такая получается ода в честь коллективизма.
Шутки шутками, а в части касающейся АЦП, имеет место быть примерно то же самое.
Сначала нужно разобраться с "конституцией" первого "царства – государства" ("яблоки
всему голова").
"Царство – государство" №1.
В этом "царстве – государстве", такт не имеет сколь-либо серьезного значения по той
причине, что в данном месте "живут по аналоговой конституции".
Главная задача - успеть "аналогово перезарядиться".
Причем, время этого перезаряда "привязано" к тому, что к такту не имеет никакого
отношения.
Речь идет о Tacq - минимальном времени задержки, необходимой для заряда
конденсатора Hold.
Почему "заряда", а не "перезаряда"?
Потому, что перезаряд это "страшно недисциплинированный" процесс в том смысле,
что он может начаться с любого дозволенного уровня и в любую сторону.
Математически описывать (расчитывать) это "аналоговое безобразие" - удел людей,
имеющих больше одной извилины (на этом, кстати, делаются диссертации & медаль
на грудь).
Поэтому разработчики, ориентируясь на "простых смертных" (количество извилин = 1),
"выдали на гора" то, что попроще, то есть, "заформулизировали" заряд от нуля и
примерно до напряжения источника питания.
Потом приплюсовали к этому время задержки усилителя модуля АЦП (любой
усилитель инерционен) и температурную поправку.
Получился достаточно простой и "перпендикулярный" расчет.
Вот этот "шедевр":
Tacq = Tamp +Tc +Tcoff
Tamp - время задержки усилителя.
Tc - время заряда конденсатора Hold.
Tcoff - температурная поправка.

1. Время задержки усилителя Tamp можно считать фиксированным. Оно равно 2 мкс.

2. Время заряда конденсатора Hold Tc, в основном, определяется номиналом


выходного сопротивления источника аналогового сигнала (Rвых.).
1
Вся остальная "начинка" формулы вычисления значения этого параметра достаточно
"стабильна", и ее тоже можно считать фиксированной (в части касающейся "остальной
начинки", но не в части касающейся Rвых.).
"Привязка": при Rвых. источника аналогового сигнала = 10 Ком., время заряда
конденсатора Hold равно 16,47 мкс.
Как быть, если Rвых равно, например, 5 Ком.?
В этом случае, нужно сначала вычислить поправочный коэффициент:
К = 18/(8 + Rвых) = 18/(8 + 5) = 1,3846153
а затем разделить 16,47 мкс. на этот коэффициент.
Тогда время заряда конденсатора Hold будет равно:
Tc = 16,47 мкс./1,3846153 = 11,895 мкс.
То же самое можно проделать и с другими значениями Rвых.

3. Температурная поправка, при комнатной температуре (а если быть точным, то при


25 градусах), имеет нулевое значение.
В "общей массе" результата вычисления Tacq, в диапазоне температур от 15 до 30
градусов (это то, что наиболее жизненно) "масса" температурной поправки не
значительна.
Проще говоря, ее можно просто не учитывать.

С учетом сказанного, я составил таблицу, на которую можно ориентироваться при


определении минимального значения Tacq (для 25 градусов Цельсия):

Rвых (Ком) Поправочный коэффициент Tc (мкс) Tacq = Tc + 2 (мкс)


1 2 8,235 10,235
2 1,8 9,15 11,15
3 1,6363636 10,065 12,065
4 1,5 10,98 12,98
5 1,3846153 11,895 13,895
6 1,2857142 12,81 14,81
7 1,2 13,725 15,725
8 1,125 14,64 16,64
9 1,0588235 15,555 17,555
10 1 16,47 18,47

Обращаю Ваше внимание на то, что "вышележащие разглагольствования" относятся к


минимальному времени задержки, необходимой для заряда конденсатора Hold
(Tacq min).
По большому счету, педантично "привязываться" к тысячным, сотым и десятым долям
микросекунды, в большинстве случаев, не нужно.
Этот "титанический труд" слегка бесполезен в том смысле, что реальную задержку (ту,
которая будет "прописана" в тексте программы) нужно сделать большей чем
минимальная.
Проще говоря, к расчетному значению минимального Tacq нужно приплюсовать
"ефрейторский зазор" и округлить все это "безобразие" до микросекунды.
Проблема только в том, чтобы "не переборщить" с "массой" этого самого
"ефрейторского зазора", а то ведь можно такой "зазорище устроить", что "в него можно
будет провалиться и ноги переломать".
Проще всего умножить расчетное значение минимального Tacq на 1,5 (максимум – на 2)
и округлить то, что получилось, до микросекунды.
Это и будет то значение задержки, которое нужно будет программно обеспечить.

"Граница" между "царством – государством" №1 и "царством – государством" №2.


Если есть граница, значит есть таможня. Это железобетонно.
Роль таможенника исполняет бит статуса модуля АЦП.
В его руках находится такой мощный инструмент, как шлагбаум.
Фура с яблоками проедет через границу только тогда, когда таможенник откроет
шлагбаум.

2
График пропуска - железный: пока одна фура не разгрузится, следующая будет
торчать перед закрытым шлагбаумом.
Как только фура разгрузится (с завода об этом сообщат), так сразу же и милости
просим.
Взятки давать бесполезно, так как обязательно поймают (и таможенника, и водилу),
обесчестят, лишат всего и с работы выгонят (оба царя на расправу быстры).
После этого, только бомжевать можно.
Диктатура? Так точно. Но зато идеальный порядок.

"Царство – государство" №2.


А вот в этом "царстве – государстве", такт имеет огромное значение по той причине,
что имеет место быть "цифровая конституция".
Главная задача - преобразовать уровень напряжения выборки в 10-разрядное, двоичное
слово.
Прежде всего, нужно разобраться с Tad, то есть, с временем преобразования одного
бита (или временем формирования уровня одного бита результата АЦП).
В предыдущем подразделе, в ходе общих рассуждений, "родилась" такая фраза: "Его
назвали Tad, и его значение напрямую зависит от длительности периода тактового
сигнала (кратно ему)".
Теперь следует ответить на вопрос: "Длительности периода какого именно такта кратен
интервал времени Tad".
Этот интервал времени, в случае тактирования модуля АЦП сигналом,
вырабатываемым кварцевым генератором ПИКа, кратен интервалу времени периода
тактового генератора ПИКа (Tosc), и для PIC16F873A, может быть равным

2Tosc, 8Tosc или 32Tosc (см. настройки битов №№7,6 регистра AdCon0).

Примечание: в более "навороченных" ПИКах, например, в PIC18ххх, есть еще и 4Tosc,


16Tosc и 64Tosc (и управляющих битов не 2, а 3).
Имеется возможность тактирования модуля АЦП "своим" RC генератором (деления
частоты нет), но диапазон его применения ограничен:
- относительно низкой стабильностью его частоты,
- "разбросом" длительности периода (от 2 до 6 мкс., типовое значение 4 мкс.),
хотя, в некоторых случаях, его применение может оказаться оправданным.
Я буду ориентироваться на тактирование модуля АЦП от кварцевого генератора ПИКа.
Вопрос "в лоб": "Какова величина времени преобразования одного бита (Tad)"?
Ответ "в лоб": Tad = либо 2Tosc, либо 8Tosc, либо 32Tosc
Это зависит от "настройки" битов №№7,6 регистра AdCon0.
Примечание: в случае применения RC генератора модуля АЦП, Tad = времени периода
сигнала, вырабатываемого им.
Вопрос: "Какую именно из этих трех настроек применить"?
Ответ: прежде всего нужно "обратить свой взор" на номинал кварца кварцевого
генератора ПИКа.
Предположим "достаточно очевидное и вполне вероятное": Fosc = 4 Мгц.
Значит Tosc = 0,25 мкс.
1. Если Fosc разделить на 2 (настройка 00), то Tad получится равным 0,5 мкс., что
"выходит за границу" 1,6 мкс. ("Гитлер капут"). Такой вариант "сразу отпадает".
2. Если Fosc разделить на 8 (настройка 01), то Tad получится равным
0,25 х 8 = 2,0 мкс., что вполне приемлемо.
3. Если Fosc разделить на 32 (настройка 10), то Tad получится равным
0,25 х 32 = 8 мкс., что не приемлемо, так как это значение находится "на границе
дозволенного" (8 мкс.).
Таким образом, "рабочим" является вариант №2.
Примечание: в случае наличия "вилки" (многовариантности), нужно выбрать тот
вариант, который с Вашей точки зрения, более выгоден (можно "прогнать" варианты в
"железе"). Этот выбор носит субъективный характер.
Таким образом, в данном случае, нужно, в битах №№7,6 регистра AdCon0, выставить
комбинацию 01, что соответствует значению Tad = 1/4000000 х 8 = 2,0 мкс.
Вот и вся премудрость.
3
"График производственного процесса" (собираю все "до кучи").
Теперь, для "создания целостной картины переработки яблок", нужно "пройтись" по
всем этапам этого "производственного процесса".
Чтобы обеспечить наглядность и "прошибаемость", я "состряпал" вот такую картинку:

Как видите, речь будет идти о первом цикле аналого-цифрового преобразования (пока).
Его особенность состоит в том, что, на момент начала 1-й выборки, конденсатор Hold
практически полностью разряжен (наибольшая вероятность) или заряжен незначительно.
Всегда нужно ориентироваться на худшее.
А вдруг уровень 1-й выборки окажется близким к U источника питания?
Вывод: для обеспечения гарантированного заряда конденсатора Hold до напряжения
выборки (при любом "раскладе"), нужна задержка величиной Tacq (см. выше).
Напоминание: мы находимся на территории "царства – государства" №1.
Задержка Tacq должна начать формироваться сразу же после включения модуля АЦП
и выбора активного, аналогового канала.
Оба этих действия можно произвести "оптом", так как соответствующие биты "лежат" в
одном и том же управляющем регистре AdCon0.
При выборе активного, аналогового канала, конденсатор Hold подключается к входу
этого активного канала, после чего, в интервале времени задержки Tacq, он начнет
заряжаться (на первом цикле АЦП. На последующих циклах он будет перезаряжаться).
Если конденсатор Hold зарядился до уровня выборки, а задержка продолжается, то он,
до конца задержки, будет просто "отслеживать" текущий уровень выборки,
перезаряжаясь в узком диапазоне напряжений.
Предположим, что задержка закончилась.
Это соответствует подьезду фуры к шлагбауму.
Таможенник знает, что это первая фура, и тут же открывает шлагбаум, то есть,
поднимает флаг статуса.
Примечание: в данном случае, таможенник и программист это одно и то же.
Именно программист должен позаботиться о том, чтобы поднять флаг статуса сразу же
после отработки задержки Tacq.
Через 0,1 мкс. после поднятия флага статуса, происходит аппаратное отключение
конденсатора Hold от активного аналогового входа и его переключение на вход
устройства АЦП.
Примечание: граница пересечена и мы находимся на территории "царства –
государства" №2, где все "строго перпендикулярно" (как углы у импульса).
Короче, как у немцев (а царство – государство №1 чем-то на Россию смахивает).
А раз это так, то неумолимо начинаются "перпендикулярные" действия.
В их основу "заложен" интервал времени преобразования одного бита (Tad).
После "прохождения" "технологического" интервала времени, равного все тому же Tad
(на рис. 1 обозначено как Tad1), начинают последовательно формироваться уровни
битов слова результата АЦП, начиная с самого старшего двоичного разряда этого
слова (№9).
4
В данном случае (см. выше), Tad = 2,0 мкс.
Получается 11 интервалов Tad (22 мкс.).
Но при этом следует учесть, что между столь разными (по "конституции") "царствами –
государствами", существует "разнобой" в один Тad (на рис. 1 - без номера).
Его тоже можно считать "технологическим".
Поэтому, реально получается не 11 интервалов Tad, а 12 (24 мкс.).
Итак, через 12Tad (24 мкс.) преобразование завершается.
Основная миссия закончена.
"Продукт переработки осел" во внутреннем регистре результата модуля АЦП.
Теперь нужно озаботиться копированием результата АЦП, из внутреннего, "заводского"
регистра результата модуля АЦП, туда, откуда этот "продукт" можно будет "развести
по магазинам".
Проще говоря, нужно доставить "продукцию" на "склад" (или в "закрома").
А если еще проще, то в регистры AdresH и AdresL.
Плюс, нужно опустить флаг статуса (чтобы таможеннику было понятно, что следующую
фуру можно пропускать).
Плюс, нужно поднять флаг прерывания модуля АЦП, чтобы, если прерывания по
окончании АЦП разрешены, можно было "прерваться".
Все эти 3 дела делаются очень быстро, "оптом", и что самое главное, аппаратно
(мозги программиста отдыхают), за что разработчикам большое спасибо.
Мало того, и 4-е дело делается тоже аппаратно.
Но с задержкой в 2 интервала Tad (на рис. 1 обозначены как TadC1 и TadC2).
Их также можно считать "технологическими".
Это 4-е дело называется "подключение конденсатора Hold к активному, аналоговому
входу".
Если же быть педантичным, то речь идет об электронном переключении конденсатора
Hold с входа устройства АЦП на активный, аналоговый вход (аналог 2-позиционного
переключателя).
Таким образом, с учетом всех "технологических дел", фактическая длительность одного
преобразования составляет 14 интервалов времени Tad, то есть, в данном случае,
28 мкс.
После окончания формирования интервала времени TadC2, модуль АЦП готов к началу
следующего цикла АЦП.
Интервал времени исполнения одного цикла АЦП равен суммарной длительности
интервала времени выборки и интервала времени преобразования.
Интервал времени преобразования, в данном случае, равен 28 мкс.
Какова длительность интервала времени выборки?
Это зависит от номинала выходного сопротивления источника аналогового сигнала,
приведенного к входу активного канала АЦП.
А если выход источника аналогового сигнала подключается к активному входу канала
АЦП через делитель напряжения?
В этом случае, большое значение имеет номинал резистора нижнего плеча делителя.
В части касающейся упрощения расчетов, более выгодно применять делитель
напряжения с большим коэффициентом деления.
В этом случае, степень шунтирования резистора нижнего плеча делителя тем меньше,
чем больше Кдел. делителя напряжения.
Если это так, то выходным сопротивлением источника аналогового сигнала можно
считать ("грубо") номинал резистора нижнего плеча делителя напряжения.
Соответственно, можно задать нужный номинал этого резистора и использовать этот
номинал при расчете Tacq (в качестве Rвых источника аналогового сигнала).
Зная Кдел. делителя напряжения, по этому же номиналу, можно расчитать номинал
резистора верхнего плеча делителя напряжения.
Разработчики не рекомендуют "задирать" Rвых источника аналогового сигнала выше
10 Ком.
А так как "истина лежит посередине", то, в практической работе, на мой взгляд, нужно
ориентироваться на Rвых источника аналогового сигнала где-то "в районе" 5 Ком.
Тогда упрощенный расчет величины программной задержки и номиналов резисторов
делителя напряжения с Кдел.= 20, будет выглядеть так:

5
1. Расчет делителя с Кдел. = 20.
Задаем номинал Rн (резистор нижнего плеча) равным, например, 5,1 Ком.
Тогда номинал Rв (резистор верхнего плеча) = Rн(Кдел. – 1) = 5,1 Ком х 19 = 96,9 Ком.
Предположим, что Rвых. источника аналогового сигнала = 1 Ком.
В этом случае, Rн будет шунтироваться последовательной цепочкой резисторов с
суммарным сопротивлением = Rв + Rвых. = 96,9 + 1 = 97,9 Ком.
Параллельное соединение сопротивлений номиналами 5,1 Ком и 97,9 Ком эквивалентно
сопротивлению 5,1 х 97,9 / (5,1 + 97,9) = 499,29 / 103 = 4,847… Ком = (округляем) 4,8 Ком.
Итог:
- Rв = 96,9 Ком. (можно поставить 100 Ком.),
- Rн = 5,1 Ком.,
- Rвых. источника аналогового сигнала = 4,8 Ком.

2. Расчет значения программной задержки.


Из таблицы (см. выше) выбираем ближайшее (к 4,8 Ком.) значение Rвых.
Оно равно 5 Ком.
Значит, минимальное значение Tacq = 13,895 мкс.
Для обеспечения "ефрейторского зазора" умножаю на 1,5.
13,895 х 1,5 = 20,8425 мкс.
Округляю до 20 мкс. (а можно и до 21).
Это и есть время задержки, которую нужно программно обеспечить.

При таком "раскладе", и с учетом того, что время одного преобразования равно
28 мкс. (см. выше), время одного цикла АЦП = примерно 20 + 28 = 48 мкс.
"Примерно" потому, что окончание фиксированной задержки может в той или иной
степени накладываться на интервал времени, который, на рис. 1, обозначен как Tad
(черным цветом).
Максимальная погрешность такого расчета составляет один интервал Tad.
Если циклы АЦП будут следовать через эти промежутки времени, то частота
дискретизации Fд. = 1 / 48 мкс. = 20,833…Кгц. = примерно 20,8 Кгц., что позволяет
перевести в цифровую форму аналогвый сигнал (например, речевой) с верхней
частотой полосы частот = 20,8 / 2 = 10,4 Кгц.
Но реально, этот "скоростной потолок" будет ниже, так как, в большинстве случаев,
время перехода от одного цикла АЦП к другому будет более чем TadC1 + TadC2.
Суммарная задержка в TadC1 + TadC2, в большинстве случаев, обеспечивается
("перекрывается") за счет исполнения совершенно необходимых команд программы, и
ей можно "не забивать голову".
И в самом деле, скопировать содержимое AdresH и AdresL в регистры общего
назначения нужно?
Нужно.
А это 6 машинных циклов (AdresL "лежит" в 1-м банке).
Но "оглядка" на задержку TadC1 + TadC2 всегда быть должна, и особенно в случаях
применения кварцев с номиналами от 10 Мгц. и более (в этих случаях, интервал
времени отработки одного машинного цикла мал).
Кроме задач, решение которых связано с необходимостью обеспечения высоких
скоростей аналого-цифрового преобразования, существует масса задач, при решении
которых, высокой скорости аналого-цифрового преобразования не требуется.
Процедура АЦП (а она достаточно быстрая) может исполняться, например, в течение
одной двадцатой (а может быть и меньше. Пример "от балды") части интервала
времени полного цикла программы, а все остальное время "делаются дела" напрямую
не связанные с процедурой АЦП.
В таких случаях, сразу же после "загрузки" результата АЦП в регистры общего
назначения, по "энергоэкономным мотивам", выгодно отключить модуль АЦП на все то
время, пока он не нужен, а когда потребуется, - включить.

"Практикум по конструированию устройств на PIC контроллерах"      http://ikarab.narod.ru       E-mail: karabea@lipetsk.ru