Alexey_1811 0 16 июня, 2010 Опубликовано 16 июня, 2010 (изменено) · Жалоба Всем привет!!! Навалял частотомер на LPC2101 но при измерение скачут данные. Может кто подскажет что можно сделать чтобы улучшить точность измерение. Зарание всем спасибо. lpc2101_FREQ.rar Изменено 16 июня, 2010 пользователем Alex_1811 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 16 июня, 2010 Опубликовано 16 июня, 2010 · Жалоба 385Кб архива... мдяяя Вы б хоть для начала описали метод измерения, отображения (передачи?) полученных значений... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey_1811 0 16 июня, 2010 Опубликовано 16 июня, 2010 (изменено) · Жалоба Вы б хоть для начала описали метод измерения, отображения (передачи?) полученных значений... Метод измерение "временное окно". Двумя таймерами считаю тактовую частоту и к-во входных импульсов. Частоту вычисляю по формуле F = 72 000 000/Tтакт*Твх Данные выводятся в терминал (57600). В архиве есть схема в Протеусе. Изменено 16 июня, 2010 пользователем Alex_1811 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 16 июня, 2010 Опубликовано 16 июня, 2010 · Жалоба Частоту вычисляю по формуле F = 72 000 000/Tтакт*Твх Данные выводятся в терминал (57600). В архиве есть схема в Протеусе. приведите код (прерывания, вычисления) пока вижу, что 72 000 000 отношения к лпц2101 имеет мало - у него максимальная 60 000 000 с "выкрученной на всю" (для данного камня) PLL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey_1811 0 16 июня, 2010 Опубликовано 16 июня, 2010 (изменено) · Жалоба 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 нормально работает. Изменено 16 июня, 2010 пользователем rezident Оформление цитаты исходника. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба P.S. На 72МГЦ 2101 нормально работает. А у меня LPC2138 на 100 МГц работала нормально. И что с того? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 17 июня, 2010 Опубликовано 17 июня, 2010 (изменено) · Жалоба и где здесь что? я говорю о полном коде функций Изменено 18 июня, 2010 пользователем rezident нарушение п.3.4. Правил форума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey_1811 0 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба и где здесь что? я говорю о полном коде функций Так это и есть вся функция измерения частоты. Результат в переменной s3. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syurish 0 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба Что-то подсказывает мне интуиция, что здесь что-то с методом нелады. По-подробнее бы: временные диаграммы, ссылку на литературу. В вашей формуле 72 МHz - это тактовая частота, Tтакт - это число импульсов тактовой частоты, а Твх - число импульсов измеряемой частоты, правильно ? Как формируете "временное окно" ? В каком диапазоне частот измеряете, и что за сигнал ? Как конкретно "скачут данные" ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey_1811 0 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба Что-то подсказывает мне интуиция, что здесь что-то с методом нелады. По-подробнее бы: временные диаграммы, ссылку на литературу. В вашей формуле 72 МHz - это тактовая частота, Tтакт - это число импульсов тактовой частоты, а Твх - число импульсов измеряемой частоты, правильно ? Все верно. Как формируете "временное окно" ? В каком диапазоне частот измеряете, и что за сигнал ? Как конкретно "скачут данные" ? Time =36000000+T1TC; while (T1TC<36000000) {;} В каком диапазоне частот измеряете, и что за сигнал ? Как конкретно "скачут данные" ? Частота до 20МГц. Сигнал формирует кварцованый АВР. Данные скачут в пределах 10Гц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба Частота до 20МГц. Сигнал формирует кварцованый АВР. Данные скачут в пределах 10Гц. а на какой измеряемой частоте получаете разброс 10Гц? ИМХО, если на 50Гц такой разброс - то да, есть о чем задуматься, а если измеряемая частота 20MHz - то погрешность в 10Гц очень даже себе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey_1811 0 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба а на какой измеряемой частоте получаете разброс 10Гц? ИМХО, если на 50Гц такой разброс - то да, есть о чем задуматься, а если измеряемая частота 20MHz - то погрешность в 10Гц очень даже себе На частоте 12МГц. Мне нужно погрешность макс. в 1Гц. Я думаю это реально сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mrKirill 1 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба На частоте 12МГц. Мне нужно погрешность макс. в 1Гц. Я думаю это реально сделать. А кварц Вы взяли поди самый ширпотребный и пытаетесь от него получить сигнал со стабильностью 1Гц при 12МГц...так не бывает...по крайней мере не на ширпотребе... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexey_1811 0 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба А кварц Вы взяли поди самый ширпотребный и пытаетесь от него получить сигнал со стабильностью 1Гц при 12МГц...так не бывает...по крайней мере не на ширпотребе... Частота скачет также в Proteus. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
syurish 0 17 июня, 2010 Опубликовано 17 июня, 2010 · Жалоба Все верно. 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться