регистрация / вход

Автоматический фазометр

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

Содержание

Введение

1. Выбор структуры автоматического фазометра

2. Расчет блока питания

3. Разработка алгоритма работы программы

4. Описание алгоритма программы для МК

5. Программа для МК

6. Описание алгоритма программы для ПК

7. Программа для ПК

Выводы


Введение

Фазометр - электроизмерительный прибор, предназначенный для измерения углов сдвига фаз между двумя изменяющимися периодически электрическими колебаниями.Фазой гармонического напряжения

U(t)=Um sin(ωt+φ0 )

называется аргумент функции U(t), описывающей колебательный процесс. Фаза гармонического напряжения является линейной функцией времени. Угол сдвига фаз представляет собой модуль разности фаз двух гармонических сигналов U1 (t) bU2 (t) одинаковой частоты. Таким образом, если

U1 (t)=U1 m sin(ωt+φ1 ), aU2 (t)=U2 m sin(ωt+φ2 ),

то по определению угол сдвига фаз Δφ равен Δφ=|φ1 - φ2 |. Если φ1 и φ2 постоянные, то Δφ+ от времени не зависит. При Δφ = 0 гармонические напряжения называются синфазными, при Δφ = ±π - противофазными. Выбор метода измерения угла сдвига фаз зависит от диапазона частот, амплитуды сигнала и от требуемой точности измерения. Измерение угла сдвига фаз может выполняться как методом непосредственной оценки, так и методом сравнения. Результат измерения выражается либо в градусах, либо в радианах. Измерительные приборы, специально предназначенные для измерения угла сдвига фаз, называются фазометрами.

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

Фазометры с непосредственным преобразованием значения длительности временного интервала в код в свою очередь подразделяются на две группы: с измерением за один период входных напряжений и с измерением за несколько периодов входных напряжений. Фазометры первой группы называются фазометрами мгновенного значения, а второй группы - фазометрами среднего значения. Фазометры среднего значения, называемые также фазометрами с постоянным временем измерения, благодаря хорошим характеристикам получили наибольшее распространение.


1. Выбор структуры автоматического фазометра

Для нахождения фазы сигнала проще всего измерять время между прохождением эталонного и измеряемого сигналов через ноль t± . При этом зная частоту измеряемого сигнала можно найти его фазу исходя из следующей формулы:

(1),

где t± - время между прохождением эталонного и измеряемого сигнала через ноль, f – частота измеряемого сигнала, множитель 360 переводит безразмерную величину в градусы.

Исходя из того, что данные измерений следует передавать в компьютер через COM-порт, то фазометр будет содержать микроконтроллер, так как с помощью него наиболее просто реализовать связь с компьютером по интерфейсу RS-232.

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

По заданию, а именно – максимальная частота сигнала fmax =100кГц и погрешность измерения фазы δ=0.2% определяем минимальное время измерения. Это время находится по формуле:

нс (2).

Для измерения такого времени микроконтроллер должен обладать таким же или меньшим временем цикла. При этом он должен иметь частоту f=50·n МГц, где n – количество тактов в машинном цикле микроконтроллера, то есть как минимум 50 МГц. Микроконтроллеры с такой частотой очень дороги и их нецелесообразно использовать для данной задачи. Поэтому для измерения фазы следует использовать отдельный таймер и генератор прямоугольных импульсов с тактовой частотой 50 МГц или выше, при этом требования к микроконтроллеру упрощаются. В данном случае микроконтроллер, один раз за период должен считывать данные со счетчика. Так как максимальная частота сигнала 100 кГц, то время считывания не должно превышать 10 мкс. К тому же контроллер должен поддерживать интерфейс UART для связи с компьютером. Согласно этим требованиям выбираем микроконтроллер фирмы AtmelATMega48 с тактовой частотой 1МГц и временем цикла 1 мкс.

Структурная схема проектируемого устройства изображена на рис. 1

Рис. 1. Структурная схема фазометра

На систему определения фазы подается два сигнала. В момент прохождения одного сигнала через ноль включается таймер. В этот интервал времени таймер начинает считать такты генератора импульсов. Когда второй сигнал достигнет нулевого значения – в таймере будет храниться число, которое соответствует разности фаз эталонного и измеряемого сигналов, и произойдет сброс таймера. Это число считывается микроконтроллером и передается по интерфейсу RS-232, через преобразователь уровней в компьютер. В компьютере это число переводится в градусы и отображается на экран.

Определитель фазы выполняет следующие функции:

1)Как только измеряемый сигнал меняет полярность, на выходе этого устанавливается сигнал для запуска таймера.

2)Таймер продолжает работать пока другой сигнал не пройдет через ноль.

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

Функциональная схема этого узла изображена ниже.

Рис.2. Функциональная схема системы определения перехода через ноль

Работа системы определения фазы.

Измеряемое и эталонное напряжение подается на вход компараторов через ограничители напряжения, который обрезает напряжения большие некоторой величины. Это сделано из-за того, что максимальное значение напряжения сигнала может достигать 100В, что выведет из строя компараторы. На выходе компаратора реализована развязка на оптических элементах.

Компараторы выдают сигнал высокого уровня если соответствующее напряжение больше нуля и сигнал низкого уровня – если меньше нуля. На выходе компараторов будет меандр. Далее эти сигналы поступают на вход защелки CD-триггеров DD2.1 и DD2.2. По переднему фронту меандра на выходе триггеров установится сигнал, который присутствует на D- входе.

В момент прихода положительного фронта на С-вход триггера DD2.2 на его прямом выходе установится логический "0", и это приведет к установке на выходе триггера DD2.1 логического "0" (так как выход триггера DD2.2 связан со входом сброса триггера DD2.1). На выходе триггера DD2.2 вновь появится сигнал высокого уровня. Фактически по первому переднему фронту на защелке триггера DD2.2 происходит инициализация системы. Теперь она готова к работе. При приходе положительного фронта на С-вход триггера DD2.1 на его выходе установится "1", т.к. на D-входе постоянно присутствует напряжение питания. Сигналы с выходов триггеров DD2.1 и DD2.2 поступают на входы микросхемы 2И DD3.1, и на ее выходе в промежуток времени между переходами измеряемого и эталонного напряжения через ноль будет сигнал логической "1". После того как напряжение эталонного сигнала перейдет из отрицательного значения в положительное, то произойдет процесс инициализации и на выходе системы вновь появится сигнал логического "0". Таким образом, на выходе системы присутствует логическая единица в промежуток времени между переходами через 0 напряжений измеряемого и эталонного сигналов.


Рис.3. Временные диаграммы системы перехода через ноль

Ограничитель напряжения, блок гальванической развязки

Максимальное допустимое входное напряжение компаратора не должно превышать напряжение источника питания (+5В). Поэтому на входе компаратора включают резисторный делитель напряжения. Схема включения компаратора указана ниже.

Рис.4. Блок гальванической развязки


В качестве компаратора выбираем PhilipsNE5682N. Резисторы R1 и R2 предназначены для деления напряжения сигнала. Их соотношение должно быть таким, чтобы при максимальной амплитуде входного сигнала (500В), напряжение на прямом входе ОУ не превышало 5В. Исходя из этого

Так как входное сопротивление ОУ составляет сотни килом, то сопротивление R2 можно взять достаточно большим. Возьмем R2 =10 кОм. Тогда R1 =990 кОм ≈1 МОм. Через сопротивление R3 заземляется инверсный вход ОУ. Сопротивление R4 используется как токозадающий элемент для оптопары. Его величину рассчитывают исходя из соотношения:

,

где - напряжение логической "1" на выходе компаратора (5В),

- напряжение на открытом светодиоде (около 1.5В),

- номинальный ток светодиода (30 мА).

Исходя из этого

Ом.

Описание таймера

В данное время большинство таймеров интегрированы в микроконтроллеры и являются его неотъемлемой периферией. Дискретные таймеры рассчитанные на частоту работы 50 МГц не выпускаются. Поэтому в данной работе будет реализован на дискретных компонентах. В качестве генератора импульсов используем генератор фирмы DS1065-60, с программируемой частотой (30 кГц .. 60 МГц). К выходу этого генератора подсоединим счетчик импульсов. Когда на выходе системы определения фазы установится высокий уровень напряжения, МК считает число тактов из счетчика и определит эквивалентное время разности фаз эталонного и измеряемого сигналов.

Определим разрядность счетчика для удовлетворения заданной точности. Погрешность измерения фазы 0.2%, следовательно максимальное число на выходе счетчика должно быть . Но учитывая, что частота генератора не может быть установлена в точности в 500 раз больше чем у измеряемого сигнала, но может, отличаться максимум в 2 раза N=1000. Разрядность счетчика тогда равна . 10-битные счетчики не выпускаются, поэтому выбираем 12-битный счетчик NXP 74HC4040. Тогда N=212 =4096. Учитывая, что минимальная частота генератора равна 30кГц, то минимальная частота измеряемого сигнала равна. Поэтому фазу сигналов, частота которых меньших 7.5 данный прибор измерить не сможет.

