打印

对FPGA在电机控制系统中作用的思考

[复制链接]
1212|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxAPP|  楼主 | 2012-10-11 22:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用了几年DSP之后,从TI的定点、16位、40MHz的TMS320F2407A到定点、32位、150MHz的TMS320F2812,再到带有FPU、32位、150MHz的TMS320F28335,感觉其虽然使用简单,在普通应用中,如简单的变频调速等领域完全可以胜任,但其成本因素又显得尤为突出;而在高性能的电机调速系统中又存在其他一些不足,比如其语句采用软件、串行执行,在需要大规模并行处理的时候就十分困难了;TMS320F28335的通用I/O数量虽然高达88个,但是在外扩较多设备时,如外扩A/D、D/A、液晶时,又因地址线、数据线不足、驱动能力不够而捉襟见肘。
考虑到FPGA的硬件实现、并行处理、可编程及强大的逻辑处理功能,最近将课题组的硬件处理核心转移到FPGA上来;阅读Xilinx的选型指南,感觉Spartan-6系列更符合我们的要求,但目前还存在一些制约,一是芯片刚出来,国内购买不容易、价格要相对较高、可参考的资料也较少;另外就是其焊接较为麻烦,对于实验室小批量的研究不太适合。综合考虑器件性能、成本、国内外应用现状,目前选择的器件主要是Xilinx的Spartan-3系列中的XC3S400和Sparta-3E系列中的XC3S500E;但通过一段时间的研究、应用,发现在成本接近的情况下(FPGA含税在100元左右,28335的浮点DSP要多20元左右),FPGA与DSP各有优缺点,我们最终的结论是把二者结合起来用在高性能的电机调速系统之中。
以大功率电机调速中的特定谐波消除调制法为例(selective harmonic elimination pulse width modulation,可参考:“符晓, 等. Digital Implement of Selective Harmonic Elimination Based on Digital Signal Processor. The First Asia Pacific Conference on Postgraduate Research in Microelectronics & Electronics. 2009.11: 141-144, Shanghai, China. ”):若以DSP实现,采用20KHz的定时中断,则每次中断共涉及到7次3阶曲线拟合(为了保证拟合精度,其拟合系数全部为有符号、单精度浮点数,共需存放892个IEEE标准格式的浮点数)以及几十次的逻辑判断,整个算法在充分优化的情况下需要的执行时间在12 μs 到 14.1μs,占用了近三分之一的DSP资源,而整个程序中拟合和逻辑判断几乎用掉差不多的处理时间。

相关帖子

沙发
lxAPP|  楼主 | 2012-10-11 22:15 | 只看该作者
因为多次曲线拟合、逻辑判断都可以并行执行,所以我们考虑讲这些并行计算使用FPGA实现,并使用硬件乘法器提高速度;开发环境使用ISE11.5(Win32版本)、Modelsim SE 6.5d和Synplify Pro 9.6.2,编程使用了Verilog HDL编写逻辑部分,EDK、MicroBlaze处理数**算,开发板使用了自制的XC3S400板子,下载线是直接购买的。
因为对所要实现的算法比较熟悉,并且已经用在DSP上用C语言实现过,所以程序的编写、代码实现与其功能仿真很快验证通过,因为大量的有符号、浮点数不好处理,其变化范围较大,又必须保证精度,只好采用reg类型存放、60位的整数来代表,对于除法、反正切等较为复杂的也交给MicroBlaze处理,种种制约因素叠加到以前就造成程序较为庞大了。
接下来的步骤是综合,讲综合的选项设置为性能优先。在综合中还出现了一些小插曲。一开始想省事,就使用ISE自动的综合工具,结果每次综合到半个多小时的时候就抱错了,说内存超过2G溢出了,还提示要改操作系统的boot.ini选项;但即使把虚拟内存改成3G,把boot.ini改成“multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Home Edition" /noexecute=optin /3GB /fastdetect”,综合过程执行到超过半个小时的时候占用超过2G内存并再次提示内存溢出。无奈执行改用Synplify Pro来综合,没想到只有了100多M内存、2分多钟就完成了综合。看来ISE11自带的综合工具比较弱,不知道刚刚推出的ISE12套件或者Linux版本下的ISE怎么样呢?
话又说回来,虽然综合通过了,但是程序显然也无法实现的。Synplify给出的综合结果如下:

Resource Usage Report for f7

Mapping to part: xc3s400pq208-4
Cell usage:
BUF 158 uses
FDRS 1 use
FDS 1 use
GND 1 use
MULT18X18 16 uses
MULT_AND 5042 uses
MUXCY 6883 uses
MUXCY_L 7509 uses
VCC 1 use
XORCY 12258 uses
LUT1 2018 uses
LUT2 6869 uses
LUT3 4115 uses
LUT4 6793 uses

I/O ports: 71
I/O primitives: 69
IBUF 65 uses
OBUF 4 uses

BUFGP 1 use

I/O Register bits: 2
Register bits not including I/Os: 0 (0%)

Block Multipliers: 16 of 16 (100%)

Global Clock Buffers: 1 of 8 (12%)

Total load per clock:
f7|start: 2

Mapping Summary:
Total LUTs: 19795 (276%)

Mapper successful!
Process took 0h:02m:07s realtime, 0h:02m:06s cputime

显然LUT占用了276%,这样要么得升级器件,要么得改程序了。看来FPGA的优势在于逻辑处理,而对大量的、浮点数量并不擅长,而DSP则恰恰相反。于是我们决定将控制算法、数据运算交由DSP处理,而其余的所有逻辑运算、设备外扩等等都交给FPGA,这样就组成了一个强大的电机核心控制系统。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

483

帖子

2

粉丝