资源描述
微机原理与汇编语言程序设计——直流电机转速控制
实验课题: 直流电机调速控制
实验内容:
本实验完成的是一个实现对直流电机转速调节的应用。
编写实验程序,用ADC0809完成模拟信号到数字信号的转换。输入模拟信号有A/D转换单元可调电位器提供的0~5V,将其转换后的数字信号读入累加器,做为控制电机的给定转速。用8255的B口作为直流电机的控制信号输出口,通过对电机转速反馈量的运算,调节控制信号,达到控制电机匀速转动的的作用。并将累加器中给定的转速和当前测量转速显示在屏幕上。再通过LED灯显示出转速的大小变化。
实验目的:
(1) 学习掌握模/数信号转换的基本原理。
(2) 掌握的ADC0809、8255芯片的使用方法。
(3) 学习PC系统中扩展简单I/O接口的方法。
(4) 了解实现直流电机转速调节的基本方法。
实验要求:
利用微机接口实验系统的硬件资源,运用汇编语言设计实现直流电机的调速控制功能。
基本功能要求:1、利用A/D转换方式实现模拟量给定信号的采样;2、实现PWM方式直流电机速度调节;3、LED灯显示当前直流电机速度状态。
实验设备:
(1) 硬件要求: PC微机一台、TD-PIT实验系统一套
(2) 软件要求:唐都编程软件,tdpit编程软件,“轻松编程”软件
实验原理:
各芯片的功能简介:
(1)8255的基本输出接口电路:
并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息,CPU和接口之间的数据传递总是并行的,即可以同时进行传递8位,16位,32位等。8255可编程外围接口芯片是具有A、B、C三个并行接口,+5V单电源供电,能在以下三种方式下工作:方式0—基本输入/出方式、方式1—选通输入/出方式、方式2—双向选通工作方式。
8255的内部结构图和引脚图如下:
本实验利用8255的A口作为输出口,控制8个单色LED灯,来实现电机转速的大小显示。
(2)转速调节原理:
* PWM的占空比决定输出到直流电机的平均电压.
PWM不是调节电流的.PWM的意思是脉宽调节,也就是调节方波高电平和低电平的时间比,一个20%占空比波形,会有20%的高电平时间和80%的低电平时间,而一个60%占空比的波形则具有60%的高电平时间和40%的低电平时间,占空比越大,高电平时间越长,则输出的脉冲幅度越高,即电压越高.如果占空比为0%,那么高电平时间为0,则没有电压输出.如果占空比为100%,那么输出全部电压.
所以通过调节占空比,可以实现调节输出电压的目的,而且输出电压可以无级连续调节.
在使用PWM控制的直流无刷电动机中,PWM控制有两种方式:
1.使用PWM信号,控制三极管的导通时间,导通的时间越长,那么做功的时间越长,电机的转速就越高
2.使用PWM控制信号控制三极管导通时间,改变控制电压高低来实现
** 利用实验平台上8255的PB0产生脉冲信号作为控制量,经驱动电路驱动电机运转。霍尔测速元件输出的脉冲信号记录电机转速构成反馈量。在参数给定的情况下,经PID运算,电机可在控制量的作用下,按PC机累加器给定的转速运转。实验通过PC的0号通道,设置为输出1ms方波,作为采样时钟,PB0产生PWM脉冲计时及转速累加,系统总线上INTR中断用于测量电机转速。
(3)A/D转换原理:
本实验用ADC0809完成模拟信号到数字信号的转换。输入模拟信号有A/D转换单元可调电位器提供的0~5V,将其转换后的数字信号读入累加器,做为控制电机的给定转速。
(5) LED灯的工作原理:
LED灯显示器有8个单色发光二极管构成,在共阳极接法中,各二极管的阳极被连在一起,使用的时候要将它与+5V项链,而把各段的阴极连到器件的相应引脚上。当某的LED灯的引脚为低电平的时候,该灯工作。
本实验上通过8255的A口信号作为输入信号,控制各灯的工作状态。来显示出此时电机转速的大小变化。
(6) 实现两位十进制数的显示:
在计算机中,对数字的输入和输出是用二进制进行的,而在计算机内部十进制数要转换为二进制来表示,要实现两位十进制数的显示,必须将他们转换为目前最普遍使用的字符编码ASCII码。
本实验中通过作除法。即拆分法。如两位十进制AB转换为A*10+B的形式,再通过A+30H与B+30H来转换为ASCII码,若溢出,加7运算。
DECSHOW PROC NEAR ;完成两位十进制数显示子程序
MOV DX,0
MOV BX,10 ;计算AX/10
DIV BX
ADD AL,30H ;商+30H,即为十位数ASCII码
MOV AH,0EH
INT 10H
ADD DL,30H ;余+30H,即为个位数ASCII码
MOV AH,2
INT 21H
RET
DECSHOW ENDP
实验接线图:
PA0~PA7
D0~D7
PA0~PA7
转速调节程序设计框图:
B口转速调节与测量程序
(a)转速调节主程序
主程序流程图:
说明
B口转速控制程序转上页
将转换结果以16进制形式显示在屏幕上
设置8255工作方式
将AD送的结果装入8255
初始化8255控制寄存器
将结果送到8255A口输出,执行B口的调速程序
是否有键按下
返回DOS
结束
启用A/D转换
在屏幕上显示给定的转速
读取转换结果
定义寄存器
清屏
屏幕显示菜单
开 始
程序清单:
;***************根据CHECK配置信息修改下列符号值*******************
INTR_IVADD EQU 0038H ;INTR对应的中断矢量地址
INTR_OCW1 EQU 21H ;INTR对应PC机内部8259的OCW1地址
INTR_OCW2 EQU 20H ;INTR对应PC机内部8259的OCW2地址
INTR_IM EQU 0BFH ;INTR对应的中断屏蔽字
PCI_INTCSR EQU 0CC38H ;PCI卡中断控制寄存器地址
IOY0 EQU 0C400H ;片选IOY0对应的端口始地址
IOY1 EQU 0C440H ;片选IOY0对应的端口始地址
;*****************************************************************
MY8255_A EQU IOY0+00H*4 ;8255的A口地址
MY8255_B EQU IOY0+01H*4 ;8255的B口地址
MY8255_C EQU IOY0+02H*4 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 ;8255的控制寄存器地址
AD0809 EQU IOY1+00H ;AD0809的端口地址
STACK1 SEGMENT STACK
DW 64 DUP(?)
TOP LABEL WORD
STACK1 ENDS
DATA SEGMENT
TABLE1 DB 'Assumed Fan Speed:(/s)',0AH,0DH,'$' ;字符串变量
TABLE2 DB 'Current Fan Speed:(/s)',0AH,0DH,'$' ;字符串变量
ENT DB 0AH,0DH,'$' ;换行,回车
CS_BAK DW ? ;保存INTR原中断处理程序入口段地址的变量
IP_BAK DW ? ;保存INTR原中断处理程序入口偏移地址的变量
IM_BAK DB ? ;保存INTR原中断屏蔽字的变量
CS_BAK1 DW ? ;保存定时器0中断处理程序入口段地址的变量
IP_BAK1 DW ? ;保存定时器0中断处理程序入口偏移地址的变量
IM_BAK1 DB ? ;保存定时器0中断屏蔽字的变量
TS DB 14H ;采样周期
SPEC DW 55 ;转速给定值
IBAND DW 0060H ;积分分离值
KPP DW 1060H ;比例系数
KII DW 0010H ;积分系数
KDD DW 0020H ;微分系数
YK DW ?
CK DB ?
VADD DW ?
ZV DB ?
ZVV DB ?
TC DB ?
FPWM DB ?
CK_1 DB ?
EK_1 DW ?
AEK_1 DW ?
BEK DW ?
AAAA DB ?
VAA DB ?
BBB DB ?
VBB DB ?
MARK DB ?
R0 DW ?
R1 DW ?
R2 DW ?
R3 DW ?
R4 DW ?
R5 DW ?
R6 DW ?
R7 DB ?
R8 DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET TABLE1 ;显示字符串1
MOV AH,09H
INT 21H
MOV AX,SPEC ;显示给定值
CALL DECSHOW
MOV DX,OFFSET ENT ;回车,换行
MOV AH,09H
INT 21H
MOV DX,OFFSET TABLE2 ;显示字符串2
MOV AH,09H
INT 21H
CLI
MOV AX,0000H
MOV ES,AX
MOV DI,0020H
MOV AX,ES:[DI]
MOV IP_BAK1,AX ;保存定时器0中断处理程序入口偏移地址
MOV AX,OFFSET TIMERISR
MOV ES:[DI],AX ;设置实验定时中断处理程序入口偏移地址
ADD DI,2
MOV AX,ES:[DI]
MOV CS_BAK1,AX ;保存定时器0中断处理程序入口段地址
MOV AX,SEG TIMERISR
MOV ES:[DI],AX ;设置实验定时中断处理程序入口段地址
IN AL,21H
MOV IM_BAK1,AL ;保存INTR原中断屏蔽字
AND AL,0F7H
OUT 21H,AL ;打开定时器0中断屏蔽位
MOV DX,PCI_INTCSR ;初始化PCI卡中断控制寄存器
MOV AX,1F00H ;向PCI_INTCSR中写入003F1F00H
OUT DX,AX
ADD DX,2
MOV AX,003FH
OUT DX,AX
MOV DI,INTR_IVADD
MOV AX,ES:[DI]
MOV IP_BAK,AX ;保存INTR原中断处理程序入口偏移地址
MOV AX,OFFSET MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口偏移地址
ADD DI,2
MOV AX,ES:[DI]
MOV CS_BAK,AX ;保存INTR原中断处理程序入口段地址
MOV AX,SEG MYISR
MOV ES:[DI],AX ;设置当前中断处理程序入口段地址
MOV DX,INTR_OCW1
IN AL,DX
MOV IM_BAK,AL ;保存INTR原中断屏蔽字
AND AL,INTR_IM
OUT DX,AL ;打开INTR的中断屏蔽位
MOV VADD,0000H ;变量的初始化
MOV ZV,00H
MOV ZVV,00H
MOV CK,00H
MOV YK,0000H
MOV CK_1,00H
MOV EK_1,0000H
MOV AEK_1,0000H
MOV BEK,0000H
MOV BBB,00H
MOV VBB,00H
MOV R0,0000H
MOV R1,0000H
MOV R2,0000H
MOV R3,0000H
MOV R4,0000H
MOV R5,0000H
MOV R6,0000H
MOV R7,00H
MOV R8,0000H
MOV MARK,00H
MOV FPWM,01H
MOV AAAA,7FH
MOV VAA,7FH
MOV TC,00H
MOV AL,80H ;初始化8255
MOV DX,MY8255_MODE
OUT DX,AL
MOV AL,00H
MOV DX,MY8255_B
OUT DX,AL
MOV DX,MY8255_A
OUT DX,AL
MOV DX,PC8254_MODE ;初始化PC机定时器0,定时1ms
MOV AL,36H
OUT DX,AL
MOV DX,PC8254_COUNT0
MOV AL,8FH
OUT DX,AL
MOV AL,04H
OUT DX,AL
STI
M1: MOV AL,TS ;判断采样周期到否?
SUB AL,TC
JNC M1 ;没到则继续等待
MOV TC,00H ;采样周期到,将采样周期变量清0
MOV AL,ZVV
MOV AH,00H
MOV YK,AX ;得到反馈量YK
LOOP1: MOV DX,AD0809 ;启动A/D转换
OUT DX,AL
CALL DALLY
MOV DX,AD0809 ;读出转换结果
IN AL,DX
MOV DX,MY8255_A ;将结果显示于LED
OUT DX,AL
MOV BL,AL
MOV BH,0
CALL PID ;调用PID子程序,得到控制量CK
MOV AL,CK ;把控制量转化成PWM输出
SUB AL,80H
JC IS0
MOV AAAA,AL
JMP COU
IS0: MOV AL,10H ;电机的启动值不能低于10H
MOV AAAA,AL
COU: MOV AL,7FH
SUB AL,AAAA
MOV BBB,AL
MOV AX,YK ;将反馈值YK送到屏幕显示
CALL DECSHOW
MOV DL,0DH ;回车
MOV AH,02H
INT 21H
MOV AH,1 ;判断是否有按键按下
INT 16H
JZ M1 ;无按键则跳回继续等待,有则退出
EXIT: CLI
MOV AL,00H ;退出时停止电机运转
MOV DX,MY8255_B
OUT DX,AL
MOV DX,PC8254_MODE ;恢复PC机定时器0状态
MOV AL,36H
OUT DX,AL
MOV DX,PC8254_COUNT0
MOV AL,00H
OUT DX,AL
MOV AL,00H
OUT DX,AL
MOV DX,PCI_INTCSR ;恢复PCI卡中断控制寄存器
MOV AX,0000H
OUT DX,AX
MOV AX,0000H ;恢复INTR原中断矢量
MOV ES,AX
MOV DI,INTR_IVADD
MOV AX,IP_BAK ;恢复INTR原中断处理程序入口偏移地址
MOV ES:[DI],AX
ADD DI,2
MOV AX,CS_BAK ;恢复INTR原中断处理程序入口段地址
MOV ES:[DI],AX
MOV DX,INTR_OCW1 ;恢复INTR原中断屏蔽寄存器的屏蔽字
MOV AL,IM_BAK
OUT DX,AL
MOV DI,0020H
MOV AX,IP_BAK1 ;恢复定时器0中断处理程序入口偏移地址
MOV ES:[DI],AX
ADD DI,2
MOV AX,CS_BAK1 ;恢复定时器0中断处理程序入口段地址
MOV ES:[DI],AX
MOV AL,IM_BAK1
OUT 21H,AL ;恢复屏蔽字
STI
MOV AX,4C00H
INT 21H
MYISR PROC NEAR ;系统总线INTR中断处理程序
PUSH AX
PUSH CX
PUSH DX
MOV AX,DATA
MOV DS,AX
MOV AL,MARK
CMP AL,01H
JZ IN1
MOV MARK,01H
JMP IN2
IN1: MOV MARK,00H ;计算转速
VV: MOV DX,0000H
MOV AX,03E8H
MOV CX,VADD
CMP CX,0000H
JZ MM1
DIV CX
MM: MOV ZV,AL
MOV VADD,0000H
MM1: MOV AL,ZV
MOV ZVV,AL
IN2: MOV DX,PCI_INTCSR ;清PCI卡控制寄存器标志位
SUB DX,19H
IN AL,DX
MOV DX,PCI_INTCSR
ADD DX,2
MOV AX,003FH
OUT DX,AX
MOV DX,INTR_OCW2 ;向PC机内部8259发送中断结束命令
MOV AL,20H
OUT DX,AL
MOV AL,20H
OUT 20H,AL
POP DX
POP CX
POP AX
IRET
MYISR ENDP
TIMERISR PROC NEAR ;PC机定时器0中断处理程序
PUSH AX
PUSH CX
PUSH DX
MOV AX,DATA
MOV DS,AX
INC TC ;采样周期变量加1
CALL KJ
CLC
CMP MARK,01H
JC TT1
INC VADD
CMP VADD,0700H ;转速值溢出,赋极值
JC TT1
MOV VADD,0700H
MOV MARK,00H
TT1: MOV AL,20H ;中断结束,发EOI命令
OUT 20H,AL
POP DX
POP CX
POP AX
IRET
TIMERISR ENDP
KJ PROC NEAR ;PWM子程序
PUSH AX
CMP FPWM,01H ;PWM为1,产生PWM的高电平
JNZ TEST2
CMP VAA,00H
JNZ ANOT0
MOV FPWM,02H
MOV AL,BBB
CLC
RCR AL,01H
MOV VBB,AL
JMP TEST2
ANOT0: DEC VAA
MOV AL, 01H ;PB0=1 电机转动
MOV DX, MY8255_B
OUT DX,AL
TEST2: CMP FPWM,02H ;PWM为2,产生PWM的低电平
JNZ OUTT
CMP VBB,00H
JNZ BNOT0
MOV FPWM,01H
MOV AL,AAAA
CLC
RCR AL,01H
MOV VAA,AL
JMP OUTT
BNOT0: DEC VBB
MOV AL,00H ;PB0=0 电机停止
MOV DX,MY8255_B
OUT DX,AL
OUTT: POP AX
RET
KJ ENDP
PID: MOV AX,BX ;PID子程序
SUB AX,YK ;求偏差EK
MOV R0,AX
MOV R1,AX
SUB AX,EK_1
MOV R2,AX
SUB
展开阅读全文