打印

基于EDK的电机控制SVPWM算法的实现

[复制链接]
2312|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
星星之火红|  楼主 | 2012-11-1 21:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天走晚了看门大爷没打招呼就把大楼的大门锁了;被锁在实验室了,干脆写博文把-:)
上一次使用system generator体验了自动生成代码技术的简洁、方便,本次博文主要探讨基于Xilinx SOPC技术对SVPWM控制算法进行实现。
1.1        系统软硬件分工
一个完整的SOPC系统,其最大的特点就是软硬件协同设计,软硬件协同设计强调软件和硬件开发的并行性和相互反馈。
处理器可以通过顺序执行的方式完成复杂的运算,而硬件电路对于高速并行的逻辑处理部分有无可替代的优势,所以系统中的运算部分可以交给MicroBlaze处理器来处理,而FPGA内部剩余的硬件逻辑资源则负责处理系统中对速度要求高的逻辑处理部分。结合SVPWM算法的任务特点,将扇区判断以及作用时间计算这两部分工作分配给MicroBlaze,而PWM波生成模块以及死区产生模块都由相应的硬件逻辑电路来完成,将其封装成一个IP 核,取名为PWM_IPcore,并连接到MicroBlaze的PLB总线上。系统中需要的其他IP核有:
[1].        通用输入输出设备(GPIO):在闭环控制系统中,为uα和uβ的采样提供采样通道。
[2].        定时器/计数器(Timer/Counter):通过设置定时器的初值,从而提供可变的采样频率。
[3].        通用串口(Uartlite):在软件调试的过程中,可以通过串口实现与PC机的数据交换,同时在系统运行时可以接收上位机发送的指令信号。
[4].        中断控制器(Intc):处理定时器和通用串口产生的中断信号,并按照设置的中断优先级顺序,向MicroBlaze申请中断。
以上所添加的IP核都连接到PLB总线上,系统的整体结构框图如图1所示。

相关帖子

沙发
星星之火红|  楼主 | 2012-11-1 21:24 | 只看该作者

图1 基于SOPC的SVPWM控制系统硬件结构图
1.2        系统硬件设计及功能验证
1.2.1        采样通道的设计
如果系统要进行闭环控制,就必须对参考电压进行采样,从而根据采样电压的值来调整PWM波的输出,GPIO为处理器与外部数据的交换提供了通道,所以采样通道采用一个GPIO IP核来完成。通用I/O设备是PLB总线的外设,每一个GPIO设备最多可包含两个对外通路,每个通路可配置成1~32位,每一位I/O通道都可以动态的配置为输入输出端口。每个GPIO设备通过IPIF模块连接到PLB总线,其中每个IPIF模块相当于外部总线控制器。通路1和通路2的位数可以根据系统具体需要进行相应的配置。

使用特权

评论回复
板凳
星星之火红|  楼主 | 2012-11-1 21:24 | 只看该作者
1.2.2        定时器配置
定时器是连接在PLB总线上的从设备,其位宽可以配置成8~32。每个定时器IP核都包含两个相互独立的定时器单元Timer0及Timer1,每个定时器单元有专门的控制寄存器,通过对寄存器的配置来完成工作模式的设定。每个定时器IP核都有三种工作模式:
[1].        通用模式:在此模式下,两个定时器相互独立工作,既可配置成减计数模式也可以配置成增计数模式,计数值溢出后置中断标志位,在中断允许的情况下触发中断。
[2].        捕捉模式:在此工作模式下,对外部脉冲进行捕捉,并且置中断标志位,在中断允许的情况下触发中断。
[3].        PWM输出模式:此模式下,两路定时器要配合工作。
在本设计中,定时器主要的作用是产生固定的时间间隔,从而在每次定时器溢出中断时通过GPIO通道采样uα和uβ量化后的值。系统中只需要一个定时器单元就可以完成相应的工作,所以将定时器Timer0的工作方式设定为通用模式,位宽配置成32。

使用特权

评论回复
地板
星星之火红|  楼主 | 2012-11-1 21:24 | 只看该作者
1.2.3        通用串口配置
在本设计中串口的主要功能是:接收上位机发送的指令;将软件调试过程中的信息发送到超级终端进行观察。所以将串口做如下配置:
[1].        波特率为9600bps
[2].        数据有效位宽度为8
[3].        使能中断功能:在使用过程中只使能接收中断,从而迅速判断上位机发送来的指令。
1.2.4        中断控制器配置
在软件的编写过程中,中断是很重要一部分。由于在MicroBlaze处理器软核中没有中断控制器,要实现中断源中断信号的检测就需要添加中断控制器的IP核。Xilinx公司提供的中断控制器有如下特点:
[1].        1~32个中断源输入信号
[2].        1个中断请求输出信号:用于向CPU发出中断请求。
[3].        支持中断优先级功能
[4].        中断检测模式可以配置成上升沿检测、下降沿检测以及电平检测模式
在本设计中,中断源包括定时器以及串口,由于串口用来接收上位机发送来的指令,所以将其中断优先级的级别设为最高。
1.2.5        PWM波产生及死区产生模块的IP核设计
EDK工具为用户提供了丰富的IP核,但不可能满足所有用户的要求,根据实际需要定制IP核是SOPC嵌入式设计中常常需要的步骤,这也是实现“量身定做”系统的前提。每一个用户IP核都由用户任务逻辑和总线接口逻辑两部分组成,如图2所示。

图2 用户IP核连接示意图

使用特权

