实验课程 单片机综合实验
姓名 张鹏 学号 0704140228 专业及班级 通信02
实验地点 408 实验组号 1组 实验日期
实验项目 单片机控制电机实验(PWM)
实验目的 1了解直流电机PWM调速的原理
2 了解对象模块的工作原理 3 了解ADC0809工作原理 4 了解显示模块的工作原理 实验任务 (1) 基础实验(开环) (2) 扩展实验(闭环)
实验原理,实验步骤,实验仪器设备(名称,型号,功能,量程,在本次试验中的用途)
二 实验原理
(1) 单片机控制直流调速系统的工作原理概述
整个系统的工作原理:首先是人为给定电动机转速的电压信号,然后将这个电压信号通过A/D转换成数字信号后传送给单片机(8025)。单片机通过中断方式将接收到的数据先保存起来。然后再对此数据进行处理,接着启动ADC0809开始采样直流电动机的实际速度值,再通过PID控制算法,得到一个输出信号值,再通过DA转换器将这个数字信号转换成相应的模拟电压控制信号,经过PWM波形发生器来驱动直流发动机;并且不断循环,并且在这个循环往复的过程中,讲采集到的不断变化的速度值,通过LED数码管显示出直流电机的速度值。 整个系统设计包括了电位器控制部分,A/D转换部分,单片机控制部分,数码显示部分,电动机模块部分。
PWM调速原理及其实现方法
PWM是通过控制固定电压的直流电源开关频率,从而改变伏在两端电压,从而达到控制要求的一种电压调整方法。PWM可以应用在很多方面,如电机调速,温度控制,压力控制等。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内接通和断开的时间的长短。通过改变直流电机电枢上电压的占空比来改变平均电压的大小,从而控制电动机的转速。因此,PWM又被称为开关驱动装置。
当电机通电时,速度增加;电机断电时,速度逐渐减少。只要按一定规律,改变通、断电的时间,即可让电机转速得到控制
PWM信号的产生通常有两种方法:一种是软件的方法,另一种是硬件的方法
了解对象模块的工作原理
PWM模块内部结构图
在设计中首先要将给定的直流电动机转速的模拟电压转换成数字信号,同时还要对测速发电机进行采样并转化成数字信号,因此需要用A/D芯片。我们采用ADC0809芯片。ADC0809是8路8位逐次逼近式A/D,由多路模拟开关,通道地址缩存,译码器,8位A/D转换器及三态输出数据锁存器组成。在电动机上我们装上霍尔感应装置进行测速,并且将数据传给单片机进行测速处理,
(3) 电位器的工作原理
电位器是一种可调的电子元件。它是由一个电阻体和一个转动或滑动系统组成。当电阻体的两个固定触电之间外加一个电压时,通过转动或滑动系统改变触点在电阻体上的位置,在动触点与固定触点之间便可得到一个与动触点位置成一定关系的电压。 它大多是用作分压器,电位器是一个四端元件。
电位器基本上就是滑动变阻器,通过ADC0809采样0—5V的电压值就是由电位器来产生的。
(4) ADC0809的工作原理
A/D转换器大致有三类:一是双积分A/D转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近法A/D转换器,精度、速度、价格适中;三是并行A/D转换器,速度快,价格也昂贵。
实验用的ADC0809属第二类,是八位A/D转换器。每采集一次需100us。 ADC0809 START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号。实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,故启动A/D转换只需如下两条指令:
MOV DPTR,#PORT
MOVX @DPTR,A
A中为何内容并不重要,这是一次虚拟写。
在中断方式下,A/D转换结束后会自动产生EOC信号,将其与8031CPU板上的INT0相连接。在中断处理程序中,使用如下指令即可读取A/D转换的结果:
MOV DPTR,#PORT MOVX A,@DPTR
ADC0809与电位器相连电路图 (5) 8279显示模块工作原理实验
7段LED显示器由7个发光二极管组成,7个条形发光二极管排列成“日”字形,每个通过不同的发光管的组合可以显示数字0~9、A~F以及一些特殊的字样。 LED显示器可以分为两种类型。一种是7个发光二极管的阳极连在一起,称为共阳极LED显示器;另一种是7个发光二极管的阴极连在一起的,称为共阴极LED显示器。为了显示字符,必须给LED的a、b、c、d、e、f、g一个确定的电平,如对于共阴极LED,为了显示‘0',则要求a、b、c、d、e、f端为高电平,g端为低电平,用数据表示即为11111100。显然,将共阳极LED的段码按位取反即可得到共阳极LED的段码。
8279是一种可编程键盘/LED显示器接口器件,具有键盘、传感器以及选通三种输入方式和8位或16位LED显示器控制功能,实际的应用系统中采用8279芯片,不仅可以大大地节省CPU处理键盘或显示操作的时间,减轻CPU的负担,而且,显示稳定,编程简单。
8279显示控制部分主要由显示控制逻辑电路和16个字节的显示RAM以及显示寄存器组成。显示RAM用来存放显示数据;显示寄存器分为两组,OUTA3~0和OUTB3~0可以单独4位输出,也可以合成为8位(一个字节)输出,以字节输出时,OUTA3对应数据总线的D7, OUTB0对应数据总线的D0。8279工作时,显示寄存器不停地从显示RAM中读出显示数据,然后,从OUTA3~0和OUTB3~0输出,与输出的扫描信号(SL3~SL0)配合实现多位LED的循环显示。
8279最多可用来控制16位的LED显示,当显示位数超过8位时,均设定为16位字符显示。LED有两种显示方式:即左边输入和右边输入。左边输入是较简单的方式,显示RAM单元0对应显示器最左边的位;显示RAM单元7(或15)对应显示器的最右边的位。单片机写入单元的地址和显示的位之间的对应关系是固定的,单片机依次从0地址或某一个地址开始将段码数据写入显示缓冲区。
本次设计中要将霍尔传感器测得的转速的电压转换成用数字量的转速,并用LED数码管显示,因此需要一个四位的LED数码管来完成实验要求。
单片机控制系统的接口电路中的LED数码显示器使用的是共阴极接法。共阴极接法的原理:将所有发光二极管的阴极互相连接后接地,每个发光二级管的阳极通过电阻与输入端相连,当阳极属于为高电平时,段发光二极管就导通点亮,当阳极端输入为低电平时,段发光二极管就不点亮。设计中采用动态显示,单片机控制系统采用动态扫描显示。动态显示软件法将要显示的十六进制数或BCD码转化为相应字型码。
三 系统组成 (1) 结构框图
本次设计的任务是单片机控制的直流调速系统,该单片机对直流电动机的速度进行控制,同时对速度进行检测采样,并显示速度。控制系统设计总体结构框图如下:
电位器调速
直流电机 PWM驱动 A/D转换 D/A转换 A/D转换 单 片 机 速度显示 霍尔测速装置 PWM波形发生器 系统的总体设计以及连线图
四 软件设计
1 设计思路
为实现单片机对直流电机的控制,满足设计要求,系统的工作过程是靠软件来实现的。因此软件的设计和编写很重要。程序的编写采用汇编语言。
主程序的设计
主程序的内容一般包括:主程序的起始地址,中断服务程序的起始地址,设置堆栈指针,相关存储单元和元器件的初始化以及一些子程序的调用等。
主程序的初始化
所谓的初始化,就是对将要用到的MCS-51系列单片机的内部单元和扩展芯片进行初始化工作状态的设定。MCS-51系列单片机复位后,特殊功能寄存器IE,IP的内容为00H,所以应对IE,IP进行初始化编程,以开CPU总中断,允许某些中断源中断,并设置中断优先级等。
主程序流程图和TO中断流程图设计如下:
主程序如下
ORG 0000H
LJMP MAIN ;转主程序
ORG 0003H ;外部中断INT0的入口地址 LJMP INTA ;转外部中断INT0服务程序 ORG 00BH;T0 ;入口地址 LJMP T0-SEV;转T0溢出中断服务程序 ORG 0300H;
DATABUF EQU 5OH ;数据缓冲区的首地址
DISBUF1 EQO 60H ;给定速度显示缓冲区的首地址 DISBUF2 EQO 64H ;实际速度显示的缓冲区的首地址 SAMO-D1 EQU 0000H ;保存给定速度的首地址
SAMP-D2 EQU 0500H ;保存实际速度采样数据的首地址 MAIN: MOV SP , #70H ;设置堆栈指针
MOV TMOD, #01H ;定时器T0工作方式1 MOV TL0,#18H ;定时器赋初值,定时1ms MOV TH0 , #OFCH
MOV R0,#OFH ;软件计数器R0赋初值
SETB TR0 ;启动T0工作
SETB EX0 ;允许INT0中断 SETB EA ;开CPU中断 SJMP $ ;等待中断
T0-SEV: ;T0中断服务子程序 MOV TL0,#18H ;定时器重新赋值
MOV TH0,#OFCH
SETB ITO ;中断触发方式为边沿触发方式 SETB EA ;CPU开中断
SETB EXO ;允许外部中断0中断 INTA: PUSH ACC ;保护现场 PUSH DPH PUSH DPL
ACALL AD1 ;调用AD1给定速度采样子程序 ACALL FILTER ;调用中值滤波子程序 ACALL FA1
ACALL AD2 ;调用AD2实际速度采样子程序 ACALL FILTER ;调用中值滤波子程序 ACALL FA2
POP DPH ;恢复现场 POP DPL POP ACC RET1
ACALL PID ;调用PID控制算法子程序 ACALL DAC ;调用DAC转换程序 LCALL TRAST1 LCALL DBCD1
LCALL DIS1 ;调用速度显示子程序 MOV A,2AH ;实际速度值送A
LCALL TRAST1 ;调用代码转换子程序
LCALL DBCD2 ;将实际转速压缩BCD码转换成单独BCD码 LCALL DIS2 ;调用实际速度显示子程序 RETI ;中断返回
采样子程序
AD0809采样程序
DAC0809的地址可为7FF8H—7FFFH,具体该为哪一个地址涉及到转换通道的选择我们设定转速电压模拟量地址为7FF8H(INO),实际速度电压通道地址为7FF9H(IN1)
采样设计流程图如下
采样程序如下:
AD1: ;调用AD1给定速度采样子程序 MOV RO,#2CH ;采样值起始地址送R0 MOV R2,#03H ; 采样次数初值送R2 MOV DPTR ,#6FF8H JMP ADC1
AD2: MOV R0,#2CH ;采样值起始地址送R0 MOV R2,#03H ;采样次数初值送R2 MOV DPTR,#6FF9H
ADC1: MOVX @DPTR,A ;启动ADC0809工作
MOV R3,#20H
DLY DJNZ R3,DLY ;延时
HERE: JB P3.3,HERE ;等待A/D转换完成 MOVX A,@DPTR ;采样值送A MOV @R0,A ;存放采样值 INC RO
DJNZ R2,ADC1 ;若采样未完,则ADC1 RET ;若采样完,则返回
附录:
总 程 序
ORG 0000H
LJMP MAIN ;转主程序
ORG 0003H ;外部中断INT0的入口地址 LJMP INTA ;转外部中断INT0服务程序 ORG 00BH;T0 ;入口地址
LJMP T0-SEV ;转T0溢出中断服务程序 ORG 0300H
DATABUF EQU 5OH DISBUF1 EQO 60H DISBUF2 EQO 64H SAMO-D1 EQU 0000H SAMP-D2 EQU 0500H MAIN: MOV SP , #70H MOV TMOD, #01H MOV TL0,#18H MOV TH0 , #OFCH
MOV R0,#OFH SETB TR0 SETB EX0 SETB EA SJMP $ T0-SEV: MOV TL0,#18H MOV TH0,#OFCH SETB ITO SETB EA SETB EXO INTA: PUSH ACC PUSH DPH PUSH DPL
ACALL AD1 ACALL FILTER ACALL FA1
ACALL AD2 ACALL FILTER ACALL FA2
POP DPH POP DPL POP ACC RET1
;数据缓冲区的首地址
;给定速度显示缓冲区的首地址 ;实际速度显示的缓冲区的首地址 ;保存给定速度的首地址
;保存实际速度采样数据的首地址 ;设置堆栈指针
;定时器T0工作方式1 1ms ;软件计数器R0赋初值
;启动T0工作 ;允许INT0中断 ;开CPU中断 ;等待中断
;T0中断服务子程序 ;定时器重新赋值
;中断触发方式为边沿触发方式 ;CPU开中断
;允许外部中断0中断 ;保护现场 ;调用AD1给定速度采样子程序 ;调用中值滤波子程序 ;调用AD2实际速度采样子程序 ;调用中值滤波子程序 ;恢复现场 ;定时器赋初值,定时 ACALL PID ;调用PID控制算法子程序 ACALL DAC ;调用DAC转换程序 LCALL TRAST1 LCALL DBCD1
LCALL DIS1 ;调用速度显示子程序 MOV A,2AH ;实际速度值送A
LCALL TRAST1 ;调用代码转换子程序
LCALL DBCD2 ;将实际的转速压缩BCD码转换成单独的BCD码 LCALL DIS2 ;调用实际速度显示子程序 RETI AD1: MOV RO,#2CH MOV R2,#03H MOV DPTR ,#6FF8H
JMP ADC1
AD2: MOV R0,#2CH MOV R2,#03H MOV DPTR,#6FF9H
ADC1: MOVX @DPTR,A MOV R3,#20H
DLY DJNZ R3,DLY HERE: JB P3.3,HERE MOVX A,@DPTR MOV @R0,A INC RO
DJNZ R2,ADC1 RET
FILTER: MOV A,2CH CJNE A,2DH,CMP1 AJMP CMP2 CMP1: JNC CMP2 XCH A,2DH XCH A,2CH
CMP2:MOV A,2DH CJNE A,2EH,CMPP3 MOV 2AH,A RET CMP2:JC CMP4 MOV 2AH,A ERT ;返回
CMP4:MOV A,2EH CJNE A,2CH,CMP5 ;中断返回
;调用AD1给定速度采样子程序
;采样值起始地址送R0 ; 采样次数初值送R2 ;采样值起始地址送R0
;采样次数初值送R2 ;启动ADC0809工作 ;延时
;等待A/D转换完成
;采样值送A ;存放采样值 ;若采样未完,则ADC1 ;若采样完,则返回 ;中值滤波算法子程序 ;(2CH)送A
; (2CH)≠(2DH),则CMP1 ;否则转CMP2
;若(2CH)=(2DH),则CMP2 ;(2DH)送A
;若(2DH)≠(2EH),则CMP3
; 否则(2DH)送2AH ;返回
;若(2DH)<(2EH),则CMP4
;否则(2DH)送2AH ;(2EH)送A
;若(2EH)≠(2CH),CMP5
MOV 2AH,A ;否则(2EN)送2AH RET ; 返回
CMP5:JC CMP6 ;若(2EH)<(2CH)则CMP6 XCH A,2CH
CMP6:MOV 2AH ,A ;A送2AH RET
FA1:MOV DPTR,#SAMP-D1 MOVX @DPTR,A MOV 1AH,A INC DPTTR
FA2:MOV DPTR,#SAMP-D2
MOVX @DPTR,A ; 将采样值送到外部RAM中的0000H单元 INC DPTR RET
PID : ;数字PID控制算法子程序
MOV R5,1AH ;给定值Ug送R5R4 MOV R4,#00H MOV R3,2AH ;实际值送UI(K)R3R4 MOV R2,#0OH
ACALL CPL1 ;去UI(K)的补码
ACALL DSUM ;双字节加法,计算E(K) MOV 39H,R7 ; E(K)送39H和3A MOV 3AH,R6
MOV R5,35H ; 起始地址送4AH 送R0 MOV R4,36H
MOV R0,#4AH ;双字节带符号乘法,计算PI=KI*E(K) ACALL MULT1 ;E(K)送R4R5 MOV R5,39H MOV R4,31H MOV R3,3BH MOV R2,3CH
ACALL CPL1 ; 对E(K-1)求补 ACALL DSUM ;求[E(K)-E(K-1)] MOV R5,33H ;KP送R5R4 MOV R4,34H MOV R0,#46H ; 积起始地址46H送R0 ACALL MULT1 ;求得Pp
MOV R5,49H ;Pp的高16位送R5R4 MOV R4,48H
MOV R3,4DH ;PI送R3R2 MOV R2 ,4CH
ACALL DSUM ; 求得Pp+PI
MOV 4AH ,R7 ;存入4AH和4BH单元 MOV 4BH ,R6
MOV R5 ,39H ;E(K)送R5R4 MOV R4 ,3AH
MOV R3 ,3DH ;E(K-2)送R3R2 MOV R2 ,3EH
ACALL DSUM ;计算E(K)+E(K-2) MOV R5 ,F7 ;存入R5R4 MOV R4 ,R6
MOV R3 ,3BH ;E(K-1)送R3R2 MOV R2 ,3CH ACALL CPL1 ;对E(K-1)求补
ACALL DSUM ;对E(K)-2E(K-1)+E(K-2) MOV R5 ,37H ;KD送R5R4 MOV R4 ,38H MOV R0,#46H ;积起始地址46H送R0 ACALL MULT1 ;求的PD MOV R5,49H ;送入R5R4 MOV R4,48H MOV R3,4AH ;Pp+PI送R3R2 MOV R2,4BH
ACALL DSUM ;求的Pp+PI+PD MOV R3,R7 ;送入R3R2 MOV R2,R6 MOV R5,2FH ;P(K-1)送R5R4 MOV R4,30H
ACALL DSUM ;求出P(K)
MOV 2FH,R7 ;存入2FH到30H MOV 30H,R6 MOV 3DH,3BH ;E(K-1)送E(K-2) MOV 3EH,3CH
MOV 3BH,39H ;E(K)S送E(K-1) MOV 3CH,3AH RET DSUM:
MOV A,R4 ADD A,R2 MOV R6,A MOV A,R5 ADDC A,R3 MOV R7,A RET
CPL: ;双字节求补子程序 MOV A,R2 CPL A
ADD A,#01H
MOV R2,A MOV A,R3 CPL A
ADDC A,#00H MOV R3,A RET
MULT1: ;双字节带符号乘法子程序 MOV A,R7 RLC A
MOV SIGN1,C JNC POS1 MOV A,R6 CPL A
ADD A,#01H MOV R6,A
MOV A,R7 CPL A
ADDC A,#00H MOV R7,A POS1:
MOV A,R5 RLC A
MOV SIGN2,C JNC POS2
MOV A,R4 CPL A
ADD A,#01H MOV R4,A
MOV A,R5 CPL A
ADDC A,#00H MOV R5,A POS2:
ACALL MULT MOV C,SIGN1 ANL C,SIGN2 JC TPL
MOV C,SIGN1 ORL C,SIGN2 JNC TPL
DEC R0 MOV A,@R0 CPL A
ADD A,#01H
;被乘数符号送SIHN1 ;对R7求补 ;乘数符号送SIGN2 ;对R4求补 ;对R5求补 ;调用无符号乘法程序MULT ;两乘数皆为负? ;否则,判断两乘数是否为正 ;否则对乘数的高十六位求补MOV @R0,A INC R0
MOV A,@R0 CPL A
ADDC A,#00H MOV @R0 ,A TPL: RET
MULT: ;双字节无符号乘法子程序 MOV A,R6 MOV B,R4 MUL AB MOV @R0 ,A MOV R3,B MOV A,R7 MOV B,R4 MUL AB
ADDC A,R3 MOV R3,A MOV A,B ADDC A,#00H
MOV R2,A MOV A,R6 MOV B,R5 MUL AB ADD A,R3 INC R0
MOV @R0,A MOV A,R2
ADDC A,B MOV R2,A MOV R1,#00H
JNC NEXT INC R1 NEXT:
MOV A,R7 MOV B,R5 MUL AB
ADD A,R2 INC R00
MOV @R0,A MOV A,B
;b*d=BA ;bdL送(R0) ;bdH送R3 ;加法形成Cy ;R3+bcl送(R0+1)
;R2+bcH+Cy送R2 ;若Cy=0,则NEXT ;若Cy=1,则R1+1 ;加法形成Cy R2+acL送(R0+2) ; ADDC A,R1 INC R0
MOV @R0,A
DAC:MOV DPTR,#5FFFH MOV A,30H TRAST1:
MOV A,1AH JMP TRAST TRAST:MOV B,#3BH MUL AB
MOV R5,A MOV R4,B ACALL CHU MOV 51H,R4 MOV 50H,R5 CHU:
MOV R6,#00H
MOV R7,#0AH SRT:ACALL L1 L2:SJMP L5 NOP L1:CLR A
MOV R2,A MOV R3,A
MOV R1,#10H L5:CLR A MOV A,R5 RLC A
MOV R5,A
MOV A,R4 RLC A
MOV R4,A MOV A,R3 RLC A
MOV R3,A MOV A,R2 RLC A
MOV R2,A CLR C
SUBB A,R6 JC L3 PUSH 0E0H MOV A,R3
;除数为10 ;循环16次
;进位标志位清零 ;被乘数低8位送A ;被乘数高8位送A ;A中内容送到被乘数高8位;比较R2和R6的大小 ;R2小则转L3 ;压入堆栈 SUBB A,R7 JNC L4
MOV 0F0H, A POP 0E0H SUBB A,#00H JC L3
MOV R2,A MOV R3, 0F0H INC R5 SJMP L3
L4: MOV R3, A POP 0E0H MOV R2,A INC R5
L3:DJNZ R1,L5 ;循环16次未完,则转L5
RET ;返回。将二进制转换成相应的转数量,也就转换成压缩BCD码 DBCD1: ;设定转数压缩的BCD码转换成单独的BCD码 MOV A,50H ANL A,#0FH MOV 64H,A MOV A,50H ANL A,0F0H SWAP A
MOV 65H,A MOV A,51H ANL A,#0FH MOV 66H,A MOV A,51H ANL A,#0F0H SWAP A
MOV 67H,A RET
LOOP1: LACALL DISI
DISI: MOV A, #80H
MOV DPTR, #2FFFH MOV @DPTR,A DISPLY1:MOV R0,#DISBUF1 MOV R3,#0EFH MOV A, R3
LD1:MOV DPTR,#2FFDH MOV @DPTR,A MOV DPTR,#2FFCH MOV A,@R0
MOV DPTR,#LEDCODE
MOVC A,@A+DPTR ACALL DELAY INC R0 MOV A,R3 JNB ACC.7,LD0 RL A
MOV R3,A AJMP LD1 LD0:RET
DELAY:MOV R7,#02H DLY1:MOV R6,#0FFH DLY2:DJNZ R6,DLY2 DJNZ R7,DLY1 RET
LEDCODE:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DIS2: MOV A,#80H ;方式控制字送A MOV DPTR,#2FFFH
MOV @DPTR,A ;方式控制字送8255命令口 DISPLY2:MOV R0,#DISBUF2 MOV R3,#0FEH MOV A,R3
LD2: MOV DPTR,#2FFDH ;B口地址送DPTR MOV @DPTR,A ;字位码送B口 MOV DPTR,#2FFCH
MOV A,@R0 ;待显示的地址偏移量送A MOV DPTR,#LEDCODE
MOVC A,@A+DPTR ;查字型码表 ACALL DELAY ;延时1ms
INC R0 ;修正显示缓冲区指针 MOV A,R3 JNB ACC.3,LD0
RL A ;字位码左移一位 MOV R3,A
AJMP LD1 ;显示下一个数码
因篇幅问题不能全部显示,请点此查看更多更全内容