基于FPGA的直流电动机伺服系统设计摘要:提出的直流电动机伺服系统设计方案综合了EDA技术,单片机和模糊控制技术,采用模糊比例算法,即大范围内采用模糊控制,以提高系统的动态响应速度,在小范围内采用比例控制,以提高系统的稳态控制精度.试验证明:该系统细分精度高,可维护性强,响应速度快,控制效果理想.关键词:FPGA;伺服系统;模糊比例控制;PWM波1引言随着微控制进入控制领域,以及新型的电力电子功率器件的不断出现,使得采用全控型的开关功率元件进行PWM控制方式为主流.这种控制方式很容易在微控制器中实现,从而为直流电动机控制数字化提供了契机.传统的模糊控制器控制动作欠细腻,稳态精度欠佳.电动机是一种旋转式机器,它将电能转变为机械能,它主要包括一个用以产生磁场的电磁铁绕组或分布的定子绕组和一个旋转电枢或转子,其导线中有电流通过并受磁场的作用而使转动,这些机器中有些类型可作电动机用,也可作发电机用。它是将电能转变为机械能的一种机器。通常电动机的作功部分作旋转运动,这种电动机称为转子电动机;也有作直线运动的,称为直线电动机。电动机能提供的功率范围很大,从毫瓦级到万千瓦级。电动机的使用和控制非常方便,具有自起动、加速、制动、反转、掣住等能力,能满足各种运行要求;电动机的工作效率较高,又没有烟尘、气味,不污染环境,噪声也较小。由于它的一系列优点,所以在工农业生产、交通运输、国防、商业及家用电器、医疗电器设备等各方面广泛应用。而模糊比例控制(利用模糊数学的基本思想和理论的控制方法。在传统的控制领域里,控制系统动态模式的精确与否是影响控制优劣的最主要关键,系统动态的信息越详细,则越能达到精确控制的目的。然而,对于复杂的系统,由于变量太多,往往难以正确的描述系统的动态,于是工程师便利用各种方法来简化系统动态,以达成控制的目的,但却不尽理想。换言之,传统的控制理论对于明确系统有强而有力的控制能力,但对于过于复杂或难以精确描述的系统,则显得无能为力了。因此便尝试着以模糊数学来处理这些控制问题。)将模糊控制和比例控制有效的结合,使控制器兼有两者的优点.2算法设计2.1电机模型的建立直流电动机空载转速为4100r/min,减速比为1/160,额定电压为56V,额定电流不大于12A,功率为500W.忽略电枢电感及黏性阻尼系数,以电枢电压)(tua为输入变量,电机转速)(tω为输出变量的直流伺服电动机的传递函数可简化为11)(+=sTKsHme式中,电动机反电动势系数36041005660160×××=eK,机电时间常数msTm10=.以上推出的传递函数为电压与角度的关系,所以应在此传递函数基础上再加一积分环节,从而实现电枢电压与角度的传递关系.22.2模糊比例算法当误差小于1.2V时,采用模糊控制.模糊控制采用单输入,单输出结构,即以误差信号为输入信号,控制信号为输出信号.当误差大于1.2V时,电机全速转动.比例算法的控制函数为:)()(terrorKtup=式中pK——比例系数.比例算法控制器的作用是成比例的反映控制系统的偏差信号)(terror,偏差一旦产生,控制器立即产生控制作用,以减少偏差.采用微处理器,需引入数字比例控制,即以一系列采样时刻点kT代表时间t,其中,T为采样周期,k为采样序号.代入上式后变为:)()(1kTerrorKkTup=将T归一化为1后,可将)(1kTu简记为)(1kU.这样得到离散比例表达式:)()(1kerrorKkup=3系统模型的建立在Simulink中建立的系统理论模型如图1所示.对于模糊算法,由于只在大范围内采用,而系统的细调则采用比例算法,因此为提高系统的响应速度,未对模糊控制范围进行分类,而是利用其控制思想,当指令与反馈误差大于一定值时,电机全速运行.实际控制中,也体现了这种做法的优点.引入前馈算法,是为提高相应速度,增加系统带宽,实际控制也证明了这一点.34系统的硬件设计伺服器硬件电路主要由FPGA控制器,数据采集电路,过流保护电路,隔离电路,驱动电路等组成.各个模块在中央控制器FPGA的控制下协调工作.使用FPGA器件可以将原来的电路板级产品集成为芯片级产品,从而降低了功耗,提高了可靠性,同时还可以很方便的对设计进行修改.本设计采用的可编程逻辑芯片为Altera公司的FLEX10K系列的EPF10K10LC84-4芯片,它具有高密度,低成本,低功耗,灵活的内部连接和强大的I/O引脚功能等特点.其硬件结构如图2所示:数据采集系统主要由3个A/D传感器组成,其中指令值和位置反馈值用AD1674进行模/数转换,电流值由ADC0809采样得到.利用FPGA控制它的三条通道同时采样,分别采集指令信号,反馈信号和电流信号.系统采用双极可逆受限PWM波控制两组NMOS电路驱动直流电机.根据两组PWM波的占空比大小,控制电机的正反转.同时,两组PWM波通过设定适当死区,避免管子同时导通而导致电流过流发生的情况.电源系统需提供3组不共地电源,控制MOS管的导通和截至.本系统以3个DC/DC变换器作为隔离器件,产生3组幅值均为10V但不共地的电压源.由FPGA产生的一路PWM波作为控制信号,FPGA的另一路信号EN作为使能信号,控制PWM波的输出.其硬件电路图如图3所示.输出A路和C路PWM波控制一路MOS管的导通截至.输出B路和D路PWM波控制另一路MOS管的导通与截至.同时,两路PWM波的死区时间控制也由此电路实现.通过电路产生2组PWM波信号,因此提高了电路的可靠性.而且,通过调整电阻和电容的值可以实现死区时间的改变.采用集成运放组成电压比较电路.4PWMEN3A6B8C11DIC5AIC5BIC5CIC5DIC6AIC6BIC6CIC6Dvcc10k10k10k10k10k1k1k10k10k10k10k1k1k0.01uF0.01uF图35系统的软件设计伺服驱动器系统软件能够完成电机的正转,反转,加减速等控制功能.在本系统中采用混合编辑法设计各个模块,采用VHDL语音描述各模块功能.所提出的伺服系统方案,已经在康芯GW-48EDA试验箱中做了部分试验.并对系统进行了仿真.PWM波产生模块的VHDL代码如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitybio_polor1isport(ctr1:instd_logic_vector(7downto0);clk:instd_logic;pwm:outstd_logic);endentity;architectureoneofbio_polor1isbeginprocess(clk)variablecnt:std_logic_vector(7downto0);beginifclk'eventandclk='1'thenifcnt=11111111thencnt:=00000000;elsifcnt=ctr1thenpwm='1';cnt:=cnt+1;elsepwm='0';cnt:=cnt+1;endif;5endif;endprocess;endone;对其进行仿真,得到的工作仿真波形如图4和图5所示:以上的仿真研究试验表明,在256个时钟内,控制输入不变的话,输出稳定可靠,达到理想的效果.6AD1674控制模块程序如下;伪定义ADCHEQU32H;采样值高字节ADCLEQU31H;采样值低字节ADCNUMEQU30H;采样次数ADCSBITP1.5;AD7814片选ADSCLKBITP1.1;AD7814时钟ADDOUTBITP1.7;AD7814数据输出ADSCLBITP1.1;AD7416时钟ADSDABITP1.7;AD7416数据I/O······;程序初始化······;AD7814的采样参考程序SAMPLE78:MOVADCNUM,#8;采样8次SE078:CLRADCS;选中AD7814MOVR7,#16;产生16个取数脉冲MOVADCH,#0;A/D值高字节MOVADCL,#0;A/D值低字节SE178:CLRADSCLKNOPNOPJBADDOUT,SE178SE378:CLRADSCLKNOPNOPMOVC,ADDOUTMOVA,ADCLRLCAMOVADCL,AMOVA,ADCHRLCAMOVADCH,ASETBADSCLKNOPNOPDJNZR7,SE378SETBADCS······;进行数据处理DJNZADCNUM,SE078RET;AD7416的采样参考程序;AD7414、AD7415与AD7416相似,但地址不同。SAMPLE74:MOVADCNUM,#8;连续采样8次SE074:MOVR6,#9EH;片选AD7416的地址写操作MOVR5,#1;选中配置寄存器MOVR4,#18H;给配置寄存器赋值LCALLWRCOM;三字节的写操作MOVR6,#10011110BMOVR5,#3;选中温度上限寄存器MOVR4,#40H;上限温度=64LCALLWRCOMMOVR6,#10011110BMOVR5,#2;选中温度下限寄存器MOVR4,#20H;上限温度=32LCALLWRCOMMOVR6,#10011110BMOVR5,#0;选中温度寄存器MOVWREXE;两字节的写操作MOVDATA1,#10011111B;片选AD7416,读操作LCALLRDCOM······;数据处理DJNZADCNUM,SE074;采样未完,返回WRCOM:LCALLBEGIN;三字节的写操作MOVDATA1,R6LCALLOUTBYTE;输出字节MOVDATA1,R5LCALLOUTBYTEMOVDATA1,R4LCALLOUTBYTELCALLSTOPRETWREXE:LCALLBEGIN;两字节的写操作MOVDATA1,R6LCALLOUTBYTEMOVDATA1,R5LCALLOUTBYTELCALLSTOPRETRDCOM:LCALLBEGIN;读操作LCALLOUTBYTELCALLINBYTE;输入字节MOVADCH,DATA1LCALLNACK;MCU使ADSDA数据线变为低电平LCALLINBYTEMOVADCL,DATA1LCALLACK;MCU使ADSDA数据线变为高电平LCALLSTOPRETOUTBYTE:MOVR7,#8;输出字节OE1:MOVA,DATA1RLCAMOVADSDA,CMOVDATA1,ALCALLCLOCKDJNZR7,OE1LCALLACK;AD7416产生应答RETINBYTE:SETBADSDA;输入字节MOVR7,#8INE1:LCALLCLOCKMOVA,DATA1RLCAMOVDATA1,ADJNZR7,INE1RETNACK:CLRADSDA;AD7416无应答LCALLCLOCK;ADSDA数据线为0,一个时钟脉冲之后,ADSDA为1RETACK:SETBADSDA;AD7416有应答LCALLCLOCK;ADSDA为1,一个时钟脉冲之后,ADSDA为0RETSTOP:CLRADSDA;产生停止信号SETBADSCLNOPNOPNOPNOPSETBADSDARETBEGIN:SETBADSDA;产生开始信号SETBADSCLNOPNOPNOPNOPNOPCLRADSDANOPNOPNOPNOPCLRADSCLRETCLOCK:NOP;产生时钟脉冲SETBADSCLNOPNOPNOPNOPMOVC,ADSDACLRADSCLRET7ADC0809控制模块程序如下:COMEQU50H;指令寄存器DATEQU51H;数据寄存器RSEQUP2.1;LCD寄存器选择信号RWEQUP2.2;LCD读/写选择信号EEQUP2.3;LCD使能信号ORG0000HLJMPMAIN;主程序入口ORG000BHLJMPBT0;T0中断入口ORG0030H;主程序,初始化MAIN:MOVSP,#60HLCALLINTMOV30H,#30HMOV31H,#0A5HMOV32H,#30HMOV3