评论回复
5
星星之火红|  楼主 | 2012-11-1 21:24 | 只看该作者
1)        用户任务逻辑的设计与仿真验证
系统中定制的一个外设PWM_IPcore主要由PWM波生成模块和死区产生模块组成。其中PWM波形生成模块主要由一个增减计数器和三个比较器组成,通过端口T输入增减计数器的周期,从而产生周期恒定的三角波,与计数器的当前值进行比较,从而决定三路PWM信号的输出。死区产生模块主要由死区时间设定寄存器和一个增减计数器组成。这两部分都由硬件描述语言VerilogHDL书写,并且由顶层文件连接成一个整体,用synplify综合软件对顶层文件进行综合,得到外设的结构如图3所示。

图3 IP核的结构图

使用特权

评论回复
6
星星之火红|  楼主 | 2012-11-1 21:24 | 只看该作者
2)        总线接口逻辑的设计
本节设计的IP核,其主要目的是让处理器通过总线为其传送各种控制量,如调制周期Ts、死区时间deadtime等,以用来产生PWM波,只有单向的数据流,故选用“User Logic S/W Register Support”这种总线机制。
选定了总线的机制,还需要选择总线上寄存器的数量。所构建的IP核内部包括使能控制寄存器enable、复位信号寄存器res、PWM波控制寄存器HL、死区时间设定寄存器deadtime、扇区寄存器sector、调制周期寄存器Ts、三个时间寄存器 Ta、Tb、Tc以及启动信号start寄存器,clk信号是由外部晶振时钟分频得到的1MHz的时钟信号,无需通过总线寄存器进行控制。由于所构建的IP核共有十个需要控制的寄存器,所以在总线接口上也需要配置十个寄存器,在采用软件编程时只要控制PLB总线上相应的寄存器就可以向IP核中写入控制量。
这样就完成了用户IP核的构建,在系统搭建的过程中,直接将此IP核进行例化就可以实现用户的逻辑功能。
1.2.6        硬件资源占用情况
完成上述几个环节的设计后,整个SOPC系统的硬件就完全搭建好了,此时可以对所设计的硬件系统进行综合,并生成相应的硬件网表和硬件比特流文件。如果将硬件比特流文件下载到FPGA芯片的内部,此时FPGA就是一款专用的处理器芯片,这块芯片内部包含有MicroBlaze处理器、程序存储空间、定时器、中断控制器、串口以及定制的外设PWM_IPcore。这款处理器是专门为SVPWM控制系统设计的,实现了“量身定做”,在系统软件编写的过程中,不会再占用任何硬件资源,软件生成的可执行代码将放在程序存储空间内。本设计采用XC3S400TQ144 FPGA作为控制芯片,其硬件资源占用情况如图4所示。

图4系统硬件资源占用情况

使用特权

评论回复
7
星星之火红|  楼主 | 2012-11-1 21:25 | 只看该作者
从图4中可以看到,系统主要使用了4108个的四输入查找表(LUT),占查找表总数的57%;使用了8个BlockRAM,占总数的50%;使用了7个18×18的乘法器,占总数的43%;使用了一个数字时钟管理模块(DCM),占总数的25%;TQ144这种封装模式给用户提供的可用I/O口数为97,系统使用了其中的10个,主要包括1个CPU复位信号、一个时钟输入信号、两个串口通道、六路PWM脉冲输出信号,这里没有考虑uα和uβ的采样通道GPIO所占用的I/O资源。
1.3        系统软件设计
1.3.1        操作系统的选择
在Xilinx SOPC嵌入式系统中,操作系统的介绍已经在上一篇博文中提到了。 在本文SVPWM调制算法的实现过程中,软件的主要任务是根据参考电压矢量来计算扇区、基本矢量作用时间,并完成对IP核的控制,软件任务相对简单,不需要采用复杂的操作系统,故采用Standalone的方式。
1.3.2        应用程序的设计
在系统的软硬件分工中,将扇区判别以及作用时间计算这两个模块交给MicroBlaze软核来处理,最后将处理后的结果送入定制的IP核,从而产生PWM波。在采用C语言对MicorBlaze进行编程时,只需要通过PLB总线向定制的IP核写入如下信息即可:
[1].        配置res寄存器,给出IP核的初始化脉冲。
[2].        写入计算后的扇区值,即配置Sector寄存器。
[3].        写入计算后的开关器件的触发时刻Ta、Tb 和Tc。
[4].        写入调制周期Ts,从而为三角波产生模块提供周期。
[5].        写入死区时间deadtime,从而在死区产生模块产生相应长度的死区时间。
[6].        配置HL寄存器,从而决定开关器件是高有效还是低有效。HL=1, 高电平触发;HL=0,低电平触发。
[7].        配置enalbe寄存器,决定PWM输出端口的状态。enable=1,正常工作;enable=0,高阻态,封锁PWM输出。
[8].        写入start信号,从而启动PWM_IPcore开始工作,输出PWM波。
系统软件的流程如图5所示。

图5 MicroBlaze处理器软件任务流程图
至此,SVPWM调制算法就在单片FPGA芯片上得到了实现。从实现结果看,EDK实现的算法其资源占用比system generator要强不少,同样的SVPWM算法在XC3S400上可以用EDK实现,而用system generator时程序已经overloaded了,使用了XC3S500E才能完成。这里不知道是不是因为system generator生成的程序更严谨?
1.4        实验验证
使用SOPC与使用Verilog HDL编写和使用System Generator生产的代码,其实验结果没有显著区别,再次不再详细描述了。欢迎大家交流!

使用特权

评论回复
8
GoldSunMonkey| | 2012-11-10 22:07 | 只看该作者
是发重复了么??

使用特权

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

本版积分规则

101

主题

1782

帖子

22

粉丝