Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
403
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

Для десятиразрядного АЦП и десятичного ряда пределов или

в зависимости от того является предельным код или (см. раздел 1.15.9). Для двоичного ряда или .

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

Возможен и другой способ, а именно в каждом цикле измерения перебирать по очереди все пределы, начиная с самого грубого. Останавливать перебор нужно как только код окажется достаточно велик. А именно: для десятичного ряда не менее 100 () или 103 (); для двоичного — не менее 500 () или 512 (). Пороги переключения здесь не занижаются на 5–10%, так как нет гистерезиса (переключение осуществляется всегда только в направлении повышения чувствительности).

Стоит обсудить выбор пределов при цифровом измерении параметров переменного сигнала (см. раздел 3.14). При этом результат вычисляется на основе последовательности нескольких мгновенных значений (от единиц до тысяч). Можно рекомендовать понижать чувствительность, если хотя бы одно мгновенное значение выходит за верхнюю границу, а понижать, если все мгновенные значения в последовательности оказались ниже нижней границы.

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

Переключение пределов требуется учитывать при программном масштабировании. В формуле (1.15.5) величина окажется зависимой от текущего предела. Можно создать в памяти массив значений для каждого предела или же вычислять по номеру предела.

3.14 Измерение параметров уровня переменного напряжения

3.14.1 Задание

Разработать программу для измерения и индикации действующих значений переменных напряжений на входах AIN0.1 (P0.28) и AIN0.2 (P0.29).

3.14.2 Основные рекомендации

Известно, что действующее значение определяется через квадратный корень из среднего квадрата мгновенных значений напряжения. Если период напряжения известен заранее, то можно выполнять усреднение по периоду. Однако на практике нередко период трудно определить точно, например, изза интенсивных помех. Тогда усреднение достигается применением фильтра нижних частот.

210

В данном случае в качестве фильтра может быть рекомендован нерекурсивный фильтр на основе окна Кайзера [5]. Тогда действующее значение вычисляется по формуле

,

(3.14.1)

где — число дискретных отсчетов напряжения; — дискретные отсчеты напряжения; — дискретные отсчеты оконной (весовой) функции Кайзера.

Файл, содержащий, массив из отсчетов функции Filter.h предоставляется преподавателем.

Предлагается следующий общий подход. АЦП, как и в предыдущей работе запускается сигналом от таймера. Считывание результатов АЦП также производится в процедуре обработки прерываний от АЦП. В отличие от предыдущей программы здесь необходимо накапливать 1000 результатов измерений и устанавливать флаг готовности. При этом основная программа приступает к обработке (в том числе фильтрации) накопленных данных, а преобразование переключатся на другой канал, причем результаты сохраняются в другой массив.

3.14.3 Алгоритм основной программы

К программе необходимо подключить файлы STDIO.h, math.h, LCD.c, Filter.h.

Программа использует следующие глобальные переменные:

а) u — целочисленный массив размерностью 2x1000 для хранения таблицы дискретных отсчетов напряжения (по 1000 отсчетов для каждого канала);

б) k — целочисленный счетчик отсчетов (начальное значение 0); в) C — номер текущего канала: 0 или 1 (начальное значение 0);

г) ReadyFlag — флаг готовности таблицы к обработке (начальное значение 0);

д) в подключенном файле Filter.h содержится описание массива констант w в формате с плавающей точкой.

Локальные переменные основной программы: а) i — целочисленный счетчик;

б) U — переменная с плавающей точкой предназначена для хранения вычисленного действующего значения;

в) S — строка из десяти символов для хранения индицируемых сим-

волов.

Блок схема алгоритма показана на рисунке 3.14.1 1–5. Пункты 1–5 основной программы абсолютно идентичны преды-

дущему решению.

6.Блоки, начиная с седьмого, выполняются только при условии равенства единицы флага готовности.

7.Переменная U далее будет использоваться для накопления суммы (3.14.1), поэтому здесь должна обнуляться.

211

Основная программа Начало

1 Выбор режима линии

P0.28, P0.29

2 Инициализация

ЖКИ

3 Настройка таймера и

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

4

Настройка АЦП

5

Настройка системы

 

 

 

прерываний

 

 

 

Нет

6

 

 

 

 

ReadyFlag=1

 

 

 

 

Да

 

 

 

7

U=0

 

 

 

 

 

 

 

Нет

8

Да

 

 

i=0; i<999; i++

 

 

 

 

10

1/2

 

 

 

U=U

Vref/1024

 

 

 

 

 

11

 

 

9

2

Формирование

 

U=U+u[!C][i] ·w[i]

строки символов

 

 

12

 

 

 

 

Вывод строки на ЖКИ

 

 

13

 

 

 

 

ReadyFlag=0

 

 

 

Процедура обработки

 

прерывания от АЦП

 

Начало

 

1

 

Сохранение и

 

масштабирование

 

результата в u[С][k]

 

2

 

k = k+1

Нет

3

 

k > 999

 

Да

4

k = 0

5

С= !С

6

Переключение

канала АЦП

7

ReadyFlag = 1

8

Инициализация

системы прерываний Возврат

Рисунок 3.14.1 – Алгоритм программы измерения действующего значения напряжения

8–9. С помощью цикла for организовать вычисления по той же формуле (3.14.1). Предлагается следующая конструкция:

for (i=0; i<1000; i++) U+=u[!C][i]*u[!C][i]*w[i];

В процессе вычислений переменная C указывает номер канала, в котором производятся измерения. Здесь же нужен номер канала, измерения для кото-

212