реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> LC-метр. Измерить малые частоты.
Didro
сообщение May 1 2009, 15:22
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 94
Регистрация: 9-04-07
Пользователь №: 26 893



Добрый день,
Собрал LC-метр по схеме с сайта - http://www.antennex.com/Sshack/aade/specs.htm

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

В качестве МК выбрал ATmega16 на частоте 8 Мгц. Подключаю схему к 16 битному счетчику (также к пину подключено 10 кОм-ое сопротивление, которое "подтягивает" пин на землю), в течении 0,4 секунды таймер включен и считает импульсы,при переполнении счетчика происходит прибавление FFFFh к регистру организованному на 3х восьмибитных регистрах,по окончанию 0,4 секунды содержимое в регистрах TCNT1H и TCNT1L прибавляется к сумме 24х битного составного регистра, затем программа через COM-порт передает три байта данных (количество импульсов за 0,4 сек).

Проблема в том, что когда измеряется исходная частота в 750 КГц, так же при малых подсоединяемых емкостях (следовательно и малого уменьшения частоты) данные приходят верные и достаточно стабильные по значению, но когда подсоединяется относительно большая емкость в 100 нФ происходит сильное снижение частоты до 60 Кгц (проверено на осциллографе) и данные приходящие из счетчика становятся неверные их значение колеблется от 0 до 255, когда нормальным было бы значение в 20000.
Может быть проблема с частотой импульсов приходящих на пин таймера? то есть частоты ниже некоторой планки не могут быть правильно
подсчитаны таймером.

Cхема:

Прикрепленное изображение


Стоит исключить предположение, что COM на МК настроен неверно или программа на компьютере настроена неправильно, т.к. все неоднократно проверялось путем пересылки нескольких байт, как с МК->ПК, так и наоборот.

Кусок исходного кода управления таймером:

Код
CMD_FREQ:
;очищаем регистр-накопитель
clr r1
clr r2
clr r3
;делаем замер частоты
ldi r17,(1<<CS10)|(1<<CS11)|(1<<CS12)
out TCCR1B,r17
clr r17
;ждем 0,4 секунды
rcall WAIT
;выключаем счет
out TCCR1B,r17
;считываем данные счетчика
in r21,TCNT1H
in r20,TCNT1L
;прибавляем к накопителю 'хвосты'
add r1,r20
adc r2,r21
adc r3,r17
;очистка
out TCNT1H,r17
out TCNT1L,r17
;отсылаем первый байт селектор
ldi r17,NORBYTE
out UDR,r17
rcall WAIT_USART
;отсылаем три информационных байта
out UDR,r3
rcall WAIT_USART
out UDR,r2
rcall WAIT_USART
out UDR,r1
rcall WAIT_USART
;обработчик прерывания переполнения TIMER1
AddVal:  
;прибавляем значение переполнения
add r1,r23;в r23 и r24 заранее записано значение FFFFh
adc r2,r24
adc r3,r17; r17=0
reti

Программа для работы с МК по COM - Terminal v 1.9b

Сообщение отредактировал Didro - May 1 2009, 15:24
Go to the top of the page
 
+Quote Post
domowoj
сообщение May 2 2009, 11:03
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



А как же у людей работает, публикаций много
вот например:
http://www.cqham.ru/lc_meter.phtml


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
John851
сообщение May 2 2009, 14:42
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



вопрос не в том какже у людей работает, а где ошибка в моем програмном коде или может еще где то
Go to the top of the page
 
+Quote Post
John851
сообщение May 2 2009, 16:07
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



сам себе же и отвечу... почему то при увеличении задержки с 0,4 сек до 1 сек данные стали приходить верные. Интересно почему?
Go to the top of the page
 
+Quote Post
rx3apf
сообщение May 2 2009, 21:41
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(John851 @ May 2 2009, 20:07) *
сам себе же и отвечу... почему то при увеличении задержки с 0,4 сек до 1 сек данные стали приходить верные. Интересно почему?

