Н.В. Клиначев

О компенсации фазовой ошибки дискретных квазианалогов интеграторов.
MSP430F2013: Прямой цифровой синтез синусоидального сигнала

Классифицируя дискретные квазианалоги интеграторов по характеру проявления методических погрешностей можно выделить две большие группы. К первой относятся дискретные интеграторы, вносящие в обрабатываемый сигнал отрицательную фазовую ошибку. Вторая группа интеграторов – вносит положительную фазовую ошибку. Данный факт иллюстрирует модель представленная на чертеже 1; где упомянутые погрешности наглядно визуализируются (запустите процесс симуляции). В частности хорошо видно, что два метода Эйлера (с упреждением и с запаздыванием по фазе) имеют равную по величине, но разную по знаку фазовую ошибку. Эту примечательную особенность дискретных интеграторов можно успешно использовать при построении моделей.

Чертёж 1

В качестве примера рассмотрим модель программы прямого цифрового синтеза синусоидального сигнала для микроконтроллера семейства MSP430 (MSP430F2013). Микроконтроллеры упомянутого семейства относятся к группе PIC-контроллеров, имеют RISC-архитектуру и характеризуются низкой стоимостью. В них нет ни каких аппаратных решений (включая ПЗУ достаточного размера), которые помогли бы синтезировать коды синусоидальной последовательности. Единственное на что можно опереться при разработке программы – это операции сложения и сдвиг (деление на два).

Описанная совокупность ограничений оставляет открытой возможность реализации процедуры вычисления кодов синусоидальной последовательности по блок-схеме линейной системы второго порядка находящейся на границе устойчивости. Речь о двух интеграторах охваченных отрицательной обратной связью. Приняв идею к исполнению необходимо вспомнить о погрешностях дискретных интеграторов. Если использовать метод Эйлера с упреждением по фазе, то фазовый сдвиг в контуре составит величину меньшую чем -180°. В результате колебательный процесс будет сходящимся – что неприемлемо. Если использовать метод Эйлера с запаздыванием по фазе, то фазовый сдвиг превысит -180°. Переходный процесс будет расходящимся – что также неприемлемо. Очевидное решение состоит в том, что если невозможно избавиться от погрешностей методов, надо использовать их. В частности, для построения синусоидального генератора один из интеграторов надо построить по методу Эйлера с запаздыванием по фазе, другой – по методу Эйлера с упреждением по фазе (см. модель на чертеже 2).

Чертеж 2

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

На чертеже 3 представлена версия блок-схемы синусоидального генератора, которая является прототипом программы для микроконтроллера. Здесь произведены следующие модификации. В сравнении с блок-схемой на чертеже 2, содержимое составных блоков деинкапсулировано. С целью отказа от операции умножения выборки входных сигналов интеграторов не умножаются на шаг симуляции (осуществлен переход к относительному (к дискретному) времени). С целью выравнивания амплитуд сигналов на входах интеграторов (с целью оптимального использования разрядности микроконтроллера) контурный коэффициент усиления задается двумя масштабирующими блоками (см. делители в блок-схеме).

Чертеж 3

Настройку блок-схемы генератора необходимо начинать с выбора требуемого количества выборок синусоидальной последовательности. В силу действующего ограничения – RISC-система команд PIC-контролера позволяет выполнить операцию деления лишь на числа кратные двойке (сдвиг вправо) – количество выборок может принадлежать фиксированному ряду. Два сдвига – 25 выборок на период. Три сдвига – 50 выборок. 4 – 100. 5 – 201. 6 – 402. 7 – 804. Смотри формулу на блок-схеме. Второй настраиваемый параметр – начальное условие для одного из регистров задержки – значение зависит от разрядности цифроаналогового преобразователя, который планируется подключить к микроконтроллеру.

06.03.2010



ez430_f2013.gif, 1,7kB

Ниже представлен фрагмент руководства к лабораторным работам по дисциплине "Микроконтроллерные и микропроцессорные системы". Основу упоминаемого лабораторного стенда составляет комплект разработчика "ez430-f2013" фирмы Texas Instruments и бесплатно распространяемый (среди пользователей комплекта) компилятор IAR Embedded Workbench. Руководствуясь методическими указаниями можно написать программу и прошить микроконтроллер MSP430F2013.

