Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Измерение частоты синусоиды на Xmega
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Leonmezon
Есть идея померить частоту синусоиды на Xmega с помощью компаратора, а именно есть синусоида частотой от 0 Гц до 1 кГЦ, амплитудой от 50 мВ до 1 В - смещаю ее на 1,25 В и подаю на ножку компаратора
и далее (в соответствии с даташитом стр. 331 таб. 27-1 режим RISING) я должен получать событие которое будет возникать только при положительном переходе сигнала через порог (т.е. фактически частота событий будет равна частоте синусоиды)
Вот код
Код
//Инициализация и включение аналогового компаратора 0 порта A для измерения частоты синусоидального сигнала с амплитудой от 50 мВ до 1В с смещением в положительную область на 1,25 В  
void init_AC(void)
{
    // Конфигурируем канал 0 на работу в несимметричном включении
    ACA.AC0CTRL |= AC_ENABLE_bm; //Разрешаем компаратор А канал 0
    ACA.AC0CTRL |= AC_INTMODE_RISING_gc; // Реагируем только по нарастающему фронту
    ACA.AC0CTRL &= ~AC_HSMODE_bm; //Установка нормального режима (не быстрого).
    ACA.AC0CTRL |= AC_HYSMODE_NO_gc; //Без гистерезиса
    ACA.AC0MUXCTRL |= AC_MUXPOS_PIN0_gc; //На неинвертирующий с 0 входа
    ACA.AC0MUXCTRL |= AC_MUXNEG_SCALER_gc; // На инвертирующий вход - от внутреннего делителя напряжения
    //ACA.CTRLA |= AC_AC0OUT_bm; // Выход на 7 ножке;
    ACA.CTRLB |= 0x16; // Коэффициент деления при напряжении питания 3,5 В при уровне среднего (смещение) 1,25 В, напряжение реагирования компаратора: b10110=0x16 - примерно 1,2578125В
    EVSYS.CH0MUX = EVSYS_CHMUX_ACA_CH0_gc;// Событие возникает при срабатывание компаратора A канал 0
    TCC1.CTRLA = TC_CLKSEL_EVCH0_gc; // перенаправляем событие на таймер/счетчик для дальнейшего подсчета
}
... и далее на таймере измеряю частоту сигнала

кто нибудь пребывал такие режимы? (и правильно ли я его понимаю).
Zlumd
Почитай еррату. С компаратором и Voltage Scalerом есть проблемы.
Амплитуда синусоиды всего 50 мВ. Не будет ли плавать порог, задаваемый Voltage Scalerом ?
У меня на Xmega128A1 не получилось Voltage Scaler запустить. Пришлось DAC использовать в качестве порога.
Может проще усилить в 100 раз внешним усилителем?
Leonmezon
1. Прочитал, кроме нелинейности (что вобщем плохо) - можно использовать, хотя можно и ЦАП подключить (это не проблема) на вход ref подается от ref192 2.5 В стабильных.
2. А вот по режиму RISING - может кто пробывал? (Как я понимаю, при переходе синусоиды через порог (возрастает сигнал) возникает событие, а вот при обратном переходе (уменьшается сигнал) - событие не возникает - так это или нет??? Вот главный вопрос - и в чем идея измерять частоту).
3. Хотелось бы обойтись одним ОУ (тем более изначально сигнал биполярный с разной (изменяется во времени) амплитудой от 50 мВ до 1 В и разной частотой) - фактически ОУ необходим чтобы поднять сигнал 1,25 В и дальше с ним работать, с начало вычислить частоту и дальше по 3 отсчетом (через 120 гр.) вычислить амплитуду - причем точность 1% по частоте и амплитуде будет достаточно.
Zlumd
Цитата(Leonmezon @ Aug 2 2011, 01:17) *
2. А вот по режиму RISING - может кто пробывал? (Как я понимаю, при переходе синусоиды через порог (возрастает сигнал) возникает событие, а вот при обратном переходе (уменьшается сигнал) - событие не возникает - так это или нет??? Вот главный вопрос - и в чем идея измерять частоту).
Да. Так. Я пробовал FALLING mode.
bob1
хмега32а4.
1. RISING и FALLING -работает. пробовал!!!
2. Voltage Scaler - тоже работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.