"- Где у меня ошибка ? - в ДНК !" © Ну, что-то где-то в коде, естественно - таймеру-то все равно, что считать... Однако хочу обратить внимание - эта схема генератора весьма чувствительна к добротности (и к линейности, кстати - это важно !) дросселя, при использовании низкодобротных дросселей (типа всякой компаундированной мелочи) размах переменного напряжения на контуре падает, компаратор начинает звенеть на фронтах. В особо тяжелых случаях эффект где-то с сотни nF и начинает проявляться. ТШ на входе чуть улучшает картину, так что при простом переносе на AVR может быть ухудшение. Ну и конкретно эта программная реализация имеет массу недостатков - например, не учитывает собственную емкость катушек, что уже при десятках mHy. На www.cqham.ru уже который год обсуждается более "продвинутый" вариант - рекомендую ознакомиться. Есть свои тонкости...
Go to the top of the page
 
+Quote Post
John851
сообщение May 3 2009, 13:11
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



Цитата(rx3apf @ May 3 2009, 00:41) *
"- Где у меня ошибка ? - в ДНК !"

попрошу повежливее, я еще только учусь и задаю вопросы здесь чтоб получить корректный ответ, а не надсмешки "профессоров" типа вас.

Цитата(rx3apf @ May 3 2009, 00:41) *
Однако хочу обратить внимание - эта схема генератора весьма чувствительна к добротности (и к линейности, кстати - это важно !) дросселя

Мне известо что это очень важно, поэтому еще раз напишу, что уже написал выше - от генератора исходят ровные прямоугольные импульсы без шумов даже при очень большом растяжении по времени, т.к. использую достаточно добротную катушку (намотана на станке, определенным типом намотки, провод - ПЛШО многожильный). Так же я дополнительно сделал экранирование элементов схемы как сверху, так и снизу платы. На выходе стоит буфер из двух последовательно соединенных 4х входных элементов И-НЕ. Так что к генератору претензий нет (пожалуйста читайте все сообщения темы, чтоб мне по несколько раз одно и то же не печатать).

Цитата(rx3apf @ May 3 2009, 00:41) *
так что при простом переносе на AVR может быть ухудшение. Ну и конкретно эта программная реализация имеет массу недостатков - например, не учитывает собственную емкость катушек

Вы неправы. Прибор получился достаточно точный даже без учета паразитной емкости и индуктивности. Да, я использую переносы и состаной трехбайтный регистр, но другого выхода просто нет. Если взглянуть на схемотехнику счетчика AVR и PIC можно найти много различий. Для этого случая актуально различие, состоящее в том, что в AVR на имульсы приходящие на пин таймера нельзя поставить делитель частоты (только на импульсы от внутреннего генератора), а пиковском МК есть возможность поставить делитель на импульсы с пина. Этим я думаю все объясняется.

Самое главное - мой вопрос остался без ответа. Почему при малой задержке на измерение кол-ва импульсов невозможно работать с относительно низкими частотами (типа 60 КГц). А при задержке в 1 сек все насчитывается просто отлично на любой частоте.
Go to the top of the page
 
+Quote Post
domowoj
сообщение May 3 2009, 13:40
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Если не получается измерять частоту с достаточной точностью,
то измеряйте период, подавая сигнал на вход ICP.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
John851
сообщение May 4 2009, 17:17
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



да это тоже выход, но проблема в другом:

Если включать таймер на 0,4 секунды (как это написано в техн. описании прибора), то наблюдается что то непонятное. Тестовая частота 760 Кгц на счетчике за этот период времени насчитывается без проблем, но стоит подключить конденсатор с нанофарадной емкостью (к примеру 100 нФ), так с МК начинают приходить очень странные данные - всегда заполнен только младший байт и значения в нем колеблются от 0 до 255. я и подумал, что проблема в частоте поступающих импульсов.
С увеличением задержки до 1 секунды проблема исчезает.
Вопрос: почему так происходит?? вроде же таймеру всеравно сколько времени считать и неважно какой частоты приходят импульсы. Возможно МК с деффектом или счетчик AVR всетаки имеет какие то ограничения.

Буду рад если кто нить даст ответ конкретно по этому вопросу.
Go to the top of the page
 