Принцип измерения фазы

Измерение фазы ведется в такой последовательности:

1. Микроконтроллер с помощью встроенного таймера измеряет частоту сигнала;

2. Если частота сигнала находиться в промежутке от 7.5 Гц до 15кГц (60МГц/4000), то МК записывает в генератор импульсов константу так, чтобы его частота была в 4096 раз больше чем частота сигнала (точнее в Nраз, гдеN – максимально возможное число меньшее 4096);

Если частота сигнала больше 15кГц, то в генератор импульсов записывается константа так, чтобы его частота равнялась 60МГц;

3. Микроконтроллер считывает значение фазы;

4. Микроконтроллер передает по каналу UART число соответствующие фазе сигнала.

2. Расчет блока питания

В данной работе используются микросхемы с напряжением питания +5В. Поэтому блок питания также надо проектировать на 5В.

Рассчитаем потребление схемы. Ток потребления компараторов 40 мА. Генератор потребляет 50 мА, счетчик 50 мА, триггер (Texas InstrumentsSN7474 – 20 мА, инвертор (STMicroelectronicsHCF4069) – 10 мА, микросхема 2И-НЕ – 4 мА, микроконтроллер (ATMega48) – 20 мА, преобразователь уровней (MAX232) – 10 мА. То есть суммарная нагрузка на блок питания равна 154 мА. Будем рассчитывать на ток 200 мА. Потребляемая мощность всех элементов платы чуть более 1 Вт. Блок питания на основе неуправляемого мостового выпрямителя с понижающим трансформатором. Для получения стабильного напряжения используем интегральный стабилизатор LM7805. Выбираем стандартный трансформатор типа ТПП – ТПП234-127/220-50 (ток вторичных обмоток 200 мА, номинальная мощность – 10Вт, напряжение вторичных обмоток 10В).

Каждый диод выпрямителя должен выдерживать обратное напряжение и прямой ток

мА

Согласно этому в качестве диодов мостового выпрямителя был выбран диодный мост B40S (Iпр =1А, Uобр =40В). При стандартном подключении стабилизатора LM7805 на его входе и выходе следует включить конденсаторы номиналом 20 мкФ марки К50-6.


3. Разработка алгоритма работы программы

Рассмотрим алгоритм измерения фазы и частоты сигнала.

Частота будет измеряться с помощью сигнала с выхода усилителя на транзисторе VT2. Этот сигнал будет подсоединен к входу внешнего прерывания INT0. Микроконтроллер будет настроен так, чтобы прерывание вызывалось когда на этом выводе будет сигнал низкого уровня. Перед измерением частоты сигнала в переменной FRQ заносится ноль, разрешается прерывание INT0 (в регистр маски EIMSK отправляется 1). Когда на этом входе буде сигнал низкого уровня то прерывание будет вызываться и увеличивать значение регистра DPTR на 1. Подсчитаем сколько циклов занимает одно выполнение подпрограммы прерывания. Один цикл занимает вызов прерывания, два цикла инкремент регистра и еще два - выход из подпрограммы прерывания. С учетом, того что время цикла МК составляет 1 мкс, то подпрограмма обработки прерывания занимает 5мкс. Так можно измерять отрезки времени от 5мкс (200 кГц)..5мкс·65536(3Гц). С учетом того, что измеряется только время половины периода (отрицательный полупериод сигнала) диапазон измеряемых частот будет составлять 100 кГц. При этом значение FRQ будет прямо пропорционально периоду сигнала. Пересчет в частоту будет осуществляться по формуле:

,

где N – содержимое FRQ. Исходя из этого частоте 15 кГц соответствует число 6.

Сигнал с помощью которого определяется фаза подсоединен к входу внешнего прерывания INT1. Разность фаз прямопропорциональна сигналу низкого уровня. Подпрограмма обработки этого прерывания будет иметь следующий вид:

Fase:

Inc DPTR

NOP

NOP

NOP

NOP

NOP

reti

Эта подпрограмма выполняется 10 мкс. Увеличение времени выполнения этой подпрограммы вызвано тем, что сигнал фазы может иметь максимальную длительность равную периоду сигнала (а не половине как при измерение частоты), что может привести к переполнению регистра DPTR в случае если подпрограмма занимает 5 мкс. Поэтому время выполнения этой подпрограммы увеличено вдвое.

Рассмотрим алгоритм нахождения константы пересчета для загрузки в генератор.

Если частота сигнала больше 15 кГц (N<7), то в 9-разрядный регистр MUX генератора, с помощью которого определяется режим работы программного делителя частоты, загружается число 000110010В. При занесении в регистр MUX данного числа частота генератора будет равна 60 МГц.

Если частота сигнала меньше 15 кГц (N>6), то в 9-разрядный регистр MUX генератора, с помощью которого определяется режим работы программного делителя частоты, загружается число 000110100В. При занесении в регистр MUX данного числа частота генератора будет равна (60/(ND +2)) МГц, где ND – число загружаемое в 9-разрядный регистр-делитель. Так как необходимо получать частоту генератора равную


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

,

то имеем систему исходя из которой найдем зависимость

ND (N): (1).

С учетом того, что вычисление по формуле (1) константы ND будет выполняться с погрешностью, то следует увеличить ее значение на 1, для того чтобы частота генератора гарантированно была меньше числа , и не произошло переполнения счетчика. Тогда

(2).

Посчитаем при каком N в формуле (2) ND будет неотрицательным

То есть фактически формулу (2) для пересчета можно применять для частот при которых N>6. Так как максимальное значение программного делителя составляет 513 (29 +2), то минимальная частота генератора при которой применим этот алгоритм деления частоты составляет


кГц.

При этом из формулы (2)

,

а частота сигнала равна

Гц.

Для получения более низкой частоты нужно изменить значение регистра MUX генератора на такое значение 000111000В. Тогда частота на выходе генератора будет меньше чем частота резонатора генератора (60 МГц) в 2·(ND +2) раза. Тогда уравнение, из которого вычисляется константа ND , изменится, и будет иметь вид

Поэтому значение ND согласно формуле (2) нужно поделить на 2 и добавить 1. Тогда

(3)

При этом константа ND , вычисленная по формуле (3) программируется в генератор при частоте сигнала в диапазоне Гц, что соответствует значению N=3496..6977=0DA8h..1B41h.

При частотах сигнала в диапазоне fc =7.5..14.3 Гц в регистр MUX генератора программируется следующее значение 000110000В. Тогда частота на выходе генератора будет меньше чем частота резонатора генератора (60 МГц) в 4·(ND +2) раза. Поэтому значение ND согласно формуле (2) нужно поделить на 4 и добавить 1. Тогда

что соответствует значению N=6978..13954=1B42h..3682h.

Рассчитаем, какое число нужно загрузить в регистр TH1 для настройки последовательного интерфейса на скорость 4800 бод/с. Частота передачи данных рассчитывается по формуле:

.

Из этой формулы находим константу которую нужно загрузить в TH1.

Так как число 243 округлялось найдем фактическую скорость передачи данных.

бод/с

Погрешность составляет 0.15%. Такая погрешность скорости не вызывает ошибок при передаче данных.


4. Описание алгоритма программы для МК

Микроконтроллер должен осуществлять такие действия:

1) начальную настройку своих узлов и периферийных устройств;