Л.р. № 6. MSP430F2013: Интерфейс SPI.
Прямой цифровой синтез синусоидального сигнала

Цель работы

Разработка генератора синусоидальной формы реализованного на периферийном интегральном контроллере в условиях ограничений по ОЗУ, ПЗУ и по системе команд (RISC архитектура). Приобретение опыта работы с периферийным устройством (с цифро-аналоговым преобразователем (с ЦАП-ом)), программируемым по последовательному интерфейсу SPI.

Программа работы в лаборатории

  1. Создайте новый проект с C-файлом в компиляторе "IAR Embedded Workbench".
  2. Напишите функцию синтеза синусоидального сигнала по предложенной блок-схеме.
  3. Выполните отладку программы, используя ведущие протокол "Log-Breakpoints".
  4. Напишите функции настройки порта SPI и записи данных в ЦАП через порт.
  5. Прошейте в программаторе Flash-память микроконтроллера MSP430F2013.
  6. Подключите µ-контроллер к стенду. Проконтролируйте синтез синусоиды.

Методические указания

Инструкции к пункту 1

1.1. Запустите компилятор IAR Embedded Workbench

1.2. Создайте новый проект

1.3. Выполните конфигурирование проекта под µ-контроллер MSP430F2013

1.4. Сохраните состояние среды IAR (Workspace) для вашего проекта

Инструкции к пункту 2

2.1. Скопируйте шаблон программы (листинг 1). Замените им все содержимое файла main.c в проекте (Ctrl+A, Ctrl+C; main.c: Ctrl+A, Ctrl+V)

Листинг 1. Шаблон программы

2.2. Объявите в программе необходимые переменные

На блок-схеме модели кода программы генератора (см. рис. 1) подписаны имена координат (переменных). В лабораторном стенде µ-контроллер будет подключен к восьмиразрядному ЦАП-у. Проанализируйте блок-схему модели программы. Определитесь с требуемыми типами переменных. Объявите их. И инициируйте (важно задать начальные условия (IC) для регистров задержки и предустановить счетчик выборок (201*2)).

lr_430_06_01.png, 7,8kB
Рис. 1. Модель кода программы генератора ортогональных
сигналов синусоидальной формы для MSP430F2013

2.3. Напишите код, синтезирующий последовательность выборок сигнала синусоидальной формы

Вам требуется написать 4 строки кода (см. комментарии в файле main.c). Вы должны использовать переменные: iz1, oz1, iz2, oz2, – из объявленных ранее. Вам будет легче понять, как по блок-схеме (рис. 1) написать программу, если вы мысленно разделите регистры задержки на две части – источник сигнала и приемник. В этом случае последовательность вычислений будет просматриваться явно.

Инструкции к пункту 3

3.1. Настройте среду IAR для запуска сессии отладки кода и трассировки переменных

3.2. Запустите сессию отладки кода

3.3. Визуализируйте данные, внесенные в протокол сессии отладчика кода

В результате работы программы, в окне трассировки ("Debug Log") должно появиться 402 строки (см. листинг 2), с распечатанными значениями переменных oz1, oz2. Постройте графики значений этих переменных.

Листинг 2. Пример содержимого окна трассировки (Debug Log)

...
Sun Dec 20 12:17:22 2009: [main.c:31.5] #0 4061 127
Sun Dec 20 12:17:30 2009: [main.c:31.5] #1 4054 253
Sun Dec 20 12:17:30 2009: [main.c:31.5] #2 4043 379
...
Sun Dec 20 12:18:09 2009: [main.c:31.5] #401 4067 -10
Sun Dec 20 12:18:09 2009: Program exit reached.

lr_430_06_02.png, 4,9kB
Рис. 2.

Модифицируйте программу так, чтобы объявленная вами переменная mCos (см. блок-схему на рис. 1) вычислялась. Повторите необходимые действия с целью трассировки переменной и построения соответствующего графика.

Инструкции к пункту 4

4.1. Напишите код, настройки порта SPI и записи данных в ЦАП через порт

Инструкции к пункту 5

5.1. Подключите программатор µ-контроллера к компьютеру

5.2. Прошейте код программы в ПЗУ µ-контроллера

Инструкции к пункту 6

21.12.2009