Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпус_1 / mk51 / Книги / ПРОЕКТ_ МПС.doc
Скачиваний:
192
Добавлен:
11.05.2015
Размер:
1.58 Mб
Скачать

8. Пример выполнения курсового проекта измеритель частоты сети

Техническое задание. Спроектировать цифровой измеритель частоты сети. На цифровые индикаторы выводятся три цифры (например, 51.7), т.е. значение частоты с точностью до десятых долей герца. Диапазон измеряемых частот от 20 до 99 Гц. Время измерения – не более 1 с.

Обоснование алгоритма решения задачи

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

Другой способ основан на измерении периода сетевого напряжения и оценке частоты по формуле f = 1/T. Если период измерять в секундах, то получаем значение частоты в герцах. Точность определения частоты зависит от точности измерения периода и точности выполнения операции деления. При использовании микроконтроллеров следует ориентироваться на работу с целыми числами. Типичные погрешности, учитываемые при этом – погрешность дискретизации и погрешность округления.

Будем измерять период сети в микросекундах. Для типового значения частоты 50 Гц период T составляет 20000 мкс. С помощью 16-разрядного таймера, работающего на частоте 1 МГц, можно измерить период до 65 мс, что соответствует частоте порядка 17 Гц. При частоте 99 Гц период равен 10101 мкс, т.е. таймер позволит измерить его с высокой точностью (погрешность дискретизации порядка 0,01%).

Основное рабочее соотношение f .

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

и после вычисления f в виде трехразрядного десятичного числа добавлять точку перед последней цифрой при выводе информации на табло. Например, при Т=20500 мкс получаем и. На цифровых индикаторах нужно зажечь значение частоты 48.8 Гц.

Выбираем микроконтроллер ATmega16 с кварцем на 8 МГц (время выполнения простейших команд 1/8 мкс). Функциональная схема устройства с распределением функций портов показана на рис.11. Порт РА используется для вывода информации на индикаторную панель. Порт РВ используется для программирования микроконтроллера (например, с помощью интерфейса «пять проводков» он подключается к СОМ-порту персонального компьютера).

Прямоугольные импульсы с частотой сети, формируемые на выходе триггера Шмидта, будем подавать на вход INT0 (вторая линия порта PD). Запустив в основной программе таймер/счетчик Т1 в требуемый режим работы, поручим основные функции по решению задачи подпрограмме внешнего аппаратного прерывания по нарастающему фронту INT0:

  • Останов Т1

  • Чтение периода (TCNT1L+TCNT1H*256)

  • Сброс Т1

  • Новый запуск Т1

  • Вычисление значения частоты

  • Вывод данных на индикаторную панель

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

Рисунок 11 – Функциональная схема измерителя частоты сети

Разработка прикладной программы

Последовательность шагов по разработке и отладке программы может быть следующей (проект формируем в папке z10):

1. Создаем новый проект выбирая:

File→New→Select Project

2. Выбираем использование CodeWizardAVR:

Use the CodeWizard?→Yes

3. В окнах CodeWizardAVR фиксируем тип МК и рабочую частоту:

Chip→Chip: ATmega16→Clock: 8MHz

4. Конфигурируем LCD-дисплей: LCD→PORTA→16

5. Конфигурируем Timer1: Timers→Timer1→

Clock Value: 1000kHz→Interrupt off: Timer1 Overflow→Val: 0xFFFF

6. Настраиваем прерывания: External IRQ→INT0 Enabled→Rising Edge

7. Генерируем файлы C source, C project и CodeWizardAVR project выбирая:

File|Generate, Save and Exit→

Create new directory: C:\cvavr\z10→

Save: z10.c→Save: z10.prj →Save: z10.cwp

8. Редактируем код C source (основная творческая часть по реализации алгоритма)

9. Смотрим или модифицируем конфигурацию проекта выбирая Project→Configure→After Make→Program the Chip

10. Компилируем программу выбирая:

Project→Make

11. Автоматически программируем ATmega16 на STK500:

Apply power→Information→Program.

Ниже приведен текст программы на языке Си. Для обеспечения возможности выводить на LCD-дисплей русские буквы в программу добавлена таблица кодов и необходимая функция. Большую часть времени МК находится в цикле основной программы.

/*****************************************************

This program was produced by the

CodeWizardAVR V1.25.7 beta 5 Standard

Automatic Program Generator

© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.

http://www.hpinfotech.com

Project : Измеритель частоты сети

Соседние файлы в папке Книги