2) прием параметров измерения фазы от компьютера;

3) измерение частоты сигнала;

4) выбор режима измерения фазы;

5) выдача информации о частоте и фазе компьютеру.

Соответственно этому МК будет работать по алгоритму указанному на рис.5.

Рис.5. Блок-схема алгоритма программы для МК


5. Программа для МК







6. Описание алгоритма программы для ПК

Программа, которая будет выполняться ПК должна осуществить следующие действия:

1) определить у пользователя параметры измерения фазы;

2) инициировать начало работы фазометра;

3) считать сообщение о исправности фазометра;

4) в случае если он исправен послать сообщение о параметрах измерения фазы;

5) считать числа соответствующие фазе и частоте;

6) преобразовать частоту в герцы, а фазу в радианы и сохранить;

7) в конце измерения вывести на экран среднее значение фазы и частоты;

8) повторить все начиная с пункта 1.


Рис.6. . Блок-схема алгоритма программы для ПК

7. Программа для ПК

usescrt;

var i,k,z,contr,l,ms:Byte;

Base : word ;

Value : byte;

t :Boolean;

fase,freaquency:integer;

fase_r,freaquency_r,divider:real;

data:array[1..100,1..2]of real absolute $6B00:$0000;

Procedure OpenCom(Base:word ; Baudrate:word ; Config :byte);

begin

while Port[Base+5] and $60 <> $60 do;

Port[Base+3] := $80;

Port[Base+1] := BaudRate shr 8;

Port[Base+0] := BaudRate and $FF;

Port[Base+3] := Config;