+Quote Post
xemul
сообщение May 4 2009, 20:13
Сообщение #9



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Судя по reti, с таймером Вы боретесь в прерывании (каком?). Завешивать контроллер на 0.4 с или на 1 с в тупом WAIT, да еще и в прерывании, некошерно. К WAIT_USART это тоже относится.
Элементарный расчет: 0.4 с * 750 кГц = 300000, что несколько превышает возможности TMR1. Без переполнения в 16-битовый счетчик за 0.4 с влезет частота ~< 164 кГц. Оригинальный проект не видел, но по контексту могу предположить, что в нем таймер ПИК'а использовался с предделителем на 8.
Еще одно мое недоумение: если правильно понял задумку измерёметра, на выходе LC-метра (по схеме) - частота, которую Вы пытаетесь измерить, т.е. подсчитать число периодов за образцовый интервал времени. К чему тогда фривольные упражнения с этим интервалом? Пытаетесь подогнать задачу под ответ?
Насчет "Прибор получился достаточно точный..." тоже есть сомнения хотя бы из-за способа формирования интервала времени счета.
А задача измерения (такой) частоты весьма примитивна и неоднократно обсуждалась (в основном, применительно к АВР и в разделе "Для начинающих"). Поиск по форуму Вам в помощь.
Go to the top of the page
 
+Quote Post
John851
сообщение May 5 2009, 09:41
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



Цитата
Судя по reti, с таймером Вы боретесь в прерывании (каком?)

немного не понял в каком смысле употреблено слово "боретесь". Помоему суть ясна - если задержку делать в 1 сек, то счетчик даже 16и битный на частоте в 750кГц переполнится не один раз, поэтому как только он переполняется так сразу к составному 24х битному регистру добавляется FFFF (значение переполнения). Затем когда 1 сек пройдет счетчик отключается и то что он насчитал записывается в регистры и также прибавляется к составному регистру.

Цитата
Завешивать контроллер на 0.4 с или на 1 с в тупом WAIT, да еще и в прерывании, некошерно

Хм, интересно почему? Ну вопервых что то ведь должно считать отрезок времени на который таймер включен на прием внешних импульсов. Использовать другой таймер?? Во вторых - допустим я освободил МК от процедуры WAIT и что же он должен выполнять в течении 1 сек (во время выполнения процедуры WAIT кроме как обработки прерываний у МК нет других задач) спать? впринцыпе мне без разницы какое потребление энергии будет у МК, тк питается от сети, поэтому мне безразлично спит он или нет, а вот уже структуру программы это усложнит.

Цитата
что в нем таймер ПИК'а использовался с предделителем на 8.

да, вы правы там таймер с предделителем внешних импульсов, в AVR это ксожалению невозможно сделать из-за другой структуры счетчика. Поэтому я и использую составной регистр.

Цитата
Вы пытаетесь измерить, т.е. подсчитать число периодов за образцовый интервал времени. К чему тогда фривольные упражнения с этим интервалом? Пытаетесь подогнать задачу под ответ?

как я понял вы что-то хотите сказать насчет того зачем я увеличил промежуток времени с 0,4 сек до 1 сек?? если да, то повторятся не буду я уже в нескольких сообщениях описал почему я так сделал. И что в этом плохого? ну увеличил интервал и сделал прямой счет частоты без всяких умножений на 4 как это было бы с задержкой в 0,4 сек.

Цитата
Насчет "Прибор получился достаточно точный..." тоже есть сомнения хотя бы из-за способа формирования интервала времени счета.

я не сомневаюсь, потому что я его уже сделал и еще раз повторюсь что достаточно точный для меня. Конечно он 0,1 пФ навряд ли вычисит но 1 пФ у меня вычислился точно.

Цитата
А задача измерения (такой) частоты весьма примитивна

понятно что эта задача примитивна и чем мое решение этой задачи неверно?? помоему нормальное решение, просто сложнее мне нет надобности делать. Конечно, если будет критично подвешивание МК процедурой WAIT, то я избавлюсь от нее и перенесу эту задачу на переферию, а усложнение кода мне никчему в данной задаче.



Всегда уходим от моего вопроса, на который я очень хочу узнать ответ. Это хорошо конечно, что мне говорят где в моем коде есть нерациональные моменты и какой точности прибор, но проблема в другом:

Цитата

