- •«Санкт-Петербургский государственный электротехнический университет «лэти» им. В.И.Ульянова (Ленина)» (сПбГэту «лэти»)
- •Выпускная квалификационная работа бакалавра Тема: Генератор сигналов
- •6. Технические требования
- •Реферат
- •Содержание
- •Введение
- •Генераторы сигналов
- •Функциональные генераторы
- •Аналоговые функциональные генераторы
- •Цифровые функциональные генераторы
- •Синтезаторы частоты
- •Прямой цифровой синтез сигналов dds
- •Проектирование управляемого генератора на основе dds
- •Структурная схема устройства
- •Выбор элементной базы
- •Расчет параметров схемы
- •Разработка схемы электрической принципиальной
- •Система команд
- •Структура блока управления устройством
- •Разработка программной системы
- •Разводка платы генератора сигналов
- •Руководство пользователя
- •Требования для работы с устройством
- •Пользовательский интерфейс приложения
- •Запуск приложения и подключение устройства
- •Начальная настройка
- •Использование по назначению
- •Технические характеристики генератора сигналов
- •Безопасность жизнедеятельности
- •Защита от поражения электрическим током
- •Защита от проникновения посторонних предметов
- •Заключение
- •Список использованных источников
- •Приложение а
- •Приложение б Перечень элементов
- •Приложение в Описание модулей на языке Verilog
- •Приложение г Функции для работы с генератором на языке Си
- •Приложение д Файлы для производства
- •Приложение е Примеры работы устройства
- •Приложение ж Фотографии генератора сигналов
Структура блока управления устройством
В качестве устройства управления была выбрана микросхема FPGA MAX 10 фирмы Intel.
Описание устройства выполняется на языке Verilog с использованием структурного подхода. Подход предполагает проектирование устройства посредством разбиения на модули. Разработанное устройство имеет структуру, представленную на рисунке 2.9. Рассмотрим назначение каждого модуля подробнее:
MAIN FSM – конечный автомат, связующий и организующий работу всех остальных модулей системы;
SPI – модуль вывода данных по интерфейсу SPI, именно через него происходит управление периферийными устройствами;
FTDI – модуль ввода-вывода информации с микросхемы FT245RL, осуществляет связь устройства управления и ПК;
AvalonMM FSM – конечный автомат, реализующий интерфейс Avalon MM. Необходим для записи и чтения информации со внутренней flash памяти;
PLL – стандартный блок фазовой автоподстройки частоты. Выдает все необходимые для работы частоты[ CITATION Int20 \l 1033 ];
Altera OnChipMemory – модуль, обеспечивающий работу со внутренней flash памятью[ CITATION FlashMemory \l 1033 ].
Текст программы модулей на языке Verilog приведен в приложении В.
Рисунок 2.13 – Структура блока управления
Разработка программной системы
Разрабатываемая программная система должна выступать в роли управляющего интерфейса, который должен принимать данные от пользователя, преобразовывать их в формат, описанный в разделе 2.5, и пересылать эти данные на устройство. Для пользователя должен быть разработан интуитивно понятный пользовательский интерфейс, обеспечивающий удобную работу с устройством.
Для разработки функций управления устройством был выбран язык Си. Функции, написанные на языке Си могут быть использованы в программах, написанных и на других языках (Java, C++, C# и т.д.), что делает его универсальным инструментом для разработки базовых функций.
Разработка пользовательского интерфейса велась на языке С++ с использованием библиотеки QT.
Рассмотрим основные типы данных (таблица 2.3), константы (таблица 2.4) и функции, разработанные для работы с устройством (таблица 2.5).
Таблица 2.3 – Типы данных
Наименование |
Описание |
GHandle |
Указатель на дескриптор устройства |
SignalForm |
Перечислимый тип, содержащий коды форм сигнала |
Address |
Перечислимый тип, содержащий адреса калибровочных данных |
Code |
Перечислимый тип, содержащий коды операций |
Таблица 2.4 – Константы
Наименование |
Значение |
Описание |
SignalForm |
||
FORM_SIN |
0x00 |
Коды синусоидальной, треугольной и прямоугольной форм сигнала |
FORM_TRIANGLE |
0x01 |
|
FORM_SQUARE |
0x02 |
|
Address |
||
ADRS_SIN_1 |
0x00 |
Адреса для записи данных калибровки |
ADRS_SIN_2 |
0x01 |
|
ADRS_TRIANGLE_1 |
0x02 |
|
ADRS_TRIANGLE_2 |
0x03 |
|
ADRS_SQUARE_1 |
0x04 |
|
ADRS_SQUARE_2 |
0x05 |
|
ADRS_ERASE |
0x0F |
Команда на стирание данных из памяти |
Code |
||
AMPL_CODE |
0xA0 |
Код операции изменения амплитуды |
FREQ_CODE |
0x80 |
Код операции изменения частоты |
FORM_CODE |
0x90 |
Код операции изменения формы |
C_SET_CODE |
0xB0 |
Код записи калибровочных данных |
C_GET_CODE |
0xC0 |
Код для чтения калибровочных данных |
|
||
MAX_FREQ |
0x7FFFFFF |
Максимальное значение частоты |
MAX_AMPL |
0xFFFF |
Максимальное значение амплитуды |
Таблица 2.5 – Прототипы функций для работы с устройством
Прототип |
Параметры |
Описание |
bool open_g (GHandle * handle, char * description) |
handle – указатель на дескриптор устройства description – USB имя устройства, к которому необходимо подключиться |
Открывает дескриптор устройства по его имени. В случае неудачного завершения операции возвращает значение false. |
bool close_g (GHandle handle) |
handle – указатель на дескриптор устройства
|
Закрывает дескриптор устройства. В случае неудачного завершения операции возвращает значение false. |
bool setFreq_g (GHandle handle, unsigned int freqCode) |
handle – указатель на дескриптор устройства freqCode – кодированное значение частоты выходного сигнала |
Устанавливает заданную частоту. В случае неудачного завершения операции возвращает значение false. |
bool setAmpl_g (GHandle handle, unsigned int amplCode) |
handle – указатель на дескриптор устройства amlpCode – кодированное значение амплитуды выходного сигнала |
Устанавливает заданную амплитуду. В случае неудачного завершения операции возвращает значение false. |
bool setForm_g (GHandle handle, SignalForm form) |
handle – указатель на дескриптор устройства form – форма выходного сигнала, возможные значения описаны в таблице 2.4
|
Устанавливает заданную форму сигнала. В случае неудачного завершения операции возвращает значение false. |
bool setFlashDataInt_g (GHandle handle, Address adrs, int data) |
handle – указатель на дескриптор устройства adrs – адрес для записи калибровочных данных, возможные значения описаны в таблице 2.4 data – записываемое значение |
Записывает переданное целочисленное значение по адресу adrs во внутреннюю память устройства. В случае неудачного завершения операции возвращает значение false. |
bool setFlashDataFloat_g (GHandle handle, Address adrs, float data) |
handle – указатель на дескриптор устройства adrs – адрес для записи калибровочных данных, возможные значения описаны в таблице 2.4 data – записываемое значение |
Записывает переданное значение с плавающей точкой по адресу adrs во внутреннюю память устройства. В случае неудачного завершения операции возвращает значение false. |
Продолжение таблицы 2.5
int getFlashDataInt_g (GHandle handle, Address adrs) |
handle – указатель на дескриптор устройства adrs – адрес для чтения калибровочных данных, возможные значения описаны в таблице 2.4 |
Функция возвращает данные, записанные на устройстве по адресу adrs в виде целочисленной переменной. В случае ошибки возвращает значение -1. |
float getFlashDataFloat_g (GHandle handle, Address adrs) |
handle – указатель на дескриптор устройства adrs – адрес для чтения калибровочных данных, возможные значения описаны в таблице 2.4 |
Функция возвращает данные, записанные на устройстве по адресу adrs в виде числа с плавающей точкой. В случае ошибки возвращает значение -1. |
Полный код функций представлен в приложении Г.