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

Всем привет!!!

Навалял частотомер на LPC2101 но при измерение скачут данные.

Может кто подскажет что можно сделать чтобы улучшить точность измерение.

Зарание всем спасибо.

lpc2101_FREQ.rar

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

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


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

385Кб архива... мдяяя

Вы б хоть для начала описали метод измерения, отображения (передачи?) полученных значений...

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


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

Вы б хоть для начала описали метод измерения, отображения (передачи?) полученных значений...

 

Метод измерение "временное окно".

Двумя таймерами считаю тактовую частоту и к-во входных импульсов.

Частоту вычисляю по формуле F = 72 000 000/Tтакт*Твх

Данные выводятся в терминал (57600).

В архиве есть схема в Протеусе.

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

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


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

Частоту вычисляю по формуле F = 72 000 000/Tтакт*Твх

Данные выводятся в терминал (57600).

В архиве есть схема в Протеусе.

приведите код (прерывания, вычисления)

пока вижу, что 72 000 000 отношения к лпц2101 имеет мало - у него максимальная 60 000 000 с "выкрученной на всю" (для данного камня) PLL

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


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

volatile long long ss,s1,s2,s3;

/* Init Timer 0   вхідна частота */
T0CCR  = 0x00000008;
T0CTCR = 0x00000001;
T0TCR  = 0x00000001;
/* Init Timer 1   частота ядра */
T1CTCR = 0x00000000;
T1CCR  = 0x00000001;
T1TCR  = 0x00000001;
/* Init Timer 2   відлік ширини вікна */
T2CTCR = 0x00000000;
T2PR   = 0x00001C20;
T2TCR  = 0x00000000;

T2TC = 0;
T1TC = 0;
T0TC = 0;
while (T0TC<1) {;}
T2TCR  = 0x00000001;
T1CCR  = 0x00000008;
Time =36000000+T1TC;
while (T1TC<36000000) {;}
//T0CR0 = T0TC;
T1CCR  = 0x00000000;
T0CCR  = 0x00000000;
T0TCR = 0x00000000;
T1TCR  = 0x00000000;
//======
s1 = (long long)T1CR1;
s1 -= (long long)T1CR0;
s2 = (long long)T0TC-1;
s3 = 72000000;
s3*=s2;
s3 = s3/s1; 

debug("\n Частота: %0\000",(long)s3);

 

P.S. На 72МГЦ 2101 нормально работает.

Изменено пользователем rezident
Оформление цитаты исходника.

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


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

P.S. На 72МГЦ 2101 нормально работает.

А у меня LPC2138 на 100 МГц работала нормально. И что с того? :)

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


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

и где здесь что? я говорю о полном коде функций

Изменено пользователем rezident
нарушение п.3.4. Правил форума.

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


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

и где здесь что? я говорю о полном коде функций

Так это и есть вся функция измерения частоты.

Результат в переменной s3.

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


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

Что-то подсказывает мне интуиция, что здесь что-то с методом нелады. По-подробнее бы: временные диаграммы, ссылку на литературу. В вашей формуле 72 МHz - это тактовая частота, Tтакт - это число импульсов тактовой частоты, а Твх - число импульсов измеряемой частоты, правильно ? Как формируете "временное окно" ? В каком диапазоне частот измеряете, и что за сигнал ? Как конкретно "скачут данные" ?

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


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

Что-то подсказывает мне интуиция, что здесь что-то с методом нелады. По-подробнее бы: временные диаграммы, ссылку на литературу. В вашей формуле 72 МHz - это тактовая частота, Tтакт - это число импульсов тактовой частоты, а Твх - число импульсов измеряемой частоты, правильно ?

Все верно.

Как формируете "временное окно" ? В каком диапазоне частот измеряете, и что за сигнал ? Как конкретно "скачут данные" ?

Time =36000000+T1TC;

while (T1TC<36000000) {;}

 

В каком диапазоне частот измеряете, и что за сигнал ? Как конкретно "скачут данные" ?

Частота до 20МГц.

Сигнал формирует кварцованый АВР.

Данные скачут в пределах 10Гц.

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


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

Частота до 20МГц.

Сигнал формирует кварцованый АВР.

Данные скачут в пределах 10Гц.

а на какой измеряемой частоте получаете разброс 10Гц?

ИМХО, если на 50Гц такой разброс - то да, есть о чем задуматься, а если измеряемая частота 20MHz - то погрешность в 10Гц очень даже себе

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


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

а на какой измеряемой частоте получаете разброс 10Гц?

ИМХО, если на 50Гц такой разброс - то да, есть о чем задуматься, а если измеряемая частота 20MHz - то погрешность в 10Гц очень даже себе

 

На частоте 12МГц.

Мне нужно погрешность макс. в 1Гц.

Я думаю это реально сделать.

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


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

На частоте 12МГц.

Мне нужно погрешность макс. в 1Гц.

Я думаю это реально сделать.

А кварц Вы взяли поди самый ширпотребный и пытаетесь от него получить сигнал со стабильностью 1Гц при 12МГц...так не бывает...по крайней мере не на ширпотребе...

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


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

А кварц Вы взяли поди самый ширпотребный и пытаетесь от него получить сигнал со стабильностью 1Гц при 12МГц...так не бывает...по крайней мере не на ширпотребе...

Частота скачет также в Proteus.

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


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

Все верно.

 

Time =36000000+T1TC;

while (T1TC<36000000) {;}

 

Понятно. С методом вроде ясно. Для "читабельности", пожалуй, так было бы лучше: F = (72 000 000/Tтакт)*Твх Погрешность квантования в вашем случае не зависит от измеряемой частоты и определяется как d=[1/(72 MHz x Time)] x 100 %. Для вашего случая (измеряемая частота 12 МГц, абсолютная погрешность 1 Гц), относительная погрешность должна быть 0,000008333 %. Проверьте, равно ли ваше время Time 0,17 секундам или больше, для того, чтобы получить относительную погрешность 0,000008333 % при образцовой частоте 72 MHz. Требования к образцовому кварцевому резонатору у вас будут действительно очень высоки: на уровне термостатированного кварцевого генератора, так что mrKiril тут совершенно прав.

 

Что касается Proteus, а "понимет" ли он 1Е-7 % порешность резонатора ? Возможно, и тут есть ограничение. Может, поэтому и "скачут" показания и на "железе" и в

Proteus.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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