可编程逻辑
Xilinx System Generator 是专门为数字信号算法处理而推出的模型化设计平台,可以快速、简单地将DSP系统的抽象算法转换成可综合的、可靠的硬件系统,弥补了大部分对C语言以及Matlab工具很熟悉的DSP工程师对于硬件描述语言VHDL和Verilog HDL认识不足的缺陷。
System Generator作为一个硬件设计工具包安装在Matlab软件中,提供了相当丰富的应用子模块。设计者如同使用Matlab中其他模块一样,通过拖拽和连接就可以将子模块搭建成一个完整的应用系统。
在PID控制算法的应用中有位置式和增量式两种。位置式PID控制算法中因运用了误差的累加,控制的输出量与过去所有时间的状态有关,所以位置式PID控制算法的累积误差相对较大。而增量式PID控制算法中的调整量只是与当前及前两个状态有关,并且增量式PID算法只是控制每次的输出增量,而且一般执行机构都带有记忆功能,一旦控制器出错,能保持住原位,不会严重影响到系统的工作。 PID数学模型:
根据公式(4)的增量式数字PID模型,可在Xilinx System Generator工具包中调用相关子函数模块来构建整个函数[5],如图1所示。
设计中使用了自定义函数模块(Mcode),该模块是Xilinx System Generator中提供给DSP设计者的可编程逻辑模块,可以使用Matlab语言编写符合设计者要求的子函数。Mcode模块分别支持控制逻辑、状态逻辑、二位除法运算以及定点数运算等逻辑运算,并可灵活地定义输入输出的个数以及输出数据的类型。最终在生成硬件逻辑时自动将Mcode中的代码转换成VHDL/Verilog硬件描述语言。另外,由于生成的是逻辑控制,对设计者来说运用起来十分便利,并且该模块中的代码在生成为硬件逻辑以后,几乎是并行直接输出,速度和效率都非常高。如图2所示,在Mcode模块中写入了代码之后,会生成对应的自定义函数模块。
在PID算法模块构建完成以后,需要嵌入到实际的控制对象中以达到预期的控制目的。 实验采用的是一阶RC控制对象,该对象在实验中可以明显有效地将控制效果反映出来。PID闭环控制系统框图如图3所示。对于一阶RC控制对象,选择电压作为输出的控制量,在设计中加入了A/D 以及D/A转换模块来完成采样和控制量的输出。 实验平台采用Xilinx公司的Spartan3E Start Kit,其中带有两路14 bit的A/D(LTC1407)输入以及4路16 bit
(2)在PID算法的输入与输出端搭建数据转换模块。由于通过A/D采样得到的数据和D/A输出的数据都是二进制,而PID算法模块中使用的是十进制数据,并且小数点的位数也不一样,所以需要在PID算法的输入和输出端插入数据转换模块。另外还必须加入Gateway in和Gateway out来实现数据的前端输入和后端输出。PID控制器完整模型如图5所示。
(3)用System Generator生成PID算法工程文件后导入到ISE工程中。双击图5中的System Generator模块,选择HDL\netlist和生成路径后点击Generator,就能自动生成相应的VHDL/Verilog硬件语言代码。在工程的顶层文件下把生成的sgp工程添加进去,例化后嵌入到工程中。
(4)在顶层文件中由状态机安排好各个模块之间的时序。
(5)综合工程,分析时钟时序是否满足工程要求,工程时序分析如表1所示。需要时可添加时钟管理器(DCM)确保时序的正常进行。
(6)连线并把BIT文件下载到开发板中,用示波器察看实际效果。
5 实验数据分析 实验中使用了D/A 4路输出信号中的2路:A路输出控制量;B路输出1 V~2 V的方波电压作为给定值,同时方波电压接到另一个完全相同的一阶RC电路上,让其与通过PID调节后的被控对象作对比。图6(a)~图6(d)表示了频率为100 Hz时,在不同参数条件下的实验结果。
从实验结果可知,在FPGA中构建的PID控制器完全能达到预期的效果,而且实验结果是通过示波器观测到的实测结果,证明了在FPGA中实现算法硬件化是可行的,并且控制算法在硬件中运行的实测数据和仿真出来的模拟数据相比,实测数据更有说服力。
用FPGA作为嵌入式算法平台,在算法运行速度上与其他嵌入式算法平台相比有着特定的优势,利用Xilinx的System Generator工具能够快速简单地完成算法构建并可直接完成硬件实现。虽然本文采用的是一阶RC电路作为控制对象,即使换成是二阶或者是耦合控制对象同样能够达到比较理想的控制效果。特别是对于大运算量的算法(如矩阵运算等),在FPGA资源充裕的情况下,可以达到其他控制器无法达到的处理速度,而且基于FPGA的可编程性,对于算法的修正、升级和验证都十分灵活,更使算法的硬件实现变得实用。缺点是FPGA对于时序较为严格,在工程中需要对整个工程的时序进行分析,以确保满足时序要求,而且如果是自己编写一些执行机构的驱动,仍需要将驱动部分也考虑进去,必要时需要添加约束。
全部0条评论
快来发表一下你的评论吧 !