汇编语言实现PID运算(4)

2019-03-10 14:38

MOV DIV2,AX // MOV AX,TD2

MOV DIV1,AX //TD2作为分子 MOV SHIFTTIME2,4 CALL DIVISION

MOV AX,QUOTIENT //商作为计算微分项的乘数 MOV MUL2,AX

MOV AX,WORD PTR UD //UD中的暂存值作为被乘数 MOV MUL1,AX

MOV SHIFTTIME1,4 CALL MULTIPLICATION

MOV AX,WORD PTR PRODUCT+2

MOV WORD PTR UD1+2,AX //微分项前项计算完成,存放在UD1双字中

MOV AX,WORD PTR PRODUCT MOV WORD PTR UD1,AX CLC

SUB AX,WORD PTR UD0 MOV WORD PTR ENDIFF,AX

MOV AX,WORD PTR UD1+2 SBB AX,WORD PTR UD0+2

MOV WORD PTR ENDIFF+2,AX //至此微分项计算完成

MOV AX,KP2

MOV MUL1,AX //开始计算积分项 MOV AX,TC2 MOV MUL2,AX

MOV SHIFTTIME1,4 CALL MULTIPLICATION

MOV AX,WORD PTR PRODUCT MOV DIV1,AX MOV AX,TI2 MOV DIV2,AX

MOV SHIFTTIME2,4 CALL DIVISION

MOV AX,QUOTIENT

MOV MUL2,AX //作为乘数 MOV AX,EN2 //-------------此处为了演示,把误差值改小 //MOV AX,0100H MOV MUL1,AX

MOV SHIFTTIME1,4 CALL MULTIPLICATION

MOV AX,WORD PTR PRODUCT+2 MOV WORD PTR ENINT+2,AX MOV AX,WORD PTR PRODUCT

MOV WORD PTR ENINT,AX //积分项计算完成 CLC //把三项相加 MOV AX,WORD PTR ENSUM ADD AX,WORD PTR ENPRO MOV BX,WORD PTR ENSUM+2

ADC BX,WORD PTR ENPRO+2 //比例项加入 CLC

ADD AX,WORD PTR ENDIFF

ADC BX,WORD PTR ENDIFF+2 //微分项加入 CLC

ADD AX,WORD PTR ENINT

ADC BX,WORD PTR ENINT+2 //微分项加入 MOV WORD PTR ENSUM,AX //结果保存

MOV UN,AX //若UN不溢出,即ENSUM+2存储的值为0,则只要输出UN即可 △

MOV UNOV,BX //溢出量保存在UNOV中 //把UN的结果显示到屏幕上 MOV AX,UNOV

MOV DISPLAYWORD,AX CALL DISPLAYS MOV AX,UN

MOV DISPLAYWORD,AX CALL DISPLAYS

MOV DL,0AH // 每次调用显示时生成换行 MOV AH,02H INT 21H

//结尾处进行变量的替换为下次计算做准备 MOV AX,WORD PTR UD1+2 MOV WORD PTR UD0+2,AX MOV AX,WORD PTR UD1

MOV WORD PTR UD0,AX //UD1取代上一时刻的UD0 MOV AX,EN2 // 误差替换 MOV EN1,AX

POP CX POP BX POP AX RET PID2 ENDP

//-----------------------PID3计算子程序--------------------- //真正在闭环系统中采用的PID控制算法

//为四个参数赋具体值,误差存储在EN2,EN1中

//调用前请为设定值SV和被控量PV赋值,PID3的计算结果存储在控制量PV当中,算法与PID2相同

//PID算法需要利用到的PV,SV,EN1,UD0,UN,引用PID时注意保存 PID3 PROC

PUSH AX //初始状态保存,压入堆栈 PUSH BX PUSH CX MOV AX,0

MOV 清0

MOV MOV SUB MOV MOV SUB 中

MOV MOV MOV MOV CALL MOV MOV MOV MOV ENPRO双字中

MOV MOV MOV MOV MOV CALL MOV 过16位

MOV MOV MOV CALL MOV MOV MOV MOV WORD PTR UD,AX //每次调用PID3,暂存值UD WORD PTR UD+2,AX AX,SV //设定值 AX,PV //被控量 EN2,AX

BX,EN2 //获取n时刻的误差

BX,EN1 //与(n-1)时刻的误差做差,误差增量存在BX MUL1,BX

AX,KP //与KP相乘 MUL2,AX

SHIFTTIME1,4 MULTIPLICATION

