Перейти к содержанию
    

три частоты на АТмегу 128 с использованием таймеров

defunct: Обоснуйте. Fo = 8Mhz, Fx = 4Mhz.

Моим методом (ну не совсем моим, он известен давно, просто я его приспособил к периферии аврки, в этом смысле он мой) за 1 с интервал вполне реально сделать 1000 НЕЗАВИСИМЫХ измерений, потом обработать результат, вот и всё обоснование.

допустим Fx не 4Mhz, а 3.98Mhz хотя это не суть важно, ну и как эти 1000 независимых измерений в сумме выйдут на точность ±0.005?

 

Ведь чтобы выйти на такую точность нужно чтобы каждое отдельно взятое измерение обладало точностью не ниже |0.005| * 1000,

 

а у вас точность одного измерения на интервале 1с = |0.25| если я не ошибаюсь (Fx/Fo = 0.5). меньше интервал ниже точность. i.e. если интервал равен двум периодам Fo - то точности нет вообще, можно лишь грубо оценить есть сигнал или нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот я наваял тут вобщем прогу по вашему методу,осталось только все слепить в кучю.

Я как бы уже тему открывал,но раз уж тут есть тема по конкретному методу то спрошу тут.

Если у меня период измерения будет 0.1с ,какую получю погрешность? И если период измерения будет не целым числом ,ну скажем 0.14-0.095 сильно это повлияет на точность?Тактовая частота АВРки 10Мгц,есть ли смысл подымать до 16?

Есть ли смысл использовать 10 разрядов? Или 6 в самый раз?

Изменено пользователем Peeoner

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

допустим Fx не 4Mhz, а 3.98Mhz хотя это не суть важно

Допустим, теоретически 4 МГц РОВНО (Fclk/2), хотя это и не суть важно.

 

ну и как эти 1000 независимых измерений в сумме выйдут на точность ±0.005? Ведь чтобы выйти на такую точность нужно чтобы каждое отдельно взятое измерение обладало точностью не ниже |0.005| * 1000, а у вас точность одного измерения на интервале 1с = |0.25| если я не ошибаюсь (Fx/Fo = 0.5)

 

Ошибаетесь, defunct, как всегда, впрочем(:-). Точность одного измерения на секундном интервале ±0.5 Гц, что вы всё время перевираете?

 

Давайте, я вас совсем добью, и скажу, что за секунду сделаю 10000 НЕЗАВИСИМЫХ измерений, да что там 10 тыщ, давайте сделаем 50 тысяч измерений в секунду. Какая будет суммарная погрешность такого количества измерений по сравнению с погрешностью отдельного измерения, не подскажете?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ошибаетесь, defunct, как всегда, впрочем(:-). Точность одного измерения на секундном интервале ±0.5 Гц, что вы всё время перевираете?

скорее делаю комплимент вашему методу. ибо раньше в ветке вы заявляли о ±0.5 Гц в методе ворот.

В захвате же где Fo = 2Fx, вы обещали дать точность выше как раз за счет измерения периодов Fo.

Читайте внимательней ;>

 

 

Давайте, я вас совсем добью, и скажу, что за секунду сделаю 10000 НЕЗАВИСИМЫХ измерений, да что там 10 тыщ, давайте сделаем 50 тысяч измерений в секунду. Какая будет суммарная погрешность такого количества измерений по сравнению с погрешностью отдельного измерения, не подскажете?

Добивать меня бесполезно и так defunct ;>

Просто расскажите, что вы подразумеваете под НЕЗАВИСИМЫМ измерением, и какова точность отдельно взятого независимого измерения.

 

И еще небольшой вопросик B)

Подтверждаете ли вы что в методе захвата точность зависит соотношения измеряемой частоты к опорной Fx/Fo?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

скорее делаю комплимент вашему методу. ибо раньше в ветке вы заявляли о ±0.5 Гц в методе ворот. В захвате же где Fo = 2Fx, вы обещали дать точность выше как раз за счет измерения периодов Fo. Читайте внимательней

Это гдей-то я такое говорил? В пределе максимальная погрешность для метода захвата в два раза лучше, чем для метода ворот, это я говорил, помню. А именно, ±0.5 Гц в методе захвата супротив ±1.0 Гц в методе ворот для нашего конкретного случая Fo=8 MГц, Fx=4 MГц.

 

Просто расскажите, что вы подразумеваете под НЕЗАВИСИМЫМ измерением, и какова точность отдельно взятого независимого измерения

Давайте, для разнообразия вы мне расскажете, что такое независимое измерение, а я, так и быть, побуду "нулём в сиянии", это ведь ваши слова? Вот, кстати, нашёл отличную книжку Дворяшина Б.В. по методам радиотехнических измерений, даже две, всем рекомендую. Молодость вспомнил, ведь Дворяшин читал нам курс лекций по измерениям и лабы вёл...

 