Если включать таймер на 0,4 секунды (как это написано в техн. описании прибора), то наблюдается что то непонятное. Тестовая частота 760 Кгц на счетчике за этот период времени насчитывается без проблем, но стоит подключить конденсатор с нанофарадной емкостью (к примеру 100 нФ), так с МК начинают приходить очень странные данные - всегда заполнен только младший байт и значения в нем колеблются от 0 до 255. я и подумал, что проблема в частоте поступающих импульсов.
С увеличением задержки до 1 секунды проблема исчезает.
Вопрос: почему так происходит?? вроде же таймеру всеравно сколько времени считать и неважно какой частоты приходят импульсы. Возможно МК с деффектом или счетчик AVR всетаки имеет какие то ограничения.
Go to the top of the page
 
+Quote Post
xemul
сообщение May 5 2009, 11:58
Сообщение #11



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(John851 @ May 5 2009, 13:41) *
немного не понял в каком смысле употреблено слово "боретесь".

В смысле "Вся наша жизнь - ...". Не нравится "боретесь"? Подставьте "дружить", "работать", "мучаться" или любой более симпатичный Вам глагол в форме второго лица множественного числа.
Цитата
Помоему суть ясна - если задержку делать в 1 сек, то счетчик даже 16и битный на частоте в 750кГц переполнится не один раз, поэтому как только он переполняется так сразу к составному 24х битному регистру добавляется FFFF (значение переполнения). Затем когда 1 сек пройдет счетчик отключается и то что он насчитал записывается в регистры и также прибавляется к составному регистру.

Если означенное действо происходит где-то в WAIT, вопрос снимается. Но из представленного кода ни разу не следует, что переполнение таймера каким-либо образом обрабатывается. Видна только неловкая и безусловная (в смысле - независящая от наличия или отсутствия переполнения таймера) суета вокруг r1-r3 в весьма странном месте.
Цитата
Хм, интересно почему? Ну вопервых что то ведь должно считать отрезок времени на который таймер включен на прием внешних импульсов. Использовать другой таймер??

Я уже предлагал воспользоваться поиском по форуму. Можно еще и аппноты атмелёвые почитать.
Цитата
Во вторых - допустим я освободил МК от процедуры WAIT и что же он должен выполнять в течении 1 сек (во время выполнения процедуры WAIT кроме как обработки прерываний у МК нет других задач) спать? впринцыпе мне без разницы какое потребление энергии будет у МК, тк питается от сети, поэтому мне безразлично спит он или нет, а вот уже структуру программы это усложнит.

В принципе, МК может еще заниматься индикацией, опросом клавы, общением с внешним миром...
Даже если эти действа Вы не предполагаете, такое построение программы просто неудачно. Любая (самописная) прога - это приобретение опыта и наработка удобных шаблонов. Ваша прога в этом плане - опыт отрицательный.
Цитата
да, вы правы там таймер с предделителем внешних импульсов, в AVR это ксожалению невозможно сделать из-за другой структуры счетчика. Поэтому я и использую составной регистр.