Port[Base+4] := 0;

Port[Base+1] := 0;

end;

Procedure send_char(Base : word ; Value : byte);

begin

while ((Port[Base+5] and $20) = 0) do ;

Port[Base] := Byte(Value);

end;

Function get_char( Base : word ) : Boolean;

var status : word;

begin

Status := Port[Base + 5];

if ((Status and $1E) <> 0) or ((Status and 1) = 0 ) then get_char := False

else

begin

Value := Port[Base];

contr:=contr+Value;

get_char := True;

end;

end;

begin

z:=1;

while(z=1) do

begin

clrscr;

contr:=0;

writeln('Progam measure of fase');

writeln;

writeln('Input count measures');

Readln(i);

writeln;

writeln('Input time of measurements');

Readln(l);

Base:=MemW[$40:2]; {COM2}

OpenCom(Base,24,3 + 0 + 0); {4800,8-bit,1 stop-bit,no control error}

send_char(Base , 0); {start}

if(get_char(BASE)=TRUE) then k:=Value; {meassage about working of device}

k:=k and 1;

if(k=0) then

begin

send_char(Base , i); {number of measurements}

send_char(Base , l); {time of measurement}

for k:=1 to i do

begin

if(get_char(BASE)=TRUE) then k:=Value; {higer byte of freaquency}

freaquency:=k*256;

if(get_char(BASE)=TRUE) then k:=Value; {lower byte of freaquency}

freaquency:=freaquency+k;

freaquency_r:=10e5/freaquency; {convertion in Hz}

if(get_char(BASE)=TRUE) then k:=Value; {higer byte of fase}

fase:=k*256;

if(get_char(BASE)=TRUE) then k:=Value; {lower byte of fase}

fase:=fase+k;

if(freaquency<7) then {60MHz}

begin

divider:=1;

end;

if(freaquency>6)and(freaquency<$0E00) then {60/Nd+2}

begin

divider:=(75*freaquency)/512+1;

end;

if(freaquency>$0DFF)and(freaquency<$1C00) then {30/Nd+2}

begin

divider:=(75*freaquency)/1024+2;

end;

if(freaquency>$1BFF)and(freaquency<$3700) then {15/Nd+2}

begin

divider:=(75*freaquency)/2048+2;

end;

if(freaquency<$3700) then fase_r:=360*(freaquency_r*divider/6e7) {convertion}

else {fase measured MK}

begin

fase_r:=360*((2*fase)/freaquency);

end;

data[k][1]:=freaquency_r;

data[k][2]:=fase_r;

end;

if(get_char(BASE)=TRUE) then

begin

if(Value<>contr) then {control}

begin

z:=0;

writeln('Error COM port');

end

else

begin

l:=0;

while l=0 do

begin

clrscr;

writeln('Input number of measurements');

Readln(ms);

if(ms>100) then l:=1

else writeln('f=',data[ms,1],' fase=',data[ms,2]);

ReadKey;

end;

freaquency_r:=0;

fase_r:=0;

for k:=1 to i do {medium measurements}

begin

freaquency_r:=freaquency_r+data[k,1];

fase_r:=fase_r+data[k,2];

end;

freaquency_r:=freaquency_r/i;

fase_r:=fase_r/i;

Writeln('Medium f=',freaquency_r,' fase=',fase_r,' o');

end;

end;

end

else

begin

clrscr;

writeln('Error COM port');

z:=0;

end;

end;

end.


Выводы

В данной работе был спроектирован автоматический фазометр. Основной сложностью при его проектирование был выбор компонентой базы, так как данный фазометр должен измерять фазу у сигнала с частотой 100кГц с точностью 0.2%. Это эквивалентно измерению временных интервалов длительностью 20нс. Интегральных таймеров на такую частоту найдено не было. Из-за чего таймер был спроектирован на базе трех 4-разрядных счетчиков и генератора с программируемой частотой. Для измерения фазы сигнала вначале измеряется его частота с помощью микроконтроллера, а затем генератор программируется на частоту в 212 раз большую, чем частота сигнала. При активном уровне с выхода системы перехода напряжений через ноль, счетчик считает импульсы генератора, а затем микроконтроллер считывает их и передает компьютеру, где константы соответствующие частоте и фазе преобразуются в герцы и градусы и показываются оператору по его запросу.

ОТКРЫТЬ САМ ДОКУМЕНТ В НОВОМ ОКНЕ

ДОБАВИТЬ КОММЕНТАРИЙ [можно без регистрации]

Ваше имя:

Комментарий