А погрешность отдельно взятого независимого измерения так и будет ±0.5 Гц, ничего не могу поделать. Ну и какая будет погрешность 1000 независимых измерений в таком случае?

 

И еще небольшой вопросик. Подтверждаете ли вы что в методе захвата точность зависит соотношения измеряемой частоты к опорной Fx/Fo?

Абсолютная погрешность, естественно, зависит от соотношения частот, а вот относительная - не зависит. Сказанное справедливо как для метода захвата, так и для метода ворот. Почитайте книжки Дворяшина, там такая теория наведена, ой-ё-ёй, мало не покажется...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это гдей-то я такое говорил? В пределе максимальная погрешность для метода захвата в два раза лучше, чем для метода ворот, это я говорил, помню. А именно, ±0.5 Гц в методе захвата супротив ±1.0 Гц в методе ворот для нашего конкретного случая Fo=8 MГц, Fx=4 MГц.

Сорри запамятовал, давно эту тему не перечитывал.

Хорошо пусть |0.5|, и |1|.

 

Давайте, для разнообразия вы мне расскажете, что такое независимое измерение, а я, так и быть, побуду "нулём в сиянии", это ведь ваши слова? Вот, кстати, нашёл отличную книжку Дворяшина Б.В. по методам радиотехнических измерений, даже две, всем рекомендую. Молодость вспомнил, ведь Дворяшин читал нам курс лекций по измерениям и лабы вёл...

Проглочу, поскольку виноват, см "PS".

По делу.

Такой замечательной книжки у меня под рукой нет (у всех свои кумиры), поэтому могу только предположить, что речь идет об измерении, с независимой погрешностью, т.е. не вызывающей погрешности других измерений.

Теперь объясните мне как вы сделаете 1000 независимых измерений на интервале 1с, так чтобы погрешность каждого измерения была как вы пишете ±0.5 Гц.

Fx все же давайте сделаем 3.98Mhz (хотя бы для наглядности, чтоб не тупо 1/2).

 

А погрешность отдельно взятого независимого измерения так и будет ±0.5 Гц, ничего не могу поделать. Ну и какая будет погрешность 1000 независимых измерений в таком случае?

Опять ведь не договариваете.

На каком интервале будет заявленная погрешность?

 

Почитайте книжки Дворяшина, там такая теория наведена, ой-ё-ёй, мало не покажется...
Спасибо за рекомендацию, при возможности воспользуюсь.

 

 

PS: Свои слова насчет 0 в сиянии забираю обратно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот я наваял тут вобщем прогу по вашему методу,осталось только все слепить в кучю.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опять ведь не договариваете. На каком интервале будет заявленная погрешность?

Ну, блин, вы даёте! Конечно, на односекундном интервале. Мне что, каждый раз это писать, когда я говорю о погрешности? Я уж язык весь отболтал (:-).

 

Теперь объясните мне как вы сделаете 1000 независимых измерений на интервале 1с, так чтобы погрешность каждого измерения была как вы пишете ±0.5 Гц

Я уже готов сделать 50000 независимых измерений на секундном интервале с погрешностью каждого в ±0.5 Гц, естественно для нашего конкретного случая Fo=8 MГц, Fx=4 MГц. Щас мне надо отъехать, где-то после обеда попытаюсь пояснить, как это можно сделать. А всё-ж-таки, defunct, не прочувствовали вы всю прелесть моего метода (:-).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал написать программу по методу GM, за основу взял программу Яrik_а. Микроконтроллер - ATMega 64L, тактовую частоту взял 1 мГц (просто для тренировки). Вместо нулевого таймера, который задействован у Яrik_а, взял таймер_2.

Работу программы проверял в VMLABе, смоделировав там пульсовый генератор меандра частотой 10 кГц.

Но ничего хорошего не получилось. Вместо ожидаемой индицируемой частоты 10 кГц на ЖК-индикаторе VMLABа в каждом цикле высвечиваются разные значения - от 2 до 30 кГц, причём бывают и отрицательные числа. Подскажите, пожалуйста, где ошибка в программе.

 

static float Fx;

unsigned long int N1, N2, N;

unsigned long int M1, M2, M;

unsigned int Perepol_Timer2=0, Perepol_Timer1=0;

unsigned int count_T1, count_T2;

 

// Timer 1 overflow interrupt service routine

interrupt [TIM1_OVF] void timer1_ovf_isr(void)

{

Perepol_Timer1++;

}

 

// Timer 1 input capture interrupt service routine

interrupt [TIM1_CAPT] void timer1_capt_isr(void)

{

TIMSK&=0xDF;

count_T2=TCNT2;

count_T1=ICR1;

}

 

// Timer 2 overflow interrupt service routine

interrupt [TIM2_OVF] void timer2_ovf_isr(void)

{Perepol_Timer2++;}

 

