Свежие обсуждения
Измерения

Подскажите схему самодельного вольтомметра с автоматическим выбором предела.

1 5 26

GM: Есть приличный ацп двойного интегрирования TC500A c N=132000 и стоит в два раза дешевле.

Слегка разобрался, как он работает и он мне начинает нравится...
При стоимости, сопоставимой с ICL7135 имеет на много лучшее разрешение:
ICL7135 - 14 рарзрядов или 4,5 разряда индикатора,
TC500A - 17 разрядов.или 5,5 разрядов индикатора (или нет?).

 

DWD: По этому было бы не плохо, если бы Вы, например, составили простенькую программу счёта импульсов на АСМ

;сигнал BUSY подключен к PORTA1 (можно переназначить на любую ногу любого порта)
;здесь надо запустить таймер1 в 00 моде
;регистры r21-r20-r19-r18 будут хранить исходное значение счётчика импульсов
;регистры r25-r24-r23-r22 будут хранить конечное значение счётчика импульсов

mloop: clr r20
clr r21
start: sbis PORTA,1 ;фронт BUSY?
rjmp start ;нет
in r18,TCNT1L ; начальное
in r19,TCNT1H ; значение
stop1: sbis TIFR1,0 ;перенос?
rjmp stop2 ;нет
adiw r24,1 ;подправим старшее слово
stop2: sbic PORTA,1 ; спад BUSY?
rjmp stop1 ;нет
in r22,TCNT1L ; конечное
in r23,TCNT1H ; значение
;здесь надо вычесть 10001 из содержимого регистров r25-r24-r23-r22

;приведенный фрагмент может считать импульсы до примерно 10 МГц
;с точностью порядка 0.3 мкс (Fтактовая МК=20 МГц)

 

GM, спасибо, буду разбираться и пробовать...

Вопросов пока больше нет, так как я уже забыл, как работает TC500A, по этому нужно думать, что делает Ваш фрагмент.

P.S.
Фу ты... Причём тут TC500A, когда речь шла о ICL7135. Совсем уже всё перепуталось в голове.
GM, ешё раз спасибо, посмотрю, как программка импульсы считать будет.

О! дошло. только что - а куда считаемые импульсы подаются? Если они считаются внутри МК, то откуда брать импульсы для тактирования АЦП?

 

1) И TC500A, и ICL7135 работают одинаково. Они выдают импульс на ноге BUSY, длительность которого пропорциональна измеряемому напряжению (с учётом вычета числа 10000).

2) Само собой разумеется, что импульсы должны подаваться на вход CLOCK IN мксх ICL7135 и на вход таймера1 МК. Практичнее выдавать частоту наружу МК и использовать ее же для тактирования таймера.

3) Добавлю, что в приведенном выше фрагменте после получения результата надо из содержимого регистров r25-r24-r23-r22 вычесть содержимого регистров r21-r20-r19-r18, а затем уже вычесть 10000. Например, так

sub r22,r18
sbc r23,r19
sbc r24,r20
sbc r25,r21

Теперь в регистрах r25-r24-r23-r22 будет разница Ткон - Тнач в единицах импульсов счёта. Теперь можно вычесть 10000. Попробуйте сделать сами.
И не надо бояться вычитать из меньшего числа большее. С учетом конечности двоичной арифметики все арифметические действия будут вычисляться правильно.

 

GM: 1) И TC500A, и ICL7135 работают одинаково. Они выдают импульс на ноге BUSY...

У TC500A нет сигнала BUSY. Есть два входа управления, от комбинации уровней на которых зависит фаза работы (интегрирование, деинтегрирование, обнуление) и выходной сигнал CMPTR, по которому можно вычислить полярность измеряемого сигнала и начало-конец интегрирования. Но с хитрой логикой работы. По нему просто так не вычислишь начало и конец работы, так как он переходит из одного состояния в другое либо в начале интегрирования, либо в начале деинтегрирования в зависимости от полярности измеряемого сигнала.

