基于FPGA的直流电动机伺服系统.docx

上传人:b****8 文档编号:9005599 上传时间:2023-02-02 格式:DOCX 页数:20 大小:127.17KB
下载 相关 举报
基于FPGA的直流电动机伺服系统.docx_第1页
第1页 / 共20页
基于FPGA的直流电动机伺服系统.docx_第2页
第2页 / 共20页
基于FPGA的直流电动机伺服系统.docx_第3页
第3页 / 共20页
基于FPGA的直流电动机伺服系统.docx_第4页
第4页 / 共20页
基于FPGA的直流电动机伺服系统.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

基于FPGA的直流电动机伺服系统.docx

《基于FPGA的直流电动机伺服系统.docx》由会员分享,可在线阅读,更多相关《基于FPGA的直流电动机伺服系统.docx(20页珍藏版)》请在冰豆网上搜索。

基于FPGA的直流电动机伺服系统.docx

基于FPGA的直流电动机伺服系统

基于FPGA的直流电动机伺服系统设计

摘要:

提出的直流电动机伺服系统设计方案综合了EDA技术,单片机和模糊控制技术,

采用模糊比例算法,即大范围内采用模糊控制,以提高系统的动态响应速度,在小范围内采

用比例控制,以提高系统的稳态控制精度.试验证明:

该系统细分精度高,可维护性强,响

应速度快,控制效果理想.

关键词:

FPGA;伺服系统;模糊比例控制;PWM波

1引言

随着微控制进入控制领域,以及新型的电力电子功率器件的不断出现,使得采用全控型

的开关功率元件进行PWM控制方式为主流.这种控制方式很容易在微控制器中实现,从而为直流电动机控制数字化提供了契机.传统的模糊控制器控制动作欠细腻,稳态精度欠佳.电动机是一种旋转式机器,

它将电能转变为机械能,它主要包括一个用以产生磁场的电磁铁绕组或分布的定子绕组和一个旋转电枢或转子,其导线中有电流通过并受磁场的作用而使转动,这些机器中有些类型可作电动机用,也可作发电机用。

它是将电能转变为机械能的一种机器。

通常电动机的作功部分作旋转运动,这种电动机称为转子电动机;也有作直线运动的,称为直线电动机。

电动机能提供的功率范围很大,从毫瓦级到万千瓦级。

电动机的使用和控制非常方便,具有自起动、加速、制动、反转、掣住等能力,能满足各种运行要求;电动机的工作效率较高,又没有烟尘、气味,不污染环境,噪声也较小。

由于它的一系列优点,所以在工农业生产、交通运输、国防、商业及家用电器、医疗电器设备等各方面广泛应用。

而模糊比例控制(利用模糊数学的基本思想和理论的控制方法。

在传统的控制领域里,控制系统动态模式的精确与否是影响控制优劣的最主要关键,系统动态的信息越详细,则越能达到精确控制的目的。

然而,对于复杂的系统,由于变量太多,往往难以正确的描述系统的动态,于是工程师便利用各种方法来简化系统动态,以达成控制的目的,但却不尽理想。

换言之,传统的控制理论对于明确系统有强而有力的控制能力,但对于过于复杂或难以精确描述的系统,则显得无能为力了。

因此便尝试着以模糊数学来处理这些控制问题。

)将模糊控制和比例控制有效的结合,使控制器兼有两者的优点.

2算法设计

2.1电机模型的建立

直流电动机空载转速为4100r/min,减速比为1/160,额定电压为56V,额定电流不大于

