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

Измерение частоты через АЦП

Если один отсчёт АЦП например больше нуля, а следующий (через 1 мс) - меньше нуля, то можно между ними провести линейную интерполяцию сигнала и более точно определить момент перехода через 0.

По таким уточнённым переходам через 0 вычисляем период, а затем - частоту.

 

Если не очень спешим от ждём несколько периодов и по их суммарной длине вычисляем частоту. Но тут есть лучший вариант, на основе аппроксимации зависимости "время перехода через 0" от "номер по порядку перехода через 0" с помощью прямой по методу наименьших квадратов. Тогда частота - обратная величина к наклону этой прямой.

 

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


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

Поставить РС814 на переменку, транзистор оптопары на подтяжку +5 питания меги, заводи на прерывание меги и считай.

 

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


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

Поставить РС814 на переменку, транзистор оптопары на подтяжку +5 питания меги, заводи на прерывание меги и считай.

 

Я об этом думал ... По сути тот же компаратор.

Но у меня все замеры по 3-м каналам АЦП делаются в прерывании таймера (1 мс). Сам АЦП работет по опросу, без прерываний. Т.е. это прерывание "долгоиграющее".

Поэтому существует вероятность, что INT от оптопары или компаратора будет пропущено. В доке я что-то ничего про этот момент не нашёл :( , может плохо искал.... Если есть, ткните носом плиз.

 

Менять алгоритм не хотелось бы (уже всё отлажено), поэтому у меня и потекли мысли в сторону 2-го камня, который спокойно посчитает эту частоту, а потом легко отдаст её основному процу по какому-нибудь SPI (жаль только, что у тини нету железного SPI, эмулировать придётся ...). Когда цикл измерений закончен и "измеряющий" таймер выключен.

 

Тинька даже дешевле отдельных счётчика и компаратора. По крайней мере, по местным ценам. А если ещё задуматься о способе считывания этого счётчика, 3-стаб. буферы, там тем более 2-й проц и дешевле и удобнее.

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

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


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

Поэтому существует вероятность, что INT от оптопары или компаратора будет пропущено. В доке я что-то ничего про этот момент не нашёл :( , может плохо искал.... Если есть, ткните носом плиз.

Прерывания INTX старшие прерывания AVR и если уж они вкл. то проц их никогда не пропустит. Какая разрядность АЦП?

Вы можете посчитать сколько time уходит на одно преобразование Fadc Если укладываетесь в 20ms , то у Вас вполне остается время переключить входы и посчитать все значения на одном АЦП

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


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

Перепаял слегка схему, освободил 5 младших ног PORTB.

Задействовал встроенный в Mega16 компаратор - AIN- - ср. точка (она же ADC0), AIN+ - вх. сигнал напряжения (ADC1), включил прерывание компаратора по нарастанию сигнала, параллельно TC2 считает миллисекунды.

 

Куски кода:

 

// Timer 2 overflow interrupt service routine

// -- Частота прерываний 1 kHz = 1 мс - 20 раз за период 50 Гц (20мс)

// -- 1000 раз в секунду

interrupt [TIM2_OVF] void timer2_ovf_isr(void)

{

// Reinitialize Timer 2 value

TCNT2=0x83;

 

// Миллисекунды

ms++;

} // timer2_ovf_isr

 

// Analog Comparator interrupt service routine

// Переход синусоиды вверх через 0

interrupt [ANA_COMP] void ana_comp_isr(void)

{

pulses++;

} // ana_comp_isr

 

Расчёт частоты:

 

////////////////////////////////////////////////

// Частота

frequency = pulses*1000.0;

frequency/=ms;

 

ms, pulses - dword, frequency - float.

ms, pulses обнуляются только при первичной инициализации по включении питания.

 

"Измеряющий" таймер TC0 и АЦП пока выключены, т.е. прибор меряет только частоту.

Получил результаты 50.10 ... 50.30 Гц - бегает. Заводской прибор показывает 49.98-48.99 Гц :rolleyes:

 

Единствнное, что приходит в голову, это то, что переменные pulses и ms наверняка меняются, пока расчитывается частота. Когда-то я уже натыкался на это. Попробую ввести переменные-защёлки для них и кратковременный запрет прерываний.

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

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


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

Переменные-защёлки не помогли.

Стабильно показывает 50.37 Гц при 49.97 по прибору.

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


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

Вам же Палыч на первой странице показал алгоритм, а вы делаете всё наоборот.

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


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

woroba, не валите всё в одну кучу.

Замечания Палыча касаются измерения тока и напряжения.

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

 

Кстати - проверил внутренний компаратор основному алгоритму не мешает. Так что, К554СА3, наверное, не нужен.

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

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


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

А попробуйте пересчитать полученную погрешность измерения в свете используемого кварца на проце. У Вас же там не атомные часы подключены ? Наверняка что-нибудь из области 60 ppm ...

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

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


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

А попробуйте пересчитать полученную погрешность измерения в свете используемого кварца на проце. У Вас же там не атомные часы подключены ? Наверняка что-нибудь из области 60 ppm ...

 

А как пересчитать? Сделать генератор и померять прибором сколько Гц он выдаст?

Кварц хрен знает какой, родом из радиобазара :biggrin: ... На нём написано - MC 8.000 MHz.

Кстати, его корпус заземлять надо? Иногда в схемах с такое видел... У меня пока незаземлён.

 

Всё, что приходит в голову - ввести калибровочную константу и отнимать/прибавлять её (или делить/умножать - пока не знаю), как это делается с током и напряжением.

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

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


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

Кварц хрен знает какой, родом из радиобазара ... На нём написано - MC 8.000 MHz.

... без комментариев :)

P.S. "Пересчитать" - подразумевалось как эквивалент "А что Вас собственно удивляет ?" ...

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

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


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

Наверное, введу константу. Не будешь же делать тестовый генератор под каждый кварц....

 

Вот только какую константу лучше - для деления/умножения или прибавления/отнимания?

Пока мне думается второе.

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

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


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

Ну и что?

Про излучение цезия-133 ( http://metrologyia.ru/?page_id=103 ) я и так знаю :laughing:

А как мне это может помочь :laughing: ?

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

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


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

Замечания Палыча касаются измерения тока и напряжения.

Нет. Мои замечания выше касались именно подсчета частоты.

Что видно "невооруженным" глазом:

1. Запуск таймера не "привязан" к началу цикла (сброс в ноль переменной ms - это очень грубо!), поэтому таймер, скорее всего, насчитает "немного" меньше (частота получится "немного" больше).

2. ТС говорит выше о измерении за Х мс. За это время может быть зафиксиворанно только целое число периодов. "Нецелая" часть периода в расчете не участвует. Поскольку тики таймера гораздо меньше N периодов, то лучше (точнее) расчет будет за целое число периодов измеряемой величины. Т.е. окончанием измерения должно быть фиксация N периодов.

 

 

На нём написано - MC 8.000 MHz.

Кстати, посмотрите в справочной литературе: чем отличаются кварцы, на которых написано "8.000 MHz", от тех, где написано "8000 kHz"

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


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

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

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

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

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

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

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

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

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

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