Бұл жазба автоматты түрде аударылған. Бастапқы тіл: Орысша
В этой статье я опишу, как можно реализовать непрерывную передачу отсчетов АЦП с ПЛИС на ПК с использованием последовательного порта. Думаю, для тех, кто только знакомится с ПЛИС и в целом с электроникой, это будет очень полезно, так как передача данных является одной из важнейших частей любого проекта. Вы можете измерять и вычислять что угодно, но если вы не сможете передать данные, то толку от этого не будет.
Прежде чем я начну углубляться в детали проекта, давайте разберемся, что такое ПЛИС и АЦП.
ПЛИС — Программируемая Логическая Интегральная Схема (на англ. FPGA — Field-Programmable Gate Array), устройство, имеющее множество логических элементов, которые можно выстроить удобным вам способом. Другими словами, это микросхема или процессор, функции которого можно каждый раз менять под свои нужды.
АЦП — Аналогово-Цифровой Преобразователь (англ. ADC — Analog-to-Digital Converter), устройство, преобразующее аналоговый сигнал в цифровой. Он нужен для того, чтобы преобразовать сигнал в код, с которым дальше система сможет работать. В большинстве случаев, как и в этом, АЦП преобразует напряжение входного сигнала в цифровой код.
Я использовал отладочный набор с ПЛИС Altera Max 10, а именно модель 10M08SAE144C8G. Данный набор можете увидеть на рисунку ниже. В мире существует большое количество ПЛИС с разными характеристиками, в основном производимых двумя компаниями: Altera и AMD. Думаю, Для данной задачи подойдет ПЛИС с встроенным ADC, например, из семейства Intel MAX 10. Повторить проект в точности получится на устройствах Altera (ранее Intel) с аналогичными характеристиками.
Важное примечание: я использовал встроенный АЦП, многие ПЛИС не имеют встроенного АЦП, и это нужно учитывать.
ПЛИС, которое я использовал, отличают следующие характеристики [1]:
- 8000 логических элементов
- 144 пина
- Встроенный АЦП последовательного приближения с разрядностью 12 бит и кумулятивной частотой дискретизации до 1 МSPS (million samples per second) [2]
- Пользовательская флеш-память
- 24 встроенных умножителя
- 378 Кб M9K памяти
Данный проект был реализован на официальной отладочной плате от Intel для Max 10, которая включает следующие компоненты [3]:
- Тактовый генератор на 50 МГц
- Коннекторы Arduino UNO R3
- 8 аналоговых входов для АЦП
- JTAG-разъем для подключения внешнего кабеля
- 40 I/O общего назначения, 5 светодиодов для пользователя
- 3 кнопки
- USB-разъем для питания
Хотел бы отметить, что из всех ПЛИС от Altera (ранее Intel) благодаря встроенному АЦП, наличию пользовательского флеш-памяти и доступности готовых отладочных плат ПЛИС семейства MAX 10 являются оптимальным выбором для первых практических проектов, связанных с обработкой и передачей аналоговых сигналов. Для начинающего разработчика это значительно упрощает проект, так как не требуется проектировать интерфейс обмена данными с отдельным АЦП.
Рабочее место
Первое, что нужно сделать, — это подготовить рабочее место, установить все необходимые программы и подготовить компоненты. Для этого проекта понадобятся три программы:
- Quartus Prime Lite Edition 23.1std — среда разработки от Intel для проектирования на ПЛИС. Используется для написания и компиляции HDL-кода, создания проекта, разводки пинов, синтеза и прошивки ПЛИС.
- Eclipse IDE — среда разработки приложений для встроенного процессора Nios II, который можно реализовать внутри ПЛИС. Eclipse позволяет писать, компилировать и отлаживать программы на C/C++ для работы с аппаратной частью проекта.
- Терминал — программа для взаимодействия ПЛИС с компьютером через UART или другой интерфейс. Используется для вывода отладочной информации, передачи данных и проверки работы системы в реальном времени.
- Подсистема Linux — используется как программная среда для корректной работы инструментов разработки Nios II EDS. Через нее обеспечивается выполнение утилит командной строки (сборка, компиляция и отладка проектов на Nios II) внутри Windows.
Обратите внимание, что для установки Eclipse IDE сначала необходимо установить Quartus Prime, и все вышеуказанные ссылки предназначены для Windows.
Что касается компонентов, понадобится:
- Отладочный набор с ПЛИС
- Программатор USB Blaster V2 от Waveshare Electronics - — это программатор, который нужен для прошивки и настройки ПЛИС Intel/Altera. С его помощью можно быстро загружать проект в микросхему через JTAG и сразу проверять работу схемы. Он подключается к компьютеру по USB и работает вместе с Quartus Prime, так что без него не обойтись при работе с платами на ПЛИС или собственными разработками.
- Генератор аналогового сигнала (у меня OWON DGE2070)
- Количество каналов: 2
- Максимальная выходная частота: 70 МГц
- Частота дискретизации: 300 Мвыборок/с
- Вертикальное разрешение: 14 бит
- Интерфейс связи: USB для подключения и управления с ПК
- Последовательный порт USB–UART TTL-преобразователь на FT232RL (можно использовать и другие, если они поддерживают скорость от 1 Мбит/с) - это адаптер, который позволяет подключать устройства с интерфейсом UART напрямую к компьютеру через USB. Он удобен для отладки и передачи данных между ПЛИС, микроконтроллерами или другой электроникой.
- Минимум 4 соединительных провода
Все компоненты следует подключить следующим образом:
- Подаем с Генератора Сигнала синусоидный сигнал нужной частоты с напряжением в пределах от 0 до 2.5В
- Подключаем провод от генератора к аналоговому входу на отладочной плате и аналоговой земле
- Соединяем ПЛИС и ПК
- Подключаем один конец USB Blaster к специальному слоту на ПЛИС и другой конец к USB входу ПК
- Подключаем принимающий (Tx) пин последовательного порта к пину отладочного набора с исходящеми данными и землю (GND) к цифровой земле отладочного набора
Теперь, когда рабочее место полностью обустроено, можно приступать к реализации проекта. Готовую сборку можно увидеть на рисунке ниже:
Задача
Цель проекта заключается в разработке и реализации системы для оцифровки аналогового сигнала и передачи полученных данных с ПЛИС на компьютер в режиме реального времени.
В рамках проекта необходимо решить следующие задачи:
Источник сигнала
- Сгенерировать синусоидальный сигнал с частотой 10 кГц и амплитудой в пределах допустимого диапазона встроенного АЦП ПЛИС (от 0 до 2,5 В).
*Операционные усилители на отладочных платах (обозначения на схеме U3 и U4; номер детали — LM2902DR2, производитель — ON Semiconductor) имеют ограничение выходного напряжения примерно 1,95–2,0В. На некоторых платах они уже заменены на Microchip MCP6244-E/SL, который позволяет использовать полную амплитуду в 2.5В. [5]
- Подать сигнал на один из аналоговых входов АЦП, встроенного в ПЛИС Altera MAX 10.
Оцифровка сигнала
- Использовать встроенный 12-битный АЦП последовательного приближения, работающий с частотой дискретизации до 1 МГц (выбор значения частоты должен обеспечивать выполнение условия теоремы Найквиста).
- Обеспечить непрерывное преобразование входного аналогового сигнала в цифровую форму.
Обработка и подготовка данных
- Реализовать систему на базе процессора Nios II, включающую модули:
- блок встроенного АЦП,
- интерфейс UART для передачи данных,
- буфер FIFO для временного хранения выборок.
- Организовать преобразование результатов АЦП в поток данных, пригодный для передачи через UART.
- Обеспечить представление 12-битного результата в виде двух байт (старший и младший).
Передача данных
- Настроить интерфейс UART со скоростью передачи 1 Мбит/с.
- Обеспечить надежную отправку потока выборок без потерь и искажений через преобразователь USB–UART (FT232RL).
Прием и визуализация
- Организовать прием данных на ПК с использованием терминальной программы (например, PuTTY или RealTerm) или специализированного скрипта на Python/Matlab.
- Обеспечить возможность анализа данных: наблюдение формы сигнала, построение графиков и дальнейшая цифровая обработка.
Архитектура системы
На рисунке ниже представлено, как будет работать система и проходить данные.
- Signal Generator — это генератор сигнала, откуда поступает аналоговый сигнал. Далее внутри ПЛИС будут задействованы АЦП, память (memory), NIOS II, mSGDMA и UART. Пройдемся по ним:
- NIOS II — это программный процессор, разработанный компанией Altera, своего рода микроконтроллер, развернутый внутри ПЛИС. Он позволяет управлять системой и выполнять различные операции, используя язык программирования C, что облегчает работу.
- mSGDMA — Modular Scatter-Gather Direct Memory Access — модуль для прямого доступа к памяти. Он используется для быстрого доступа к памяти, не задействуя процессор. Modular в названии указывает на модульный дизайн, а Scatter-Gather — на возможность чтения и записи с любого участка памяти. [4]
- UART — протокол для передачи данных. Довольно прост в реализации и поэтому подходит для несложных задач. Ограничен по скорости до 1 Мбит/с, но нам этого вполне хватает.
- COM-порт — последовательный порт.
Все это работает следующим образом: генератор сигнала генерирует входной аналоговый сигнал. Далее идет блок ПЛИС, где происходит обработка данных и их передача в последовательный порт. Сигнал проходит через следующую цепочку:
- Обработка АЦП
- Передача образца АЦП в память
- Выставление прерывания после сохранения образца в памяти
- Регистрация прерывания процессором NIOS II
- Сохранение образца в кольцевом буфере
- Передача данных из кольцевого буфера в UART с помощью DMA
- Передача данных в последовательный порт
- Данные с последовательного порта поступают на ПК для дальнейшей обработки
Список литературы
- Altera. (2025, March 10). MAX® 10 FPGA device overview (Document ID: M10-OVERVIEW; Document No. 683658). Intel Corporation. https://www.intel.com/content/www/us/en/docs/programmable/683658
- Intel. (2017, July 6). Intel® MAX® 10 analog to digital converter user guide (Document ID: UG-M10ADC). Intel Corporation. https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug-m10adc.pdf
- Intel Corporation. (2023, January 8). Intel® MAX® 10 FPGA (10M08S, 144-EQFP) evaluation kit user guide (Document No. 812857). https://www.intel.com/content/www/us/en/docs/programmable/812857
- Intel Corporation. (2023, August 15). Embedded peripherals IP user guide (Document ID: UG-01085; Document No. 683130). https://www.intel.com/content/www/us/en/docs/programmable/683130
- Intel Corporation. (n.d.). 10M08 Eval Kit errata readme. Intel. https://cdrdv2.intel.com/v1/dl/getContent/776420
- Intel Corporation, “MAX 10 FPGA 10M08 evaluation kit” [Online image]. Available: https://www.intel.com/content/www/us/en/products/details/fpga/development-kits/max/10m08-evaluation-kit.html
В этой статье я опишу, как можно реализовать непрерывную передачу отсчетов АЦП с ПЛИС на ПК с использованием последовательного порта. Думаю, для тех, кто только знакомится с ПЛИС и в целом с электроникой, это будет очень полезно, так как передача данных является одной из важнейших частей любого проекта. Вы можете измерять и вычислять что угодно, но если вы не сможете передать данные, то толку от этого не будет.
Прежде чем я начну углубляться в детали проекта, давайте разберемся, что такое ПЛИС и АЦП.
ПЛИС — Программируемая Логическая Интегральная Схема (на англ. FPGA — Field-Programmable Gate Array), устройство, имеющее множество логических элементов, которые можно выстроить удобным вам способом. Другими словами, это микросхема или процессор, функции которого можно каждый раз менять под свои нужды.
АЦП — Аналогово-Цифровой Преобразователь (англ. ADC — Analog-to-Digital Converter), устройство, преобразующее аналоговый сигнал в цифровой. Он нужен для того, чтобы преобразовать сигнал в код, с которым дальше система сможет работать. В большинстве случаев, как и в этом, АЦП преобразует напряжение входного сигнала в цифровой код.
Я использовал отладочный набор с ПЛИС Altera Max 10, а именно модель 10M08SAE144C8G. Данный набор можете увидеть на рисунку ниже. В мире существует большое количество ПЛИС с разными характеристиками, в основном производимых двумя компаниями: Altera и AMD. Думаю, Для данной задачи подойдет ПЛИС с встроенным ADC, например, из семейства Intel MAX 10. Повторить проект в точности получится на устройствах Altera (ранее Intel) с аналогичными характеристиками.
Важное примечание: я использовал встроенный АЦП, многие ПЛИС не имеют встроенного АЦП, и это нужно учитывать.
ПЛИС, которое я использовал, отличают следующие характеристики [1]:
- 8000 логических элементов
- 144 пина
- Встроенный АЦП последовательного приближения с разрядностью 12 бит и кумулятивной частотой дискретизации до 1 МSPS (million samples per second) [2]
- Пользовательская флеш-память
- 24 встроенных умножителя
- 378 Кб M9K памяти
Данный проект был реализован на официальной отладочной плате от Intel для Max 10, которая включает следующие компоненты [3]:
- Тактовый генератор на 50 МГц
- Коннекторы Arduino UNO R3
- 8 аналоговых входов для АЦП
- JTAG-разъем для подключения внешнего кабеля
- 40 I/O общего назначения, 5 светодиодов для пользователя
- 3 кнопки
- USB-разъем для питания
Хотел бы отметить, что из всех ПЛИС от Altera (ранее Intel) благодаря встроенному АЦП, наличию пользовательского флеш-памяти и доступности готовых отладочных плат ПЛИС семейства MAX 10 являются оптимальным выбором для первых практических проектов, связанных с обработкой и передачей аналоговых сигналов. Для начинающего разработчика это значительно упрощает проект, так как не требуется проектировать интерфейс обмена данными с отдельным АЦП.
Рабочее место
Первое, что нужно сделать, — это подготовить рабочее место, установить все необходимые программы и подготовить компоненты. Для этого проекта понадобятся три программы:
- Quartus Prime Lite Edition 23.1std — среда разработки от Intel для проектирования на ПЛИС. Используется для написания и компиляции HDL-кода, создания проекта, разводки пинов, синтеза и прошивки ПЛИС.
- Eclipse IDE — среда разработки приложений для встроенного процессора Nios II, который можно реализовать внутри ПЛИС. Eclipse позволяет писать, компилировать и отлаживать программы на C/C++ для работы с аппаратной частью проекта.
- Терминал — программа для взаимодействия ПЛИС с компьютером через UART или другой интерфейс. Используется для вывода отладочной информации, передачи данных и проверки работы системы в реальном времени.
- Подсистема Linux — используется как программная среда для корректной работы инструментов разработки Nios II EDS. Через нее обеспечивается выполнение утилит командной строки (сборка, компиляция и отладка проектов на Nios II) внутри Windows.
Обратите внимание, что для установки Eclipse IDE сначала необходимо установить Quartus Prime, и все вышеуказанные ссылки предназначены для Windows.
Что касается компонентов, понадобится:
- Отладочный набор с ПЛИС
- Программатор USB Blaster V2 от Waveshare Electronics - — это программатор, который нужен для прошивки и настройки ПЛИС Intel/Altera. С его помощью можно быстро загружать проект в микросхему через JTAG и сразу проверять работу схемы. Он подключается к компьютеру по USB и работает вместе с Quartus Prime, так что без него не обойтись при работе с платами на ПЛИС или собственными разработками.
- Генератор аналогового сигнала (у меня OWON DGE2070)
- Количество каналов: 2
- Максимальная выходная частота: 70 МГц
- Частота дискретизации: 300 Мвыборок/с
- Вертикальное разрешение: 14 бит
- Интерфейс связи: USB для подключения и управления с ПК
- Последовательный порт USB–UART TTL-преобразователь на FT232RL (можно использовать и другие, если они поддерживают скорость от 1 Мбит/с) - это адаптер, который позволяет подключать устройства с интерфейсом UART напрямую к компьютеру через USB. Он удобен для отладки и передачи данных между ПЛИС, микроконтроллерами или другой электроникой.
- Минимум 4 соединительных провода
Все компоненты следует подключить следующим образом:
- Подаем с Генератора Сигнала синусоидный сигнал нужной частоты с напряжением в пределах от 0 до 2.5В
- Подключаем провод от генератора к аналоговому входу на отладочной плате и аналоговой земле
- Соединяем ПЛИС и ПК
- Подключаем один конец USB Blaster к специальному слоту на ПЛИС и другой конец к USB входу ПК
- Подключаем принимающий (Tx) пин последовательного порта к пину отладочного набора с исходящеми данными и землю (GND) к цифровой земле отладочного набора
Теперь, когда рабочее место полностью обустроено, можно приступать к реализации проекта. Готовую сборку можно увидеть на рисунке ниже:
Задача
Цель проекта заключается в разработке и реализации системы для оцифровки аналогового сигнала и передачи полученных данных с ПЛИС на компьютер в режиме реального времени.
В рамках проекта необходимо решить следующие задачи:
Источник сигнала
- Сгенерировать синусоидальный сигнал с частотой 10 кГц и амплитудой в пределах допустимого диапазона встроенного АЦП ПЛИС (от 0 до 2,5 В).
*Операционные усилители на отладочных платах (обозначения на схеме U3 и U4; номер детали — LM2902DR2, производитель — ON Semiconductor) имеют ограничение выходного напряжения примерно 1,95–2,0В. На некоторых платах они уже заменены на Microchip MCP6244-E/SL, который позволяет использовать полную амплитуду в 2.5В. [5]
- Подать сигнал на один из аналоговых входов АЦП, встроенного в ПЛИС Altera MAX 10.
Оцифровка сигнала
- Использовать встроенный 12-битный АЦП последовательного приближения, работающий с частотой дискретизации до 1 МГц (выбор значения частоты должен обеспечивать выполнение условия теоремы Найквиста).
- Обеспечить непрерывное преобразование входного аналогового сигнала в цифровую форму.
Обработка и подготовка данных
- Реализовать систему на базе процессора Nios II, включающую модули:
- блок встроенного АЦП,
- интерфейс UART для передачи данных,
- буфер FIFO для временного хранения выборок.
- Организовать преобразование результатов АЦП в поток данных, пригодный для передачи через UART.
- Обеспечить представление 12-битного результата в виде двух байт (старший и младший).
Передача данных
- Настроить интерфейс UART со скоростью передачи 1 Мбит/с.
- Обеспечить надежную отправку потока выборок без потерь и искажений через преобразователь USB–UART (FT232RL).
Прием и визуализация
- Организовать прием данных на ПК с использованием терминальной программы (например, PuTTY или RealTerm) или специализированного скрипта на Python/Matlab.
- Обеспечить возможность анализа данных: наблюдение формы сигнала, построение графиков и дальнейшая цифровая обработка.
Архитектура системы
На рисунке ниже представлено, как будет работать система и проходить данные.
- Signal Generator — это генератор сигнала, откуда поступает аналоговый сигнал. Далее внутри ПЛИС будут задействованы АЦП, память (memory), NIOS II, mSGDMA и UART. Пройдемся по ним:
- NIOS II — это программный процессор, разработанный компанией Altera, своего рода микроконтроллер, развернутый внутри ПЛИС. Он позволяет управлять системой и выполнять различные операции, используя язык программирования C, что облегчает работу.
- mSGDMA — Modular Scatter-Gather Direct Memory Access — модуль для прямого доступа к памяти. Он используется для быстрого доступа к памяти, не задействуя процессор. Modular в названии указывает на модульный дизайн, а Scatter-Gather — на возможность чтения и записи с любого участка памяти. [4]
- UART — протокол для передачи данных. Довольно прост в реализации и поэтому подходит для несложных задач. Ограничен по скорости до 1 Мбит/с, но нам этого вполне хватает.
- COM-порт — последовательный порт.
Все это работает следующим образом: генератор сигнала генерирует входной аналоговый сигнал. Далее идет блок ПЛИС, где происходит обработка данных и их передача в последовательный порт. Сигнал проходит через следующую цепочку:
- Обработка АЦП
- Передача образца АЦП в память
- Выставление прерывания после сохранения образца в памяти
- Регистрация прерывания процессором NIOS II
- Сохранение образца в кольцевом буфере
- Передача данных из кольцевого буфера в UART с помощью DMA
- Передача данных в последовательный порт
- Данные с последовательного порта поступают на ПК для дальнейшей обработки
Список литературы
- Altera. (2025, March 10). MAX® 10 FPGA device overview (Document ID: M10-OVERVIEW; Document No. 683658). Intel Corporation. https://www.intel.com/content/www/us/en/docs/programmable/683658
- Intel. (2017, July 6). Intel® MAX® 10 analog to digital converter user guide (Document ID: UG-M10ADC). Intel Corporation. https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug-m10adc.pdf
- Intel Corporation. (2023, January 8). Intel® MAX® 10 FPGA (10M08S, 144-EQFP) evaluation kit user guide (Document No. 812857). https://www.intel.com/content/www/us/en/docs/programmable/812857
- Intel Corporation. (2023, August 15). Embedded peripherals IP user guide (Document ID: UG-01085; Document No. 683130). https://www.intel.com/content/www/us/en/docs/programmable/683130
- Intel Corporation. (n.d.). 10M08 Eval Kit errata readme. Intel. https://cdrdv2.intel.com/v1/dl/getContent/776420
- Intel Corporation, “MAX 10 FPGA 10M08 evaluation kit” [Online image]. Available: https://www.intel.com/content/www/us/en/products/details/fpga/development-kits/max/10m08-evaluation-kit.html