Ну да с этим АЦП пока не будем разбираться.
Для начала возьмём ICL7135.

GM: 2) Само собой разумеется, что импульсы должны подаваться на вход CLOCK IN мксх ICL7135 и на вход таймера1 МК. Практичнее выдавать частоту наружу МК и использовать ее же для тактирования таймера.

Вот тут не понятно - с какого порта МК брать сигнал CLOCK для тактирования АЦП и на какой порт МК его же подавать для соединения со входом таймера 1?

Известно только, куда подавать сигнал BUSY - PORTA1

 

1) Самое простое: взять кварц 16 МГц в качестве тактового генератора. Эту частоту вывести на ногу CLKO (для атмега328), предварительно поделив на 64 (регистр системного предделителя CLKPR) - будет 250 кГц. Эту же частоту подать на таймер1, предварительно поделив на 64 в прескалере таймера1 (рис.21-2 документ 42735В).

2) Более общий подход - таймер1 имеет вход Т1 и выходы ОС1А, ОС1В. Таймер0 имеет вход Т0 и выходы ОС0А, ОС0В. Можно использовать вход одного и выход другого и наоборот. Делитель первого 2-65535, второго 2-255. Можно выбрать практически любую частоту.

3) Верно, у TC500A нет сигнала BUSY, есть нога CMPTR OUT. Но по большому счёту принцип измерения остается тот же самый. Формула для измеряемого напряжения Vin = Vref * Tdeint / Tint. Причем, если Tint в ваших руках, т.е. вы можете в некоторых пределах варьировать его для оптимизации времени интегрирования, то процедура измерения длительности Tdeint точно такая же как и длительности сигнала BUSY. Вот и вся разница.

 

GM: взять кварц 16 МГц в качестве тактового генератора. Эту частоту вывести на ногу CLKO (для атмега328), предварительно поделив на 64 (регистр системного предделителя CLKPR) - будет 250 кГц.

Ножка CLKO - это порт PB0 атмега328. Её я могу использовать. Мне нужно подать на эту ножку сразу 16МГц или сначала поделив её на 64 внешним делителем на микросхемах?
Или как-то поделив её средствами МК, использовав "регистр системного предделителя CLKPR"? Как это сделать?

GM: Эту же частоту подать на таймер1, предварительно поделив на 64 в прескалере таймера1

Тут я вообще ни чего не понял..
Вход таймера 1 - это порт PD5 атмега328. На этот вывод мне нужно подать 250КГц или сначала поделив её ещё на 64?

GM: 2) Более общий подход - таймер1 имеет вход Т1 и выходы ОС1А, ОС1В. Таймер0 имеет вход Т0 и выходы ОС0А, ОС0В. Можно использовать вход одного и выход другого и наоборот. Делитель первого 2-65535, второго 2-255. Можно выбрать практически любую частоту.

Так это нужно какую-то подпрограммку писать? Но я не умею. Я не программист...

С пунктом 3 (TC500A) вроде всё понятно. Но это дело будущего.

 

Хорошо, пишем программу, вот кусок

ldi r16,32 ;
out OCR0A,r16 ;
ldi r16,0x42 ;
out TCCR0A,r16 ;
ldi r16,0x01 ;
out TCCR0B,r16 ;250 кГц на ножке OC0A

Сигнал с этой ноги надо подать на ICL7135.

Теперь подадим те же 250 кГц на вход таймера1, вот этот кусочек

ldi r16,0x03 ;
out TCCR1B,r16 ;250 кГц на входе timer1

Теперь можно начинать измерение импульса BUSY, программку я приводил выше.

 

Спасибо, буду пробовать.
Теперь, вроде бы, понятно, что с чем соединять.

 

а зачем такой мощный мк с внешней ацп? тока изза флеши здоровай?
МНЕ КАЖЕТСЯ С ТАКИМ АЦП ПОТЯНУЛАБ И 8МЕГА