Генератор синусоидальных сигналов.

JMP M3

STOP TCNT

STRT T

MOV T, A

IN A, P1

OUTL P2, A

OUTL P1, A

RETR

MOV T, A

IN A, P1

OUTL P2, A

IN A, P2

ORG 7

JMP START

ORG 0

XRL A, #1

START: EN TCNTI

MOV A, #0FFH

M3: CLR A

M0: JT0, M0

M1: JNT0 M1

 

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

 

Sin (X) = X – X3/3! + X5/5! – X7/7! …((-1)K*X(2*K+1))/(2*K+1)!

 

Где К выбирается достаточно большим для обеспечения требуемой точности. Эти вычисления занимают много времени и ограничивают диапазон выходных частот, которые можно обеспечить. При использовании предварительной записи значений функции в таблице микроЭВМ в момент прерывания находит соответствующее значение в таблице и выводит его на ЦАП.

В системе команд микроЭВМ предусмотрена специальная команда MOVP3 A, @Aдля выбора данных из таблиц, если таблица помещена в последние 256 байт памяти программ или в третью страницу памяти программ. Для памяти программ размером 1 Кб страницы памяти программ имеют границы:

0 – 255 – 0 страница.

256 – 511 - 1 страница.

512 – 767 – 2 страница.

768 – 1023 – 3 страница.

Эта команда использует исходное содержимое аккумулятора для адресации ячейки третьей страницы памяти программ. Содержимое указанной ячейки считывается и помещается в аккумулятор. Если требуется таблица объемом меньше 256 байт, ее можно разместить на любой странице памяти программ и для нахождения данных в таблице использовать команду MOVP A, @A. Эта команда аналогична предыдущей, но она предполагает, что таблица содержится не текущей странице памяти программ.

Поскольку синусоида формируется цифровым способом, необходимо разбить четверть периода синусоиды на временные дискреты. Разобьем синусоиду на дискреты через один градус от 0 градусов до 90 градусов. Из таблицы синусов найдем значение функции Sin, соответствующее каждой дискрете.

Sin (0) = 0

Sin (1) = 0,0157

Sin (2) = 0,0314

Sin (90) = 1.

Ответим на вопрос, в каком виде эти числа должны хранится в таблице памяти программ? ЦАП, на который будет подан код, соответствующий Sin (90), должен выдать на своем выходе максимальное значение по амплитуде, значит, код на 8-разрядном входе ЦАП должен быть равен 255. Составляя пропорцию Sin (90) - 255

Sin (n) - x

Получим требуемое значение, которое округлим до целых. Например, для Sin (1) код ЦАП равен 4, для Sin (2) – 8 и так далее для Sin (45) – 166.

Таким образом, мы имеем таблицу из 91 значения в диапазоне от 0 до 255, которое поместим во внутреннюю память программ, начиная с адреса 768 последовательно. Программа должна по каждому прерыванию от таймера выбирать очередное значение из этой таблицы и посылать его на ЦАП. Таким образом, за 90 временных дискрет можно будет сформировать первую четверть периода синусоиды от 0 градусов до 90. Чтобы сформировать вторую четверть периода синусоиды значения из таблицы должны выбираться в обратном порядке. Для формирования второй половины периода синусоиды нужно повторить предыдущую процедуру, сменив знак синусоиды. Это можно сделать, применив ЦАП с двухполярным питанием, имеющий вход выбора знака. Схема генератора с применением микроЭВМ с внутренней памятью программ.

 

Оговорим то, что для P27 = 0 имеем на выходе ЦАП положительный сигнал, для P27 = 1 – отрицательный сигнал. Поскольку предполагается использование внутреннего таймера, то период сформированного сигнала, который должен быть равен 360 дискретам времени, будет зависеть от величины этой дискреты в единицах времени. Как известно из ранее пройденного материала, таймер можно запрограммировать на время от 80 мкс до 20,48 мс. Тогда период сформированной синусоиды может быть в пределах от 80*360 = 28,8 мс до 20,48*360 = 7372,8 мс. Программа.