小型直流电机闭环调速系统PID控制器设计 CSU.docx
《小型直流电机闭环调速系统PID控制器设计 CSU.docx》由会员分享,可在线阅读,更多相关《小型直流电机闭环调速系统PID控制器设计 CSU.docx(31页珍藏版)》请在冰点文库上搜索。
![小型直流电机闭环调速系统PID控制器设计 CSU.docx](https://file1.bingdoc.com/fileroot1/2023-5/10/a51e65f5-9a3d-4c37-820e-6846e6905e3f/a51e65f5-9a3d-4c37-820e-6846e6905e3f1.gif)
小型直流电机闭环调速系统PID控制器设计CSU
微机原理课程设计报告
小型直流电机闭环调速系统PID控制设计(限2-3人)
设计题目:
__________________
学院:
__________________
专业班级:
姓名:
学号:
指导老师:
一、实验设计要求--------------------------------------------------------------------2
二、控制系统总体设计方案------------------------------------3
三、系统框图--------------------------------------------------------------------------4
四、程序流程图--------------------------------------------4-5
五、重要单元的介绍----------------------------------------5-9
六、硬件连接图-------------------------------------------9-10
七、系统连接图---------------------------------------------11
八、调试及结果------------------------------------------11-12
九、程序代码----------------------------------------------------------------------13-31
十、心得体会--------------------------------------------------------------------------32
十一、参考文献-----------------------------------------------------------------------33
一、设计要求:
1、设计基于80x86微机接口控制电路;
2、分别用C语言和汇编语言编程完成硬件接口功能设计;
3、程序功能要求:
电机速度由按键分段给定或电位器连续给定,计算机屏幕和数码管同步跟踪显示当前给定速度和电机实际运行速度,实现PID参数在线显示和修改。
二、控制系统总体设计方案
本设计是利用PC微机一台、TD-PIT实验系统一套实现对直流电机转速调节的应用。
编写程序,用ADC0809完成模拟信号到数字信号的转换。
输入模拟信号有A/D转换单元可调电位器提供的0~5V,将其转换后的数字信号读入累加器,做为控制电机的给定转速。
用8255的B口作为直流电机的控制信号输出口,通过对电机转速反馈量的运算,调节控制信号,达到控制电机匀速转动的的作用。
并将累加器中给定的转速和当前测量转速显示在屏幕上。
再通过LED灯显示出转速的大小变化。
整个程序设计过程分为基本功能实现阶段,检测程序阶段,功能扩展和功能验证及程序补充四个实验阶段。
基本功能实验阶段,在“轻松编程”软件中完成,主要完成各个子程序的调试;在检测程序阶段,在“轻松编程”软件中通过编译和链接,并反复检查没有逻辑错误;调试结果正确以后在进行相应的连接,将各个子模块联系起来功能扩展及程序的补充,在实验室里完成,使用唐都硬件实验箱,用TDPIT来编程实现;功能验证阶段,在实验室里完成。
由于程序中要用到中断,但是在windows下不能使用中断,所以必须在dos环境下才能进行程序的调试。
三、系统框图
四、程序流程图
主程序流程图
中断服务子程序流程图
五、重要单元的介绍
5.18255工作原理:
本设计利用8255的A口作为输出口,控制8个单色LED灯,来实现电机转速的大小调节。
并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息,CPU和接口之间的数据传递总是并行的,即可以同时进行传递8位,16位,32位等。
8255可编程外围接口芯片是具有A、B、C三个并行接口,+5V单电源供电,能在以下三种方式下工作:
方式0—基本输入/出方式、方式1—选通输入/出方式、方式2—双向选通工作方式。
其控制字、内部结构图和引脚图见图1-1-1、图1-1-2.
图1-1-18255控制字
图1-1-28255内部结构图和引脚图
5.2转速调节原理:
PWM的占空比决定输出到直流电机的平均电压.
PWM不是调节电流的.PWM的意思是脉宽调节,也就是调节方波高电平和低电平的时间比,一个20%占空比波形,会有20%的高电平时间和80%的低电平时间,而一个60%占空比的波形则具有60%的高电平时间和40%的低电平时间,占空比越大,高电平时间越长,则输出的脉冲幅度越高,即电压越高.如果占空比为0%,那么高电平时间为0,则没有电压输出.如果占空比为100%,那么输出全部电压.
所以通过调节占空比,可以实现调节输出电压的目的,而且输出电压可以无级连续调节.
在使用PWM控制的直流无刷电动机中,PWM控制有两种方式:
(1)使用PWM信号,控制三极管的导通时间,导通的时间越长,那么做功的时间越长,电机的转速就越高
(2)使用PWM控制信号控制三极管导通时间,改变控制电压高低来实现
直流电机单元由DC12V、1.1W的直流电机,小磁钢,霍尔元件及输出电路构成。
PWM示意图如图1-1-3所示。
通过调节T1的脉冲宽度,改变T1的占空比,从而改变输出,达到改变直流电机转速的目的
图1-1-3PWM示意图
利用8255的PB0产生脉冲信号作为控制量,经驱动电路驱动电机运转。
霍尔测速元件输出的脉冲信号记录电机转速构成反馈量。
在参数给定的情况下,经PID运算,电机可在控制量的作用下,按PC机累加器给定的转速运转。
通过PC的0号通道,设置为输出1ms方波,作为采样时钟,PB0产生PWM脉冲计时及转速累加,系统总线上INTR中断用于测量电机转速。
5.3A\D转换原理
图1-1-4ADC0809外部管脚图
本设计用ADC0809完成模拟信号到数字信号的转换。
输入模拟信号有A/D转换单元可调电位器提供的0~5V,将其转换后的数字信号读入累加器,做为控制电机的给定转速。
_
5.4LED灯的工作原理:
LED灯显示器有8个单色发光二极管构成,在共阳极接法中,各二极管的阳极被连在一起,使用的时候要将它与+5V项链,而把各段的阴极连到器件的相应引脚上。
当某的LED灯的引脚为低电平的时候,该灯工作。
图1-1-5LED灯管脚图
通过8255的A口信号作为输入信号,控制各灯的工作状态。
来显示出此时电机转速的大小变化
六、硬件连接图
6.1单元接线图:
图1-1-5A\D转换接线图
ADC转换单元中,D0-D7分别与系统总线的XD0-XD7对应相连,WRRD、CLK分别与系统总线XIOW、XIOR、CLK相连,片选引脚与系统IOY0相连,A、B、C接地,IN0接+5V直流电压源,
1-1-6所示。
图1-1-6直流电机闭环接线图
直流电机闭环接线中,8255芯片的A口作为输出信号与LED灯项连,即PA0-PA7与系统总线的XD0-XD7相连,同时与ADC0809的D0-D7相连;B口的PB0作为直流电机控制信号输出口,经驱动电路A口,与直流电机相连驱动电机运转;片选信号线接系统的IOY1,读写信号线分别对应系统的XIO、RXIOW相连,其中,系统的中断INTR引脚用于测量电机转速与直流电机的HR引脚相连。
七、系统连线图
八、调试及结果
8.1调试步骤:
(1)确认从PC机引出的两根扁平电缆已经连接在平台上。
(2)首先运行CHECK程序,查看I/O空间始地址。
(3)利用查出的地址编写程序,然后编译连接。
(4)参照接线图连接电路。
(5)运行程序,调节电位器的大小,观察电机的运行情况以及显示在屏幕上的结果和LED灯的变化。
9.2结果分析:
A/D实现模拟信号转换为数字信号,通过电位器调节输入电压(0~5V),改变输出的数字信号,进而改变8255的给定信号(给定转速),即通过改变PB0通道输出方波的占空比,实现PWM调速,改变脉冲的宽度。
若占空比越大,高电平时间越长,则输出的脉冲幅度越高,即电压越高.根据直流电动机的机械特性,电机转速与电压呈正比变化。
基本功能实验阶段,在“轻松编程”软件中完成,主要完成各个子程序的调试;在检测程序阶段,在“轻松编程”软件中通过编译和链接,并反复检查没有逻辑错误;调试结果正确以后在进行相应的连接,将各个子模块联系起来,由于自己不具备硬件资源,所以调试的时候只能检查程序本身的错误,经过调试能显示各个子程序的功能,同时嵌套有延时子程序,方便程序的调用,而端口地址的选择与确定,只能在实验室里完成,功能扩展及程序的补充,在实验室里完成,使用唐都硬件实验箱,用TDPIT来编程实现,实验的过程中,注意端口地址,要与硬件实验箱上的匹配;功能验证阶段,实验发现已经编好的程序仍存在问题,其中菜单显示和A/D转换是好的,然而电机不转,LED灯也不能正确的显示电机的转速(即相应的速度对应的相应的等不能正常显示)针对原来的程序及老师给的要求进行修改,并添加了一个判断是否有按键输入的子程序通过调整不同的速度后来实现任意状态下的按键停止。
九、程序代码
***************根据CHECK配置信息修改下列符号值*******************
INTR_IVADDEQU01CCH;INTR对应的中断矢量地址
INTR_OCW1EQU0A1H;INTR对应PC机内部8259的OCW1地址
INTR_OCW2EQU0A0H;INTR对应PC机内部8259的OCW2地址
INTR_IMEQU0F7H;INTR对应的中断屏蔽字
PCI_INTCSREQU0EC38H;PCI卡中断控制寄存器地址
IOY0EQU0C400H;片选IOY0对应的端口始地址
IOY1EQU0C440H
IOY2EQU0C480H
IOY3EQU0C4C0H
;*****************************************************************
MY8255_AEQUIOY0+00H*4;8255的A口地址
MY8255_BEQUIOY0+01H*4;8255的B口地址
MY8255_CEQUIOY0+02H*4;8255的C口地址
MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址
PC8254_COUNT0EQU40H;PC机内8254定时器0端口地址
PC8254_MODEEQU43H;PC机内8254控制寄存器端口地址
AD0809EQUIOY1+00H
STACK1SEGMENTSTACK
DW64DUP(?
)
TOPLABELWORD
STACK1ENDS
DATASEGMENT
TABLE1DB'AssumedFanSpeed:
(/s)','$';字符串变量
TABLE2DB'CurrentFanSpeed:
(/s)','$';字符串变量
ENTDB'','$';换行,回车
CS_BAKDW?
;保存INTR原中断处理程序入口段地址的变量
IP_BAKDW?
;保存INTR原中断处理程序入口偏移地址的变量
IM_BAKDB?
;保存INTR原中断屏蔽字的变量
CS_BAK1DW?
;保存定时器0中断处理程序入口段地址的变量
IP_BAK1DW?
;保存定时器0中断处理程序入口偏移地址的变量
IM_BAK1DB?
;保存定时器0中断屏蔽字的变量
DTABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H;键值表,0~F对应的7段数码管的
TSDB14H;采样周期
SPECDW?
;转速给定值
IBANDDW0060H;积分分离值
KPPDW1060H;比例系数
KIIDW0010H;积分系数
KDDDW0020H;微分系数
YKDW?
CKDB?
VADDDW?
ZVDB?
ZVVDB?
TCDB?
FPWMDB?
CK_1DB?
EK_1DW?
AEK_1DW?
BEKDW?
AAAADB?
VAADB?
BBBDB?
VBBDB?
MARKDB?
R0DW?
R1DW?
R2DW?
R3DW?
R4DW?
R5DW?
R6DW?
R7DB?
R8DW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVSI,3000H;建立缓冲区,存放要显示的键值
MOVAL,00H;先初始化键值为0
MOV[SI],AL
MOV[SI+1],AL
MOV[SI+2],AL
MOV[SI+3],AL
MOVDI,3001H
;MOVDX,OFFSETTABLE1;显示字符串1
;MOVAH,09H
;INT21H
;MOVAX,SPEC;显示给定值
;CALLDECSHOW
;MOVDX,OFFSETENT;回车,换行
;MOVAH,09H
;INT21H
;MOVDX,OFFSETTABLE2;显示字符串2
;MOVAH,09H
;INT21H
CLI
MOVAX,0000H
MOVES,AX
MOVDI,0020H
MOVAX,ES:
[DI]
MOVIP_BAK1,AX;保存定时器0中断处理程序入口偏移地址
MOVAX,OFFSETTIMERISR
MOVES:
[DI],AX;设置实验定时中断处理程序入口偏移地址
ADDDI,2
MOVAX,ES:
[DI]
MOVCS_BAK1,AX;保存定时器0中断处理程序入口段地址
MOVAX,SEGTIMERISR
MOVES:
[DI],AX;设置实验定时中断处理程序入口段地址
INAL,21H
MOVIM_BAK1,AL;保存INTR原中断屏蔽字
ANDAL,0F7H
OUT21H,AL;打开定时器0中断屏蔽位
MOVDX,PCI_INTCSR;初始化PCI卡中断控制寄存器
MOVAX,1F00H;向PCI_INTCSR中写入003F1F00H
OUTDX,AX
ADDDX,2
MOVAX,003FH
OUTDX,AX
MOVDI,INTR_IVADD
MOVAX,ES:
[DI]
MOVIP_BAK,AX;保存INTR原中断处理程序入口偏移地址
MOVAX,OFFSETMYISR
MOVES:
[DI],AX;设置当前中断处理程序入口偏移地址
ADDDI,2
MOVAX,ES:
[DI]
MOVCS_BAK,AX;保存INTR原中断处理程序入口段地址
MOVAX,SEGMYISR
MOVES:
[DI],AX;设置当前中断处理程序入口段地址
MOVDX,INTR_OCW1
INAL,DX
MOVIM_BAK,AL;保存INTR原中断屏蔽字
ANDAL,INTR_IM
OUTDX,AL;打开INTR的中断屏蔽位
MOVAL,00H
MOVDX,AD0809;启动A/D转换
OUTDX,AL
MOVVADD,0000H;变量的初始化
MOVZV,00H
MOVZVV,00H
MOVCK,00H
MOVYK,0000H
MOVCK_1,00H
MOVEK_1,0000H
MOVAEK_1,0000H
MOVBEK,0000H
MOVBBB,00H
MOVVBB,00H
MOVR0,0000H
MOVR1,0000H
MOVR2,0000H
MOVR3,0000H
MOVR4,0000H
MOVR5,0000H
MOVR6,0000H
MOVR7,00H
MOVR8,0000H
MOVMARK,00H
MOVFPWM,01H
MOVAAAA,7FH
MOVVAA,7FH
MOVTC,00H
MOVAL,80H;初始化8255
MOVDX,MY8255_MODE
OUTDX,AL
MOVAL,00H
MOVDX,MY8255_B
OUTDX,AL
MOVDX,PC8254_MODE;初始化PC机定时器0,定时1ms
MOVAL,36H
OUTDX,AL
MOVDX,PC8254_COUNT0
MOVAL,8FH
OUTDX,AL
MOVAL,04H
OUTDX,AL
STI
M1:
MOVAL,TS;判断采样周期到否?
SUBAL,TC;
JNCM1;没到则继续等待
;MOVDX,OFFSETTABLE1;显示字符串1
;MOVAH,09H
;INT21H
MOVAL,00H
MOVDX,AD0809;启动A/D转换
OUTDX,AL
CALLDALLY
MOVDX,AD0809;读出转换结果
INAL,DX
MOVCL,00H
CMPAL,CL
JSB2
MOVCL,3ch
CMPCL,AL
JSB2
JMPB3
B1:
MOVAL,00H
JMPB3
B2:
MOVAL,3cH
B3:
MOVDI,OFFSETSPEC
MOV[DI],AL
MOVAX,[DI]
CALLDECSHOW
CALLSHOW1
MOVDX,OFFSETENT;回车,换行
MOVAH,09H
INT21H
;MOVDX,OFFSETTABLE2;显示字符串2
;MOVAH,09H
;INT21H
MOVTC,00H;采样周期到,将采样周期变量清0
MOVAL,ZVV
MOVAH,00H
MOVYK,AX;得到反馈量YK
CALLPID;调用PID子程序,得到控制量CK
MOVAL,CK;把控制量转化成PWM输出
SUBAL,80H
JCIS0
MOVAAAA,AL
JMPCOU
IS0:
MOVAL,10H;电机的启动值不能低于10H
MOVAAAA,AL
COU:
MOVAL,7FH
SUBAL,AAAA
MOVBBB,AL
MOVAX,YK;将反馈值YK送到屏幕显示
CALLDECSHOW
MOVDL,0DH;回车
MOVAH,02H
INT21H
MOVAH,1;判断是否有按键按下
INT16H
JZM1;无按键则跳回继续等待,有则退出
EXIT:
CLI
MOVAL,00H;退出时停止电机运转
MOVDX,MY8255_B
OUTDX,AL
MOVDX,PC8254_MODE;恢复PC机定时器0状态
MOVAL,36H
OUTDX,AL
MOVDX,PC8254_COUNT0
MOVAL,00H
OUTDX,AL
MOVAL,00H
OUTDX,AL
MOVDX,PCI_INTCSR;恢复PCI卡中断控制寄存器
MOVAX,0000H
OUTDX,AX
MOVAX,0000H;恢复INTR原中断矢量
MOVES,AX
MOVDI,INTR_IVADD
MOVAX,IP_BAK;恢复INTR原中断处理程序入口偏移地址
MOVES:
[DI],AX
ADDDI,2
MOVAX,CS_BAK;恢复INTR原中断处理程序入口段地址
MOVES:
[DI],AX
MOVDX,INTR_OCW1;恢复INTR原中断屏蔽寄存器的屏蔽字
MOVAL,IM_BAK
OUTDX,AL
MOVDI,0020H
MOVAX,IP_BAK1;恢复定时器0中断处理程序入口偏移地址
MOVES:
[DI],AX
ADDDI,2
MOVAX,CS_BAK1;恢复定时器0中断处理程序入口段地址
MOVES:
[DI],AX
MOVAL,IM_BAK1
OUT21H,AL;恢复屏蔽字
STI
MOVAX,4C00H
INT21H
MYISRPROCNEAR;系统总线INTR中断处理程序
PUSHAX
PUSHCX
PUSHDX
MOVAX,DATA
MOVDS,AX
MOVAL,MARK
CMPAL,01H
JZIN1
MOVMARK,01H
JMPIN2
IN1:
MOVMARK,00H;计算转速
VV:
MOVDX,0000H
MOVAX,03E8H
MOVCX,VADD
CMPCX,0000H
JZMM1
DIVCX
MM:
MOVZV,AL
MOVVADD,0000H
MM1:
MOVAL,ZV
MOVZVV,AL
IN2:
MOVDX,PCI_INTCSR;清PCI卡控制寄存器标志位
SUBDX,19H
INAL,DX
MOVDX,PCI_INTCSR
ADDDX,2
MOVAX,003FH
OUTDX,AX
MOVDX,INTR_OCW2;向PC机内部8259发送中断结束命令
MOVAL,20H
OUTDX,AL
MOVAL,20H
OUT20H,AL
POPDX
POPCX
POPAX
IRET
MYISRENDP
TIMERISRPROCNEAR;PC机定时器0中断处理程序
PUSHAX
PUSHCX
PUSHDX
MOVAX,DATA
MOVDS,AX
INCTC;采样周期变量加1
CALLKJ
CLC
CMPMARK,01H
JCTT1
INCVADD
CMPVADD,0700H;转速值溢出,赋极值
JCTT1
MOVVADD,0700H
MOVMARK,00H
TT1: