maksimp 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Если один отсчёт АЦП например больше нуля, а следующий (через 1 мс) - меньше нуля, то можно между ними провести линейную интерполяцию сигнала и более точно определить момент перехода через 0. По таким уточнённым переходам через 0 вычисляем период, а затем - частоту. Если не очень спешим от ждём несколько периодов и по их суммарной длине вычисляем частоту. Но тут есть лучший вариант, на основе аппроксимации зависимости "время перехода через 0" от "номер по порядку перехода через 0" с помощью прямой по методу наименьших квадратов. Тогда частота - обратная величина к наклону этой прямой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pavel-pervomaysk 0 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Поставить РС814 на переменку, транзистор оптопары на подтяжку +5 питания меги, заводи на прерывание меги и считай. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 28 октября, 2011 Опубликовано 28 октября, 2011 (изменено) · Жалоба Поставить РС814 на переменку, транзистор оптопары на подтяжку +5 питания меги, заводи на прерывание меги и считай. Я об этом думал ... По сути тот же компаратор. Но у меня все замеры по 3-м каналам АЦП делаются в прерывании таймера (1 мс). Сам АЦП работет по опросу, без прерываний. Т.е. это прерывание "долгоиграющее". Поэтому существует вероятность, что INT от оптопары или компаратора будет пропущено. В доке я что-то ничего про этот момент не нашёл :( , может плохо искал.... Если есть, ткните носом плиз. Менять алгоритм не хотелось бы (уже всё отлажено), поэтому у меня и потекли мысли в сторону 2-го камня, который спокойно посчитает эту частоту, а потом легко отдаст её основному процу по какому-нибудь SPI (жаль только, что у тини нету железного SPI, эмулировать придётся ...). Когда цикл измерений закончен и "измеряющий" таймер выключен. Тинька даже дешевле отдельных счётчика и компаратора. По крайней мере, по местным ценам. А если ещё задуматься о способе считывания этого счётчика, 3-стаб. буферы, там тем более 2-й проц и дешевле и удобнее. Изменено 28 октября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 28 октября, 2011 Опубликовано 28 октября, 2011 · Жалоба Поэтому существует вероятность, что INT от оптопары или компаратора будет пропущено. В доке я что-то ничего про этот момент не нашёл :( , может плохо искал.... Если есть, ткните носом плиз. Прерывания INTX старшие прерывания AVR и если уж они вкл. то проц их никогда не пропустит. Какая разрядность АЦП? Вы можете посчитать сколько time уходит на одно преобразование Если укладываетесь в 20ms , то у Вас вполне остается время переключить входы и посчитать все значения на одном АЦП Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 30 октября, 2011 Опубликовано 30 октября, 2011 (изменено) · Жалоба Перепаял слегка схему, освободил 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 наверняка меняются, пока расчитывается частота. Когда-то я уже натыкался на это. Попробую ввести переменные-защёлки для них и кратковременный запрет прерываний. Изменено 30 октября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 30 октября, 2011 Опубликовано 30 октября, 2011 · Жалоба Переменные-защёлки не помогли. Стабильно показывает 50.37 Гц при 49.97 по прибору. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
woroba 0 30 октября, 2011 Опубликовано 30 октября, 2011 · Жалоба Вам же Палыч на первой странице показал алгоритм, а вы делаете всё наоборот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 30 октября, 2011 Опубликовано 30 октября, 2011 (изменено) · Жалоба woroba, не валите всё в одну кучу. Замечания Палыча касаются измерения тока и напряжения. К измерению частоты через компаратор они не относятся, хотя бы потому, что аналогового компаратора тогда не было. Кстати - проверил внутренний компаратор основному алгоритму не мешает. Так что, К554СА3, наверное, не нужен. Изменено 31 октября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrGluck 0 31 октября, 2011 Опубликовано 31 октября, 2011 (изменено) · Жалоба А попробуйте пересчитать полученную погрешность измерения в свете используемого кварца на проце. У Вас же там не атомные часы подключены ? Наверняка что-нибудь из области 60 ppm ... Изменено 31 октября, 2011 пользователем DrGluck Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 31 октября, 2011 Опубликовано 31 октября, 2011 (изменено) · Жалоба А попробуйте пересчитать полученную погрешность измерения в свете используемого кварца на проце. У Вас же там не атомные часы подключены ? Наверняка что-нибудь из области 60 ppm ... А как пересчитать? Сделать генератор и померять прибором сколько Гц он выдаст? Кварц хрен знает какой, родом из радиобазара ... На нём написано - MC 8.000 MHz. Кстати, его корпус заземлять надо? Иногда в схемах с такое видел... У меня пока незаземлён. Всё, что приходит в голову - ввести калибровочную константу и отнимать/прибавлять её (или делить/умножать - пока не знаю), как это делается с током и напряжением. Изменено 31 октября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrGluck 0 31 октября, 2011 Опубликовано 31 октября, 2011 (изменено) · Жалоба Кварц хрен знает какой, родом из радиобазара ... На нём написано - MC 8.000 MHz. ... без комментариев :) P.S. "Пересчитать" - подразумевалось как эквивалент "А что Вас собственно удивляет ?" ... Изменено 31 октября, 2011 пользователем DrGluck Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 31 октября, 2011 Опубликовано 31 октября, 2011 (изменено) · Жалоба Наверное, введу константу. Не будешь же делать тестовый генератор под каждый кварц.... Вот только какую константу лучше - для деления/умножения или прибавления/отнимания? Пока мне думается второе. Изменено 31 октября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DrGluck 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба http://metrologyia.ru/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 31 октября, 2011 Опубликовано 31 октября, 2011 (изменено) · Жалоба Ну и что? Про излучение цезия-133 ( http://metrologyia.ru/?page_id=103 ) я и так знаю :laughing: А как мне это может помочь :laughing: ? Изменено 31 октября, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 8 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Замечания Палыча касаются измерения тока и напряжения. Нет. Мои замечания выше касались именно подсчета частоты. Что видно "невооруженным" глазом: 1. Запуск таймера не "привязан" к началу цикла (сброс в ноль переменной ms - это очень грубо!), поэтому таймер, скорее всего, насчитает "немного" меньше (частота получится "немного" больше). 2. ТС говорит выше о измерении за Х мс. За это время может быть зафиксиворанно только целое число периодов. "Нецелая" часть периода в расчете не участвует. Поскольку тики таймера гораздо меньше N периодов, то лучше (точнее) расчет будет за целое число периодов измеряемой величины. Т.е. окончанием измерения должно быть фиксация N периодов. На нём написано - MC 8.000 MHz. Кстати, посмотрите в справочной литературе: чем отличаются кварцы, на которых написано "8.000 MHz", от тех, где написано "8000 kHz" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться