不久前使用FPGA设计了一个自动控制系统,我的首篇博客记录下该工作的主要思路。
使用的FPGA开发板提供了可编程逻辑(PL)端和信号处理系统(PS)端,分别执行硬件和软件编辑功能,其基本架构如图所示。双通道ADC和DAC直接通过扩展槽与开发板相连,执行数据输入输出,在PL端完成底层计算,并通过直接内存获取(DMA)将PL端数据(ADC data、DAC data)送入PS端,最终转换为数据直接输出(mini DP)及串口控制指令输出(RS 485)。PL与PS端分别基于Vivado和Vitis进行开发。

工程环境的设计参考了Alinx提供的《DMA使用之ADC示波器》、《PL端RS485测试》两个工程。首先在Vivado平台完成了硬件部分,设计好的框架如图所示,输入端口主要是ADC/DAC数据、串口接收端及采样时钟,输出端口为串口发送端及使能端。这样即打通了硬件与软件交互的桥梁,使得软件编程成为可能。

在Vitis平台上使用C语言完成后续软件功能的设计,依功能需求开发了三核CPU,一个用于完成ADC/DAC数据的直接输出,通过外接显示屏展示,另两个用于分别完成两个通道的计算串口指令发送功能。在这一部分功能中,首先改写了《DMA使用之ADC示波器》工程中的draw_wave函数,原工程文件中该函数作用是将获取的数据展示在画布(即外接显示屏)上,修改后将该函数设定为将DMA中的数据存储为数组currdata_array,方便调用。
void dra

本文介绍了使用FPGA设计自动控制系统的经验,通过Vivado和Vitis平台,结合双通道ADC和DAC,实现了数据输入输出、底层计算以及通过DMA进行数据交换。在软件层面,利用C语言在Vitis上开发了三核CPU,分别处理数据输出和串口指令,形成完整的控制环路。
最低0.47元/天 解锁文章
300

被折叠的 条评论
为什么被折叠?



