Инструменты пользователя

Инструменты сайта


doc:mk:1886be:timeadc

Измерение времени преобразования АЦП в МК 1886ВЕ61У

Программа для МК 1886ВЕ61У TimeADC, позволяющая измерить время преобразования, приведена в архиве, вместе с таблицей Excel, необходимой для расчётов.

Модуль АЦП может работать в спящем режиме микроконтроллера (SLEEP), при этом в качестве источника тактовых импульсов для АЦП должен быть выбран внутренний RC генератор. В случае выбора другого источника тактирования, АЦП при переходе в режим SLEEP прервёт преобразование и выключится.

Частота внутреннего RC генератора не обладает высокой точностью и зависит от температуры, напряжения питания, технологического разброса и прочих факторов. Поэтому в общем случае время преобразование, зависящее от частоты RC генератора, должно измеряться при определённых условиях для каждого МК отдельно. Согласно спецификации, для достоверного аналогово-цифрового преобразования источник импульсов должен иметь период (TAD) не менее 1,6 мкс и не более 8 мкс. Встроенный RC генератор обеспечивает выполнение этого условия, однако точный период не нормируется.

Методика измерения времени преобразования, а соответственно и периода тактирования внутреннего RC генератора, приведена ниже. Для измерения понадобится отладочная плата на МК 1886ВЕ61У, программатор и осциллограф. Программа приведена в архиве выше. Здесь будет рассмотрен только основной цикл выполнения преобразования.

Методика измерения времени преобразования АЦП

1. Подключить программатор к плате и загрузить программу TimeADC в МК с помощью среды разработки IDE1886.

2. Отключить программатор, подключить питание к плате, подключить осциллограф к выводу PD2 и запустить выполнение программы.

3. Измерить длительность одного импульса.

4. Внести полученные значения в таблицу Excel, получить время преобразования АЦП, период (TAD) и частоту тактирования RC генератора.

Описание методики измерения

Для определения времени преобразования модуля АЦП в программе зациклена последовательность одного преобразования и небольшой задержки, необходимой для подключения конденсатора к каналу АЦП. На время каждого преобразования подаётся логическая 1 на вывод PD2. Длительность этого импульса можно легко измерить с помощью осциллографа.

Листинг цикла преобразований АЦП:

MEANDR:                      
            MOVLW       19H         ; задержка 25 циклов для подключения ёмкости
            MOVWF       Period            
Delay:      DECFSZ      Period,1    ; вычитаем 1 и если результат равен 0 пропускаем след операцию
            GOTO        Delay
            
;*******************************************************************************               
           
            BSF	PORTD,2	; включение порта PORTD, 2=1
            
            MOVLB       06H          ; переход в банк 6
            
            BSF         ADCON0,2     ; старт преобразования

WD:         BTFSC       ADCON0,2     ; ждем окончания отцифровки, пока бит 2 не станет равен нулю                                              
            GOTO        WD
 
            MOVLB	Bank1								
            BCF	PORTD,2	             ; выключение порта PORTD,2=0
	
            GOTO MEANDR

Изображение, полученное с осциллографа во время выполнения программы:

Длительность импульса на выводе PD2 состоит из трёх времён: времени преобразования (tпреобр), времени на выполнение дополнительных инструкций (tинстр) и время задержки на команду SLEEP (tзадерж). Общее измеренное время импульса:

tимп=tпреобр + tинстр + tзадерж

Задержка до начала следующего преобразования (tdelay) должна быть не менее 2*TAD. Максимальное время TAD = 8 мкс, следовательно, время задержки должно быть не менее 16 мкс. Выполнения одной итерации в цикле Delay занимает 3 цикла процессора (1 цикл команда DECFSZ и 2 цикла команда GOTO). Выполнения 1 цикла процессора занимает 4 такта. Следовательно, выполнение 1 итерации в цикле Delay займёт 12 тактов. На отладочной плате установлен резонатор на 16 МГц, период составляет 62.5 нс. Для задержки в 16 мкс необходимо:

Количество итераций = 16/(3*4*0.0625) = 22

Мы возьмём с запасом 25 итераций, что составляет 18,75 мкс.

Время на выполнение инструкций (tинстр), включенное в общее время измерения импульса, можно также рассчитать. После появления на выводе PD2 логической единицы и до начала преобразования, выполняются инструкции:

MOVLB       06H          ; переход в банк 6
BSF         ADCON0,2     ; старт преобразования

После завершения преобразования и до появления на выводе PD2 логического нуля выполняются ещё 2 инструкции:

MOVLB	Bank1								
BCF	PORTD,2	             ; выключение порта PORTD,2=0

Каждая из этих 4 инструкций выполняется за 1 цикл процессора. Итого получаем, что время на выполнение дополнительных инструкций равно:

tинстр = 4*4*0.0625 = 1 мкс

Также необходимо учитывать дополнительную задержку в течение одного цикла команд (tзадерж) при тактировании от внутреннего RC-генератора, которую формирует модуль АЦП, прежде чем начать преобразование. Это позволяет программе выполнить команду SLEEP перед началом преобразования.

tзадержк = 4*0.0625 = 0.25 мкс

Для получения времени преобразования АЦП и частоты тактирования RC генератора, можно воспользоваться таблицей Excel, которая находится в архиве в начале статьи. В моём случае время преобразования получилось 33.8 мкс, частота RC генератора = 430,1 кГц, TAD = 2.325 мкс.

doc/mk/1886be/timeadc.txt · Последние изменения: 2018/01/26 09:42 — vova