void main(void){

// Timer/Counter 1 initialization

TCCR1A=0x00;

TCCR1B=0xC1;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

OCR1CH=0x00;

OCR1CL=0x00;

 

// Timer/Counter 2 initialization

TCCR2=0x07;

TCNT2=0x00;

OCR2=0x00;

 

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x64;

ETIMSK=0x00;

#asm("sei")

 

Perepol_Timer1=0;

Perepol_Timer2=0;

N1=0;M1=0;

 

while (1) {

delay_ms(1000);

TIMSK|=0x20;

while ((TIMSK&0x20)==0x20){}

N2=(unsigned long int)(Perepol_Timer1)*65536+count_T1;

M2=(unsigned long int)Perepol_Timer2*65536+count_T2;

N=N2-N1;

M=M2-M1;

Fx=(float)1000000.0*(float)M/(float)N;

//Здесь идёт вывод измеряемой частоты Fx на ЖК-индикатор

N1=N2;

M1=M2; }}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, блин, вы даёте! Конечно, на односекундном интервале. Мне что, каждый раз это писать, когда я говорю о погрешности? Я уж язык весь отболтал (:-).

Ок, просто это важный момент который надо было услышать от вас именно сейчас ;>

Я уже готов сделать 50000 независимых измерений на секундном интервале с погрешностью каждого в ±0.5 Гц, естественно для нашего конкретного случая Fo=8 MГц, Fx=4 MГц. Щас мне надо отъехать, где-то после обеда попытаюсь пояснить, как это можно сделать. А всё-ж-таки, defunct, не прочувствовали вы всю прелесть моего метода (:-).

Как можно на одном секундном интервале сделать 50k независимых измерений секундного интервала (пусть они даже будут пересекаться)?! На секундном интервале есть возможность сделать только одно независимое измерение с точностью ±0.5 Гц (первая часть поста). Все остальные будут обладать либо меньшей точностью, либо не будут независимыми!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

I'm back(:-).

Как можно на одном секундном интервале сделать 50k независимых измерений секундного интервала (пусть они даже будут пересекаться)?! На секундном интервале есть возможность сделать только одно независимое измерение с точностью ±0.5 Гц (первая часть поста). Все остальные будут обладать либо меньшей точностью, либо не будут независимыми!

Это очередное заблуждение, ну не хочет никто правильно думать(:-). Ладно, показываю. Надеюсь, не надо заново и подробно пояснять процесс получения пары чисел (N1,M1) в момент времени t1 и другой пары чисел (N2,M2) в момент времени t2=t1+1с? Теперь представьте себе, что в момент t3=t1+1мс вы получаете пару чисел (N3,M3), а в момент времени t4=t2+1мс вы получаете ещё одну пару чисел (N4,M4). Таким образом, через 1001мс от начала первого измерения вы получаете два независимых измерения входной частоты. Продолжая получать пары чисел каждые 1 мс, за одну секунду вы будете получать 1000 независимых измерений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заметил свою ошибку: посчитал Т2 шестнадцатиразрядным. Если в строке M2=(unsigned long int)Perepol_Timer2*65536+count_T2; вместо 65536 поставить 256, то работа частотомера становится стабильной (начиная со второго измерения). Однако частота индицируется равной 16384 Гц, а не 10000 Гц. Почему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите, пожалуйста, где ошибка в программе

Таймер2 всё-таки 8-разрядный, а не 16-разрядный, сдвиг нужен на 8. А так, вак вы делаете, можно и комплексные числа получить (:-).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На сайте pro-radio.ru, уважаемый GM продолжел свои разьяснения по поводу реализации и модернизации исходного кода. Если интересно, ссылка http://pro-radio.ru/controllers/5978/.

 

P.S. Я так и не смог приблизится к теоритической точности, но это проблемма не метода, а моя. Хреновый с меня програмист.

 

Моим методом (ну не совсем моим, он известен давно, просто я его приспособил к периферии аврки, в этом смысле он мой) за 1 с интервал вполне реально сделать 1000 НЕЗАВИСИМЫХ измерений, потом обработать результат, вот и всё обоснование.

Не подскажете где почитать про "родоначальника" :) вашего метода.

Изменено пользователем Яrik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я так и не смог приблизиться к теоретической точности, но это проблема не метода, а моя. Хреновый с меня программист

Не надо только самоуничижаться. Тут так - глаза боятся, а руки делают. И потом, Москва тоже не сразу строилась. Вам надо найти смелость отказаться от прерываний и перейти к опросу готовности захвата. Кроме того, можно перейти на проц с двумя схемами захвата, одна будет захватывать Ni, а другая Mi и у вас сразу всё получится, причём на си.

 

Что касается теоретической части, то посмотрите нижеследующие книги.

 

1) Дворяшин Б.В. Кузнецов Л.И. Радиотехнические измерения, 1978

 

2) Дворяшин Б. В. Основы метрологии и радиоизмерения, 1993

 

3) Дворяшин Б. В. Метрология и радиоизмерения, 2005

 

Если у кого есть последняя книга, с удовольствием бы посмотрел, чисто для ознакомления, надеюсь, Борис Владимирович не обидится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...