AX,WORD PTR PRODUCT+2 WORD PTR ENPRO+2,AX AX,WORD PTR PRODUCT

WORD PTR ENPRO,AX //比例项计算完成,结果存在 AX,KP //计算微分项,首先计算KP乘以KD MUL1,AX AX,KD MUL2,AX

SHIFTTIME1,4 MULTIPLICATION

AX,WORD PTR PRODUCT //假定KP和KD的乘积不超 MUL1,BX //乘积再和误差增量做乘积 MUL2,AX

SHIFTTIME1,4 MULTIPLICATION

AX,WORD PTR PRODUCT+2 WORD PTR UD+2,AX

AX,WORD PTR PRODUCT

WORD PTR UD,AX //微分第二项计算完成,结果暂

时保存在UD双字中

// 此时的UD只在第二个周期时有数值,其余周期为0 CLC //与第一项UD0相加 MOV AX,WORD PTR UD

ADD AX,WORD PTR UD0 //低字部分相加

MOV WORD PTR UD,AX //存放在暂存值WORD PTR UD中

MOV AX,WORD PTR UD+2 //高字部分相加 ADC AX,WORD PTR UD0+2

MOV WORD PTR UD+2,AX //暂存在双字UD中,至此,微分的被乘数计算完成

//此时UD已经和UD0相加结合起来,从第二个周期开始的前若干个周期有数值

MOV AX,KD //计算括号外的乘数值 MOV MUL1,AX MOV AX,TC MOV MUL2,AX

MOV SHIFTTIME1,4 CALL MULTIPLICATION

MOV AX,WORD PTR PRODUCT //KD和TC的乘积存放在AX中

ADD AX,TD //乘积加上TD作为分母 MOV DIV2,AX // MOV AX,TD

MOV DIV1,AX //TD作为分子 MOV SHIFTTIME2,4 CALL DIVISION

MOV AX,QUOTIENT //商作为计算微分项的乘数 MOV MUL2,AX

MOV AX,WORD PTR UD //UD中的暂存值作为被乘数 MOV MUL1,AX

MOV SHIFTTIME1,4 CALL MULTIPLICATION

MOV AX,WORD PTR PRODUCT+2

MOV WORD PTR UD1+2,AX //微分项前项计算完成,存放在UD1双字中

MOV AX,WORD PTR PRODUCT MOV WORD PTR UD1,AX CLC

SUB AX,WORD PTR UD0 MOV WORD PTR ENDIFF,AX MOV AX,WORD PTR UD1+2 SBB AX,WORD PTR UD0+2

MOV WORD PTR ENDIFF+2,AX //至此微分项计算完成

MOV AX,KP

MOV MUL1,AX //开始计算积分项 MOV AX,TC MOV MUL2,AX

MOV SHIFTTIME1,4 CALL MULTIPLICATION

MOV AX,WORD PTR PRODUCT MOV DIV1,AX MOV AX,TI MOV MOV CALL MOV MOV MOV MOV MOV CALL MOV MOV MOV MOV CLC MOV 果对UN的累加

ADD MOV ADC CLC

ADD ADC CLC

MOV CMP 项

JZ MOV MOV MOV CMP 超过积分分离值

JBE JMP INTSEP1: ADD DIV2,AX

SHIFTTIME2,4 DIVISION

AX,QUOTIENT

MUL2,AX //作为乘数 AX,EN2 MUL1,AX

SHIFTTIME1,4 MULTIPLICATION

AX,WORD PTR PRODUCT+2 WORD PTR ENINT+2,AX AX,WORD PTR PRODUCT

WORD PTR ENINT,AX //积分项计算完成 //把三项相加

AX,WORD PTR ENSUM //对ENSUM累加,相同于结 AX,WORD PTR ENPRO BX,WORD PTR ENSUM+2

BX,WORD PTR ENPRO+2 //比例项加入 AX,WORD PTR ENDIFF

BX,WORD PTR ENDIFF+2 //微分项加入 CH,INTSEP

CH,0 //为0,说明没有启用积分分离,则需要加入积分INTSEP1 CX,EN2

ABSNUM,CX //对误差求绝对值 CX,ABSVAL

CX,INTSEPVAL //否则,开启积分分离,判断是否INTSEP1 //分离值大于等于误差时,需要PID控制 INTSEP2 //分离值小于误差时,则只用PD控制 AX,WORD PTR ENINT


汇编语言实现PID运算(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国梦(900字)作文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: