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

Views: 1407


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

Способ первый.

Необходимо за фиксированный промежуток времени подсчитать количество периодов измеряемой частоты. После этого необходимо количество импульсов разделить на время измерения. Точность измерения зависит от длительности измеряемого промежутка времени. Чем длиннее промежуток, тем точнее можно выполнить изменения.

 PIC24-08-01

 Второй способ.

Это измерять длительность одного периода и вычислитель частоту. Точность измерения зависит от частоты тактовых импульсов, чем выше и стабильней частота тактовых импульсов тем выше разрешение и точнее измерения.

 PIC24-08-02

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

Для измерения частоты (в нашем варианте частоты электросети), модифицируем нашу схему следующим образом.

 PIC24-08-04

Все эти измерения можно выполнить при помощи встроенного таймера. Так-как у нас таймер 1 и 2 занят формированием временных интервалом. Поэтому  будем для измерения частоты использовать сборку на таймерах TMR4 и TMR5. Для входа сигнала будем использовать Т4СК.

PIC24-08-03

Так как периферийные модули по умолчанию “никуда не подключен”, то первым делом необходимо настроить регистры конфигурации выбора периферийного модуля. Нам надо определиться к какой ножке микроконтроллера мы подключим его вход. У нас свободна 14 нога. Это функция RP5. Для подключения входа T4CK к ноге 14 на необходимо в регистра настройки входа RPINR4 загрузить значение 5.

Для настройки входа таймера обратимся к регистрам управления входами периферийных устройств.

Название входа Имя периферийного модуля Регистр Биты конфигурации
External Interrupt 1 INT1 RPINR0 INTR1<4:0>
External Interrupt 2 INT2 RPINR1 INTR2R<4:0>
Timer2 External Clock T2CK RPINR3 T2CKR<4:0>
Timer3 External Clock T3CK RPINR3 T3CKR<4:0>
Timer4 External Clock T4CK RPINR4 T4CKR<4:0>
Timer5 External Clock T5CK RPINR4 T5CKR<4:0>
Input Capture 1 IC1 RPINR7 IC1R<4:0>
Input Capture 2 IC2 RPINR7 IC2R<4:0>
Input Capture 3 IC3 RPINR8 IC3R<4:0>
Input Capture 4 IC4 RPINR8 IC4R<4:0>
Input Capture 5 IC5 RPINR9 IC5R<4:0>
Output Compare Fault A OCFA RPINR11 OCFAR<4:0>
Output Compare Fault B OCFB RPINR11 OCFBR<4:0>
UART1 Receive U1RX RPINR18 U1RXR<4:0>
UART1 Clear To Send U1CTS RPINR18 U1CTSR<4:0>
UART2 Receive U2RX RPINR19 U2RXR<4:0>
UART2 Clear To Send U2CTS RPINR19 U2CTSR<4:0>
SPI1 Data Input SDI1 RPINR20 SDI1R<4:0>
SPI1 Clock Input SCK1IN RPINR20 SCK1R<4:0>
SPI1 Slave Select Input SS1IN RPINR21 SS1R<4:0>
SPI2 Data Input SDI2 RPINR22 SDI2R<4:0>
SPI2 Clock Input SCK2IN RPINR22 SCK2R<4:0>
SPI2 Slave Select Input SS2IN RPINR23 SS2R<4:0>

Функции ввода

Функция Номер ножки Код для записи в регистр
RP0 4 0
RP1 5 1
RP2 6 2
RP3 7 3
RP4 11 4
RP5 14 5
RP6 15 6
RP7 16 7
RP8 17 8
RP9 18 9
RP10 21 10
RP11 22 11
RP12 23 12
RP13 24 13
RP14 25 14
RP15 26 15

Настройка входа таймера:

        RPINR4bits.T4CKR=5;  // настройка входа таймера 4 на вывод 14 микроконтроллера (RP5)
	TRISB = 0b0000000000100000;	// разряды порта B на выход, кроме RB5

Конфигурирование таймеров: (будем настраивать для 32 битного режима):

Чтобы настроить Timer2/3 или Timer4/5 для 32-разрядной работы необходимо:
1. Установить T32 бит (T2CON <3> или T4CON <3> = 1).
2. Настроить предделителя для Timer2 или Timer4 битами TCKPS1: TCKPS0.
3. Настроить вход для тактовых импульсов и режимов работы с помощью TCS и TGATE бит. Если TCS установлен для внешней синхронизации, RPINRx (TxCK) должны быть настроены на доступные RPn вход.
4. Настроить период работы таймера загрузив регистр PR. PR3 (или PR5) будет содержат старшее слово, в то время как PR2 (или PR4) содержать младшие слово.
5. Если требуется прерывания, установить биты в регистрах T3IE или T5IE; использовать приоритет бит, T3IP2: T3IP0 или T5IP2: T5IP0, чтобы установить прерывание приоритет. Обратите внимание, что в то время как Timer2 или Timer4 управления таймера, прерывания появляется как Timer3 или Timer5 прерывания.
6. Установить TON бит (= 1). 

//---------------------------------------------------------------------------
// настройка тамера TMR4
	T4CON=0b1010000000001010;
//		|||||||||||||||+-- неиспользуемый
//		||||||||||||||+--- TCS: 1 - внешний источник
//		|||||||||||||+---- неиспользуемый
//		||||||||||||+----- T32: 0- 32 битный режим
//		||||||||||++------ TCKPS1:TCKPS0: пределитель 00-1:1
//		|||||||||+-------- TGATE: - отключен
//		|||++++++--------- неиспользуемые
//		||+--------------- TSIDL: 1- врежиме Idle отключен
//		|+---------------- неиспользуемый
//		+----------------- TON: 1 - таймер включен
	PR2=0xFFFF;	// период счета
//---------------------------------------------------------------------------

 Для работы нашей схемы нам необходимо на 14 ножку контроллера подключить подтягивающий резистор. За активацию подтягивающих резисторов отвечают регистры CNPU1 и CNPU2. Для нашего контроллера соответствие с выводами контроллера следующее:

Регистр Управляющий бит Вывод контроллера
CNPU1 CN0PUE 12
CNPU1 CN1PUE 11
CNPU1 CN2PUE 2
CNPU1 CN2PUE 3
CNPU1 CN3PUE 4
CNPU1 CN4PUE 5
CNPU1 CN5PUE 6
CNPU1 CN6PUE 7
CNPU1 CN7PUE
CNPU1 CN8PUE
CNPU1 CN9PUE
CNPU1 CN10PUE
CNPU1 CN11PUE 26
CNPU1 CN12PUE 25
CNPU1 CN13PUE 24
CNPU1 CN14PUE 23
CNPU1 CN15PUE 22
CNPU2 CN16PUE 21
CNPU2 CN17PUE
CNPU2 CN18PUE
CNPU2 CN19PUE
CNPU2 CN20PUE
CNPU2 CN21PUE 18
CNPU2 CN22PUE 17
CNPU2 CN23PUE 16
CNPU2 CN24PUE 15
CNPU2 CN25PUE
CNPU2 CN26PUE
CNPU2 CN27PUE 14
CNPU2 CN28PUE
CNPU2 CN29PUE 10
CNPU2 CN30PUE 9

Для подключение подтягивающего резистора к ножке 14 , необходимо выполнить команду

        CNPU2bits.CN27PUE=1;    // подключить к 14 ножке подтягивающий резистор

 Так как в нашем примере, мы используем внутренний тактовый генератор, то измерения соответственно будет менее точные если бы мы использовали кварцевую стабилизацию частоты. Для корректировки длительности, будем использовать регистр PR1.

Для измерения частоты, добавить в цикл прерывания от таймера Т1 две команды:

        // измерение частоты
        chastota=TMR4;
        TMR4=0;

 т.е. таймер Т1 формирует заданный нами интервал времени, по прерыванию таймера , мы считываемым значение таймера Т4, а затем обнуляем его.

Для индикации в главном цикле программы добавим

        curcorG_LCD (30,0);
        bin_dec(chastota ,0,0,0);
        Stringp_LCD (" герц",0,1,1);

 теперь внизу дисплея мы увидим измеряемую частоту в герцах. Если период измерения 1 секунда, то измерять будем с точностью до 1 Герца, для увеличение точности до 0,1 Герца или 0,01 герца, нам надо соответственно увеличить время измерения.

 Фото для первого варианта, когда период измерения равен 1 секунде.

 PIC24-08-05

 Но для контроля качества частоты в сети нам необходимо более высокая точность, поэтому увеличим период измерения до 10 секунд. Для это нам необходимо добавить делитель, программный, чтобы увеличить время измерения до 10 секунд.

        // измерение частоты
        if(++chetgerc>9)
        {
            chetgerc=0;
            chastota=TMR4;
            TMR4=0;
        }

а для красоты, индикации десятых долей, включит индикацию запятой перед младшим разрядом.

        curcorG_LCD (30,0);
        bin_dec(chastota ,1,0,0);
        Stringp_LCD (" герц",0,1,1);

 pic24-08-0610 секунд на измерение это уже много. А если необходимо измерять частоту с точностью до 0,01 Герца, так это надо ждать 100 СЕКУНД!!!, а эффект усреднения который может за это время внести свои погрешности. Вообще сделаем вывод, для оперативного контроля частоты электросети такой метод не эффективен. Хотя при написании этого урока, наблюдая за частотой сети, она колебалась от 50,04 – 50,31 Герца (в режиме измерения 100 секунд). 

Испробуем второй метод измерения длительности периода (или импульса). Благо, что сам модуль микроконтроллера позволяет это делать.

 

продолжение следует…


Это может быть интересно


  • Проект с использованием MCC часть 03Проект с использованием MCC часть 03
    Views: 1591 Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки …
  • Стабилизатор тока для светодиодов SN3350Стабилизатор тока для светодиодов SN3350
    Views: 2601 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V  драйвер светодиодов с внутренним ключом  SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
  • Простой сенсорный регулятор светаПростой сенсорный регулятор света
    Views: 2319 Простой сенсорный регулятор. Проект – 2007 года. Регулятор выполнена на микроконтроллере PIC12F683 и имеет минимальное количество элементов. Выполняет стандартные функции, включение выключение света, изменение яркости, запоминание последнего установленного уровня …
  • Мультизоновый индикатор-терморегулятор ch-c3010Мультизоновый индикатор-терморегулятор ch-c3010
    Views: 1173 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре,  температуру на улице, а в погребе (или на балконе) …
  • Проект с использованием MCC часть 16Проект с использованием MCC часть 16
    Views: 1089 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …
  • CAN – Controller Area NetworkCAN – Controller Area Network
    Views: 1106 Controller Area Network (CAN) первоначально был создан немецким поставщиком автомобильных систем Робертом Бош в середины 1980-х для автомобильной промышленности как метод для обеспечения возможности надежной последовательной связи. Целью было сделать автомобили более надежными, …
  • WiFi ESP8266 – AT команды связанные с функцией Wi-FiWiFi ESP8266 – AT команды связанные с функцией Wi-Fi
    Views: 5303 AT команды связанные с функцией Wi-Fi Функции Wi-Fi подключения, запускаться из командной строки Команда Описание  1 AT+CWMODE Проверка, настройка режима работы Wi-Fi (sta/AP/sta+AP), (не рекомендуется для новых проектов). 2 …
  • Ссылки на интересные источникиСсылки на интересные источники
    Views: 845 Сбор 3D моделей от André L’Hérault конденсаторы, резисторы, индуктивности dropbox IPC-SM-782 Surface Mount Design and Land Pattern Standard Видео уроки по Altium designer Alexey Sabunin https://www.youtube.com/channel/UCG7N5CqXpyK8nQjr1EmMgng Сергей Булавинов https://www.youtube.com/channel/UCISAMXRnN_Qw9UTjUwZI1Jw Robert Feranec https://www.youtube.com/user/matarofe …
  • Real-time music visualization technologyReal-time music visualization technology
    Views: 125 Music visualization technology in real time (RTMV-technology). Я не музикант і я не маю спеціальної музичної освіти, я інженер розробник вбудованих систем. Але моє хобі розроблення технології візуалізації …
  • Altium Designer – подготовка документации для производства и сборки печатных платAltium Designer – подготовка документации для производства и сборки печатных плат
    Views: 3678 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …


Поделись этим!