Скачиваний:
93
Добавлен:
16.07.2022
Размер:
3.93 Mб
Скачать
    1. Структура блока управления устройством

В качестве устройства управления была выбрана микросхема 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 – Структура блока управления

    1. Разработка программной системы

Разрабатываемая программная система должна выступать в роли управляющего интерфейса, который должен принимать данные от пользователя, преобразовывать их в формат, описанный в разделе 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.

Полный код функций представлен в приложении Г.