Не проблема. Железо АВР позволяет без проблем считать такую частоту. Вам нужно только корректно обрабатывать переполнения таймера или выбрать такой интервал счета, чтобы эти переполнения не приключались.
Формула проста как манная каша: NTMR = To * fx.
NTMR_max и fx_max известны. Отсюда To <= NTMR_max/fx_max (имхо, так выбирался интервал счета и коэффициент предделителя для ПИК'а).
Несложно догадаться, что для АВР без предделителя на 8 интервал счета должен быть уменьшен в 8 раз (а не увеличен в 2.5).
Из этой же формУлы следует, что, если не учитывать погрешность пробразователя L/C->fx, погрешность прибора определяется погрешностью задания To. Именно поэтому метания между 0.4 с и 1 с мне кажутся бессмысленными, и возникают сомнения в декларируемой Вами точности прибора.
Цитата
как я понял вы что-то хотите сказать насчет того зачем я увеличил промежуток времени с 0,4 сек до 1 сек?? если да, то повторятся не буду я уже в нескольких сообщениях описал почему я так сделал. И что в этом плохого? ну увеличил интервал и сделал прямой счет частоты без всяких умножений на 4 как это было бы с задержкой в 0,4 сек.

См. выше. Если осмыслить не удастся, "ну извиняй, боярин" - повторяться я тоже не буду.
Go to the top of the page
 
+Quote Post
John851
сообщение May 5 2009, 15:45
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



Цитата
В смысле "Вся наша жизнь - ...". Не нравится "боретесь"? Подставьте "дружить", "работать", "мучаться" или любой более симпатичный Вам глагол в форме второго лица множественного числа.
См. выше. Если осмыслить не удастся, "ну извиняй, боярин" - повторяться я тоже не буду.

Вот зачем выпендриваться? Я русский человек и все прекрасно понимаю, но вы употребляете такие сочетания которые не встретишь в нормальном русском языке. К примеру выражение "Вы боретесь в прерывании" мне вообще не понятно, другое дело "работаете с таймером".
Во вторых что вы понимаете под выражением "фривольные упражнения с интервалом времени"? Звучит глупо, спросите любого кто прочитает этот набор слов. Это не русский язык, а ваш собственный и я его не понимаю. Говорите на нормальном русском чтоб я понимал суть ваших предложений.

НЕНАДО МНЕ СОВЕТОВАТЬ КАК ПОДСЧИТАТЬ ЧАТОТУ ИЛИ НАХОДИТЬ НЕРАЦИОНАЛЬНОСТИ В КОДЕ, ПОТОМУ ЧТО ВСЕ УЖЕ СОБРАНО И НОРМАЛЬНО РАБОТАЕТ. незная задачи которая поставлена передомной вы пытаетесь рассказать что мой код не подойдет если еще будет клавиатура, мышка или еще что то, одним словом того чего нет и не потребуется в моей задаче.

ВНИМАНИЕ ВОПРОС !!!
Если включать таймер на 0,4 секунды (как это написано в техн. описании прибора), то наблюдается что то непонятное. Тестовая частота 760 Кгц на счетчике за этот период времени насчитывается без проблем, но стоит подключить конденсатор с нанофарадной емкостью (к примеру 100 нФ), так с МК начинают приходить очень странные данные - всегда заполнен только младший байт и значения в нем колеблются от 0 до 255. я и подумал, что проблема в частоте поступающих импульсов.
С увеличением задержки до 1 секунды проблема исчезает.
Вопрос: почему так происходит?? вроде же таймеру всеравно сколько времени считать и неважно какой частоты приходят импульсы. Возможно МК с деффектом или счетчик AVR всетаки имеет какие то ограничения.


Кто знает, пожалуйста ответьте на мой конкретно поставленный вопрос, для тех кто незнает и хочет написать что-то об моем коде, о точности прибора, о правильном подсчете частоты и т.д. есть высказывание "молчание-золото".
Go to the top of the page
 
+Quote Post
xemul
сообщение May 5 2009, 17:32
Сообщение #13



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



[оффтоп]
Мил человек, уж, вестимо, не Вам учить меня великому и могучему. Попробуйте хоть со знаками препинания разобраться - их специально придумали, чтобы поток сознания обретал форму, приемлемую для восприятия.
И не злоупотребляйте большими черными буквами - от этого они не обретают новый смысл, а читать неудобно.
[/оффтоп]
А по теме - похоже, Вы и сами все знаете. Успехов в работе. И в борьбе.smile.gif

ЗЫЖ "фривольные упражнения" == "легкомысленные/непристойные упражнения" (см. какой-нить толковый словарь русского языка). По-моему, вполне соответствует. Или Вы решили, что я к "free" добавил "вольный" и родил новое слово?
Go to the top of the page
 
+Quote Post
John851
сообщение May 5 2009, 18:39
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 2-05-09
Пользователь №: 48 549



Знаки препинания надоело расставлять, а черными заглавными буквами пишу потому что хочу привлеч внимание на мой вопрос, на который никто не хочет отвечать. По теме этой я уже действительно много изучил, но не все и есть вопрос на который еще никто не ответил (не только на форуме).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:39
Рейтинг@Mail.ru


Страница сгенерированна за 0.03709 секунд с 7
ELECTRONIX ©2004-2016