12A,功率为500W.忽略电枢电感及黏性阻尼系数,以电枢电压

)(tua为输入变量,电机

转速

)(tω

为输出变量的直流伺服电动机的传递函数可简化为

1

1

)(

+

=

sT

KsH

m

e

式中,电动机反电动势系数3604100

5660160

×

××

=eK

机电时间常数msTm10=.以上推出的传递函数

为电压与角度的关系,所以应在此传递函数基础上再加一积分环节,从而实现电枢电压与角

度的传递关系.

2

2.2模糊比例算法

当误差小于1.2V时,采用模糊控制.模糊控制采用单输入,单输出结构,即以误差信

号为输入信号,控制信号为输出信号.当误差大于1.2V时,电机全速转动.

比例算法的控制函数为:

)()(terrorKtup=

式中pK——比例系数.比例算法控制器的作用是成比例的反映控制系统的偏差信号

)(terror

偏差一旦产生,控制器立即产生控制作用,以减少偏差.

采用微处理器,需引入数字比例控制,即以一系列采样时刻点kT代表时间t,其中,T

为采样周期,k为采样序号.代入上式后变为:

)()(1kTerrorKkTup=

将T归一化为1后,可将)(1kTu简记为)(1kU.这样得到离散比例表达式:

)()(1kerrorKkup=

3系统模型的建立

在Simulink中建立的系统理论模型如图1所示.

对于模糊算法,由于只在大范围内采用,而系统的细调则采用比例算法,因此为提高系

统的响应速度,未对模糊控制范围进行分类,而是利用其控制思想,当指令与反馈误差大于

一定值时,电机全速运行.实际控制中,也体现了这种做法的优点.引入前馈算法,是为提

高相应速度,增加系统带宽,实际控制也证明了这一点.

3

4系统的硬件设计

伺服器硬件电路主要由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波信号,因此提高了电

路的可靠性.而且,通过调整电阻和电容的值可以实现死区时间的改变.采用集成运放组成

电压比较电路.

4

PWM

EN

3A

6B

8C

11D

IC5A

IC5B

IC5C

IC5D

IC6A

IC6B

IC6C

IC6D

vcc

10k

10k

10k

10k

10k

1k

1k

10k

10k

10k

10k

1k

1k

0.01uF

0.01uF

图3

5系统的软件设计

伺服驱动器系统软件能够完成电机的正转,反转,加减速等控制功能.在本系统中采用

混合编辑法设计各个模块,采用VHDL语音描述各模块功能.所提出的伺服系统方案,已

经在康芯GW-48EDA试验箱中做了部分试验.并对系统进行了仿真.PWM波产生模块的

VHDL代码如下:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitybio_polor1is

port(ctr1:

instd_logic_vector(7downto0);

clk:

instd_logic;

pwm:

outstd_logic);

endentity;

architectureoneofbio_polor1is

begin

process(clk)

variablecnt:

std_logic_vector(7downto0);

begin

ifclk'eventandclk='1'then

ifcnt="11111111"then

cnt:

="00000000";

elsifcnt<=ctr1then

pwm<='1';cnt:

=cnt+1;

elsepwm<='0';cnt:

=cnt+1;

endif;

5

endif;

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;选中AD7814

MOVR7,#16;产生16个取数脉冲

MOVADCH,#0;A/D值高字节

MOVADCL,#0;A/D值低字节

SE178:

CLRADSCLK

NOP

NOP

JBADDOUT,SE178

SE378:

CLRADSCLK

NOP

NOP

MOVC,ADDOUT

MOVA,ADCL

RLCA

MOVADCL,A

MOVA,ADCH

RLCA

MOVADCH,A

SETBADSCLK

NOP

NOP

DJNZR7,SE378

SETBADCS

······;进行数据处理

DJNZADCNUM,SE078

RET

;AD7416的采样参考程序;AD7414、AD7415与AD7416相似,但地址不同。

SAMPLE74:

MOVADCNUM,#8;连续采样8次

SE074:

MOVR6,#9EH;片选AD7416的地址写操作

MOVR5,#1;选中配置寄存器

MOVR4,#18H;给配置寄存器赋值

LCALLWRCOM;三字节的写操作

MOVR6,#10011110B

MOVR5,#3;选中温度上限寄存器

MOVR4,#40H;上限温度=64

LCALLWRCOM

MOVR6,#10011110B

MOVR5,#2;选中温度下限寄存器

MOVR4,#20H;上限温度=32

LCALLWRCOM

MOVR6,#10011110B

MOVR5,#0;选中温度寄存器

MOVWREXE;两字节的写操作

MOVDATA1,#10011111B;片选AD7416,读操作

LCALLRDCOM

······;数据处理

DJNZADCNUM,SE074;采样未完,返回

WRCOM:

LCALLBEGIN;三字节的写操作

MOVDATA1,R6

LCALLOUTBYTE;输出字节

MOVDATA1,R5

LCALLOUTBYTE

MOVDATA1,R4

LCALLOUTBYTE

LCALLSTOP

RET

WREXE:

LCALLBEGIN;两字节的写操作

MOVDATA1,R6

LCALLOUTBYTE

MOVDATA1,R5

LCALLOUTBYTE

LCALLSTOP

RET

RDCOM:

LCALLBEGIN;读操作

LCALLOUTBYTE

LCALLINBYTE;输入字节

MOVADCH,DATA1

LCALLNACK;MCU使ADSDA数据线变为低电平

LCALLINBYTE

MOVADCL,DATA1

LCALLACK;MCU使ADSDA数据线变为高电平

LCALLSTOP

RET

OUTBYTE:

MOVR7,#8;输出字节

OE1:

MOVA,DATA1

RLCA

MOVADSDA,C

MOVDATA1,A

LCALLCLOCK

DJNZR7,OE1

LCALLACK;AD7416产生应答

RET

INBYTE:

SETBADSDA;输入字节

MOVR7,#8

INE1:

LCALLCLOCK

MOVA,DATA1

RLCA

MOVDATA1,A

DJNZR7,INE1

RET

NACK:

CLRADSDA;AD7416无应答

LCALLCLOCK;ADSDA数据线为0,一个时钟脉冲之后,ADSDA为1

RET

ACK:

SETBADSDA;AD7416有应答

LCALLCLOCK;ADSDA为1,一个时钟脉冲之后,ADSDA为0

RET

STOP:

CLRADSDA;产生停止信号

SETBADSCL

NOP

NOP

NOP

NOP

SETBADSDA

RET

BEGIN:

SETBADSDA;产生开始信号

SETBADSCL

NOP

NOP

NOP

NOP

NOP

CLRADSDA

NOP

NOP

NOP

NOP

CLRADSCL

RET

CLOCK:

NOP;产生时钟脉冲

SETBADSCL

NOP

NOP

NOP

NOP

MOVC,ADSDA

CLRADSCL

RET

7ADC0809控制模块

程序如下:

COMEQU50H;指令寄存器

DATEQU51H;数据寄存器

RSEQUP2.1;LCD寄存器选择信号

RWEQUP2.2;LCD读/写选择信号

EEQUP2.3;LCD使能信号

        ORG0000H

        LJMPMAIN      ;主程序入口

ORG000BH

LJMPBT0        ;T0中断入口

        ORG0030H      ;主程序,初始化

MAIN:

  MOVSP,#60H

        LCALLINT

        MOV30H,#30H

        MOV31H,#0A5H

        MOV32H,#30H

        MOV33H,#30H

        MOV34H,#30H

        MOVR7,#30H

        LCALLN1        ;显示200808588ZPP        Voltage=0.000

MOVTMOD,#00H    ;定时器T0设为方式0

MOVTH0,#00h    ;装入定时常数

MOVTL0,#00h

SETBTR0        ;启动T0

MOV24h,#03h  ;装入T0中断次数

MOVIE,#82H    ;开中断

LP:

MOVR7,#30H    ;显示缓冲区首地址

LCALLDISPLY

SJMPLP        ;循环显示

DISPLY:

  movcom,#0CAH        ;设置数据起始地址(第而行第10位)

  lcallpr1

  movr1,#05h

  movr0,#30h

l:

MOVDAT,@r0

  LCALLPR2

  INCR0

  djnzr1,l

  ret

;1.逐字依次输入方式演示程序段

N1:

MOVCOM,#01H      ;清屏

  LCALLPR1

  MOVCOM,#06H      ;设置输入方式

  LCALLPR1

  MOVCOM,#081H      ;设置数据起始地址(第一行地二位)

  LCALLPR1

  MOVDPTR,#TAB1

  MOVR2,#0EH

  MOVR3,#00H

WRIN1:

  MOVA,R3

  MOVCA,@A+DPTR

  MOVDAT,A

  LCALLPR2

  INCR3

  DJNZR2,WRIN1

  MOVCOM,#0C1H      ;设置数据起始地址(第二行地二位)

  LCALLPR1

  MOVDPTR,#TAB2

  MOVR2,#9

  MOVR3,#00H

WRIN2:

  MOVA,R3

  MOVCA,@A+DPTR

  MOVDAT,A

  LCALLPR2

  INCR3

  DJNZR2,WRIN2

  RET

TAB1:

DB"200808588ZPP"

TAB2:

DB"VOLTAGE="

;LCD间接控制方式下的初始化子程序

INT:

LCALLDELAY;调延时子程序

MOVCOM,#38H;设置工作方式(2行,8位数据)

LCALLPR1

MOVCOM,#01H;清屏

LCALLPR1

MOVCOM,#06H;设置输入方式

LCALLPR1

MOVCOM,#0CH;设置显示方式

LCALLPR1

RET

DELAY:

MOVR6,#0FH;延时子程序

MOVR7,#00H

DELAY1:

NOP

DJNZR7,DELAY1

DJNZR6,DELAY1

RET

;LCD间接控制方式的驱动子程序如下

;1读BF和AC值

PR0:

PUSHACC

    MOVP0,#0FFH;P0置位,准备读

    CLRRS;RS=0

    SETBRW;R/W=1

    SETBE;E=1

    LCALLDELAY

    MOVCOM,P0;读BF和AC6-4值

    CLRE;E=0

    POPACC

    RET

;2写指令代码子程序

PR1:

PUSHACC

    CLRRS    ;RS=0

    SETBRW  ;R/W=1

PR11:

MOVP0,#0FFH;P0置位,准备读

    SETBE;E=1

    LCALLDELAY

    NOP

    MOVA,P0

    CLRE

    JBACC.7,PR11;BF=1?

    CLRRW;R/W=0

    MOVP0,COM

    SETBE;E=1

    CLRE;E=0;E=0

    POPACC

    RET

;3写显示数据子程序

PR2:

PUSHACC

    CLRRS;RS=0

    SETBRW;R/W=1

PR21:

MOVP0,#0FFH

    SETBE;E=1

    LCALLDELAY

    MOVA,P0;读BF和AC6-4值

    CLRE;E=0

    JBACC.7,PR21

    SETBRS

    CLRRW

    MOVP0,DAT;写入数据

    SETBE

    CLRE

    POPACC

    RET

;4读显示数据子程序

PR3:

PUSHACC

    CLRRS;RS=0

    SETBRW;R/W=1

PR31:

MOVP0,#0FFH;P0置位,准备读

    SETBE;E=1

    LCALLDELAY

    MOVA,P0;读BF和AC6-4值

    CLRE;E=0

    JBACC.7,PR31

    SETBRS

    SETBRW;R/W=1

    MOVP0,#0FFH;读数据

    SETBE;E=1

    MOVDAT,P0

    CLRE;E=0

    POPACC

    RET

;定时器T0中断服务程序,读取ADC0809第0通道的A/D转换结果并化为显示值

BT0:

PUSHACC        ;保护现场

PUSHPSW

MOVPSW,#08H

CLRTR0          ;停止T0

MOVTH0,#00h    ;重装定时常数

MOVTL0,#00h[u][u]

MOVDPTR,#0F6FFH;0809端口地址////

MOVA,#0        ;0通道

MOVX@DPTR,A;启动0809

MOVXA,@DPTR;读0809转换结果

        MOVB,#03H      ;将转换的值除以3再累加,存入40H中

        DIVAB;

        ADDA,40H;////

        MOV40H,A

        MOVA,B          ;将除以3后的余数累加放入41H中

        ADDA,41H

        MOV41H,A

        dec24h          ;3次中断未到则返回///

mova,24h

jnzrtn1        

        mov24h,#03h    ;重装中断次数

        MOVA,41H        ;将累加的余数再除3后相加

        DIVAB

        ADDA,40H        

        MOV40H,#0      ;清零累加数

        MOV41H,#0

rtn:

    MOVB,#05h      ;A/D转换结果化为显示值

MULAB          ;(AD*5)/256

mov30h,b        ;AD*5的高字节为整数部分

movb,#0ah

mulab          ;AD*5的低字节为/256的结果,为小数部分

mov32h,b        ;二进制小数换为10进制数

movb,#0ah

mulab

mov33h,b

movb,#0ah

mulab

mov34h,b

ljmprtn1

rtn1:

SETBTR0

        ORL30H,#30H      ;显示值换为ASSIC码

        mov31H,#0a5H    ;小数点

        ORL32H,#30H

        ORL33H,#30H

        ORL34H,#30H

        POPPSW

POPACC

RETI

    END

8相关原理图

9结语

由于FPGA高集成度芯片的采用,保证了整个电路系统所用外围器件较少,这样减少了

电路出现问题的排错时间,也降低了系统的安装难度.伺服系统经过不断调试,硬件电路工

作稳定,可靠,系统软件内部设置各种措施,控制芯片自身抗抗干扰性强.

参考文献:

[1]周润景.基于QuartusII的FPGA/CPLD数字系统设计实例.电子

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1