找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4434|回复: 0
打印 上一主题 下一主题
收起左侧

单片机控制实验(PWM)汇编语言

[复制链接]
跳转到指定楼层
楼主
1.了解直流电机 PWM 的工作原理
2.基础要求:编程并实现直流电机的调速,LED 显示电机的转速,即电位器输出(开环)
3.扩展要求:编程并实现直流电机的调速,以 SPEED 口输出的信号为反馈显示电机的实 际转速(闭环)


实验原理
1.PWM 的调速原理
PWM 调速是通过改变输出脉冲的占空比,从而改变电机转速的一种调速方法。PWM 调速 分为单极性和双极性两种。在单极性方式下,电机的转动方向不变,改变的只是转速;而在 双极性方式下,电机的转动方向和转速都是可变的。以下以单极性为      例说明 PWM 调速 的基本原理。
假设一个脉冲周期内,高电平电压为 Us,持续时间为 t1;低电平为 0V,持续时间为 t2。 则脉冲周期 T=t1+t2,该周期内平均电压 U0=t1*Us/T。令α=t1/T,则 U0=α*Us,α表示占 空比。当高电平电压不变的情况下,电机两端电压的平均值 U0 取决于占空比α的大小。改 变α值就可以改变端电压的平均值,从而达到调速的目的,这就是  PWM 调速原理。
在双极性方式下,如果 U0 为负,意味着电机将反转,转速由 U0 的绝对值控制。

2.对象模块(PWM 电机调速模块)工作原理
直流电机 PWM 调速模块由测速电路和 PWM 调速电路两部分组成。模块的电源由接口总线 引入。本模块中使用的电机为 5V 的直流电机。

?    电机测速部分
(1)直流电机测速原理介绍 电机测速部分由一个霍尔开关和信号放大电路组成。与电机同轴的转盘上装有两块的强
力磁钢,它们的磁极性相反,以保持转盘的平衡并保证转盘每转一周霍尔开关只导通一次。 霍尔开关平时输出为正电压,当转盘上的磁钢与霍尔开关正对时,霍尔开关输出负电压,经 整形、放大输出。单片机通过对负脉冲计数,可计算出电机的转速。
(2)电机测速部分电路原理及说明
3144 为霍尔开关,整形、放大由 LM358 完成。第一级 358 作为比较器使用,第二级作 为电压跟随器。SPEED 为负脉冲输出接口,对应于模块上的 SPEED 插孔。
(3)电机测速部分电路测试方法 将模块插在接口挂箱或对象挂箱上并接通电源,电机应转动。用示波器在 SPEED 插孔处
可以看到连续的负脉冲。

PWM 调速部分
(1)PWM  调速电路原理及说明
JUMP 跳线为极性选择。2、3 脚短接(模块上选择 D 端)为双极性;1、2 脚短接(模 块上选择 S 端)为单极性。单极性时,PWM IN 为高,电机两端无电压;PWM IN 为低,电 机两端为正电压。
双极性时,PWM IN 为高,电机两端为负电压;PWM IN 为低,电机两端为正电压。
(2)PWM 调速电路基本测试方法
将 CPU 模块的 P1.0~P1.1 分别接至 CPU 挂箱的 K1~K3,T0 接 PWM 调速模块的 PWM IN, 模块的跳线 1、2 脚短接。运行测试程序,改变 K1~K3 的值,电机转速应随之变化。

3.电位器模块
电位器模块为一个 10K 的可调电阻,通过调节电位器上的旋钮可以改变电位器的电压输 出。此电位器的电压输出为 0~5V 模拟电压。通过连接 ADC0809 可将电位器的模拟电压转换 为数字量,提供给单片机使用。

4.ADC0809 模块
ADC0809 是一种逐次比较式 8 路模拟输入、8 位数字量输出的 A/D 转换器。
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
5.8279 显示模块
(1)、电路原理
8279 显示电路由 6 位共阴极数码管显示,74LS244 为段驱动器,75451 为位驱动器,可 编程键盘电路由1片 74LS138 组成,8279  的数据口,地址,读写线,复位,时钟,片选都 已经接好,键盘行列扫描线均有插孔输出。键盘行扫描线插孔号为 KA0~KA3;列扫描线插孔 号为 RL0~RL7;8279 还引出 CTRL、SHIFT 插孔。六位数码管的位选、段选信号可以从 8279 引入,也可以有外部的其他电路引入,原理图如下:
(2)、电路测试见整机测试
六位数码管电路的测试:除去电路板上数码管右侧的跳线,系统加点,用导线将插孔 LED1 接低电平(GND),再将插孔 LED-A,LED-B,LED-C,LED-D,LED-E,LED-F,LED-G,LED-DP 依次接高电平(VCC),则数码管 SLED1 的相应段应点亮,如果所有的段都不亮,则检查相应 的芯片 75451,如果个别段不亮,则检查该段的连线、及数码管是否损坏。
用同样的方法依次检查其它数码管。
8259 显示、键盘控制芯片电路的测试:加上数码管右边的所有短路线,复位系统,应 能正常显示。否则检查 8279 芯片、244 芯片、138 芯片是否正常。
软件设计
1.思路描述
本实验要实现的功能分别为电机调速和 LED 显示。


直流电机调速部分:由于电位器输出为模拟电压,而单片机所能处理的仅为数字信号, 所以要经过 ADC0809 将电位器的输出装换为数字信号。因此编程时要启动 IN0,启动 A/D 转 换,并用软件延时一段时间等待转换结束,然后读取转换结果并将其存入指定的寄存器供调 用。
直流电机转速的调节需要改变输出脉冲的占空比,因此需要编写一个能输出方波的子程 序。如先让 PWM 为 0,延时一段时间后,再将 PWM 取反,即为 1,在延时取反,如此反复就 能达到输出方波的目的。通过调节电位器的电压输出改变输出方波的占空比,达到调速的目 的。


LED 显示部分:本部分的主要功能是将 ADC0809 的输出显示在 LED 上。首先将转换结果 存入寄存器 R1,然后写显示 RAM 命令字,数据端口地址送 R0,并将初值送  R0。写 8279 数 据口地址,读取转换结果,语句“ACALL   TABLE”通过查表将 ADC0809 的转换结果转换为 显示码,写入 8279 显示 RAM 指针 R0 加 1,显示码送 DPTR 输出。计数器 R7 减 1,不为零则 跳转显示下一个数据,减为零则从子程序返回。

3.程序清单


(1)PWM 电机调速程序 PWM 模块调试接线说明
模块的 PWM   插口与系统板上的 P1.0 插口相连;
外扩 a/d 模块 0809 的片选信号与系统板上的 CS3 相连(箱式的片选地址为 CFB8H) PWM 模块的跳线:在 S 端短路时,单脉冲;
在 D 段短路时,双脉冲
0809 的 CLK 接 CPU 挂箱的 CLK3,ADIN0 接模拟输入。


CSEG     AT     4000H PORT        EQU        0CFB8H PWM        EQU        P1.0

LJMP        START CSEG     AT  4030H
START:  MOV     R3,#1H
MOV   DPTR,#PORT    ;启动通道 0
MOVX  @DPTR,A MOV   R0,#30H
LOOP1:  DJNZ  R0,LOOP1
MOVX  A,@DPTR SWAP    A
ANL    A,#0FH CJNE    A,#0H,LP JMP    LP2
LP:    CJNE    A,#0FH,LP1
JMP    LP2
LP1:     MOV     R0,A MOV     R4,A MOV     A,#0FH CLR     C
SUBB     A,R0
MOV         R5,A LP2:     CPL     PWM
MOV     A,R4
MOV     R0,A CALL     DELAY CPL     PWM MOV     A,R5
MOV     R0,A CALL     DELAY DJNZ    R3,LP2
MOV     R3,#1H JMP    START
DELAY:  MOV     R1,#8FH DELAY1:NOP
DJNZ    R1,DELAY1
DJNZ    R0,DELAY RET
END (2)LED 显示程序 CSEG  AT  0000H
LJMP  START

CSEG  AT  4100H
PORT     EQU    0CFB8H START:    SETB    P1.0
MOV    DPTR,#PORT     ;启动通道 0
MOVX    @DPTR,A WAIT:    JNB    P1.0 WAIT
MOVX    A,  @DPTR MOV     R0,  A


DISP:    MOV     DPTR,#0CFE9H    ; MOV     A,#08H
MOVX     @DPTR,A
MOV     DPTR,#0CFE9H    ;写显示 RAM 命令字 MOV     A,#90H
MOVX     @DPTR,A


MOV    A,  R0    ;转换结果
ANL    A,#0F0H   
SWAP    A   
ACALL    TABLE    ;转换为显码


MOV    DPTR,#0CFE8H    ;8279 数据口地址
MOVX    @DPTR,A
;送显码输出

MOV     A,  R0     ;转换结果
ANL    A,#0FH
ACALL    TABLE    ;转换为显码


MOV    DPTR,#0CFE8H     ;8279 数据口地址 MOVX    @DPTR,A     ;送显码输出
CALL     DELAY

LJMP     START


DELAY:    MOV     R6,#255    ;延时 DEL2:    MOV     R5,#255
DEL3:    NOP NOP
DJNZ  R5,DEL3
DJNZ  R6,DEL2
RET

TABLE:    INC     A
MOVC     A,@A+PC RET
DB     3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB     7FH,6FH,77H,7CH,39H,5EH,79H,71H

END

(3)总程序


CSEG    AT    4000H   
PORT    EQU    0CFB8H    ;端口地址
PWM    EQU    P1.0   
LJMP    START
CSEG     AT  4030H


START: MOV    R3,#1H    ;设置模拟输出通道个数为 1,PWM 调速程序部分 MOV   DPTR,#PORT    ;启动通道 IN0,端口地址送 DPTR
MOVX  @DPTR,A    ;启动 A/D 转换
MOV   R0,#30H    ;软件延时,等待转换结束


LOOP1:  DJNZ R0,LOOP1    ;R0 寄存器减 1,不为零则转移 MOVX A,@DPTR     ;读取转换结果
SWAP    A     ;高低半字节交换
ANL    A,#0FH     ;屏蔽高四位,取低四位
CJNE    A,#0H,LP    ;比较电压是否为 0V,不相等则跳转至子程序 LP JMP    LP2    ;等于 0V 则跳转至方波输出子程序 LP2

LP:     CJNE    A,#0FH,LP1    ;不等于 5V 则跳转至子程序 LP1
JMP    LP2    ;等于 5V 则跳转至方波输出子程序 LP2

LP1:     MOV    R0,A    ;转换值存入 R0
MOV    R4,A    ;转换值存入 R4
MOV    A,#0FH     ;最大值送入累加器 CLR     C    ;进位位清零
SUBB     A,R0
MOV     R5,A


LP2:     CPL    PWM    ;PWM 求反,为 0,方波输出子程序 MOV         A,R4
MOV     R0,A
CALL     DELAY    ;延时
CPL     PWM    ;PWM 求反,P1.0=1
MOV     A,R5

MOV     R0,A CALL     DELAY
DJNZ    R3,LP2    ;R3 减 1,不等于零则转移,循环 MOV    R3,#1H     ;重新置值
JMP    START     ;跳转至 START 程序


START1: MOV    DPTR,#0CFB8H    ;显示部分程序 MOV     DPTR,#PORT
MOVX    @DPTR,A


WAIT:    JNB    P1.0  WAIT    ;等待中断 MOVX    A,  @DPTR
MOV     R0,  A

DISP:     MOV    A,R1    ;转换结果存入 R1
SWAP    A     ;分离高四位和低四位 ANL     A,#0FH
MOV     50H,A    ;存入 50H 中 MOV     A,R1
ANL    A,#0FH
MOV     51H,A    ;存入 51H 中 MOVX     @DPTR,A

LPPO:    MOV MOV MOVX MOV MOV    DPTR,#0CFE9H A,#90H
@DPTR,A R0,50H R2,#02H    ;写显示  RAM 命令字



;存放转换结果地址,初值送 R0
    MOV    DPTR,#0CFE8H    ;8279 数据口地址
DL0:   
MOV ACALL    A,@R0
TABLE   

;绝对调用,转换为显码
    MOVX
INC DJNZ SJMP CALL LJMP    @DPTR,A
R0
R2,DL0
DEL1
DELAY START    ;送显码输出

;短转移

DELAY:    MOV    R6,#8FH     ;延时程序
DELAY1:  NOP
DJNZ  R6,DELAY1
DJNZ  R0,DELAY

DEL1:  MOV R6,#15H DEL2:  MOV R7,#25H DEL3:      NOP
NOP
DJNZ  R7,DEL3
DJNZ  R6,DEL2
CJMP  START     ;循环 RET


IT0P:        SETB      TR1  ;开定时器 1    ;中断程序 SETB    ET1
RETI    ;中断返回 IT1P:
CLR  TR0
CLR  TR1
MOV   A,TL0
MOV   TH0,#0H;  置零 MOV   TL0,#0H;
MOV   TH1,  #3CH     ;重置初值 MOV   TL1 ,#0B0H
MOV   R2,  A
ACALL  DISP ;调用显示函数 ACALL  COMPARE
RETI

TABLE:    INC             A
MOVC     A,@A+PC RET
DB     3FH,06H,5BH,4FH,66H,6DH,7DH,07H DB     7FH,6FH,77H,7CH,39H,5EH,79H,71H

END


调试说明
1.实验现象
当电位器旋到最小电压输出时,电机停止转动,LED 模块显示为“00”;逐步增大电位 器的电压输出,直流电机的转速逐步加快,LED 显示增大;当电位器旋到最大电压输出时, 电机转速最大,LED 显示为“FF”。

2.列举问题
LED 显示由“00”逐渐增大到“FF”过程中显示正常,但是过一段时间后显示变为“00”, 并不再改变。
3.原因分析

经分析为计数器计数溢出。计数器记录的是方波脉冲,在从“00”增大到“FF”过程是 可以正常计数,但当计数超过“FF”时,计数器发生溢出,所以显示变成“00”。可以通过 添加中断程序,当计数器发生溢出时,CPU 响应中断,并将计数器清零,重新计数可以解决 此问题。

IT0P:
SETB  TR1 ;开定时器 1
SETB  ET1
RETI    ;中断返回 IT1P:
CLR  TR0
CLR  TR1
MOV   A,TL0
MOV   TH0,#0H;  置零 MOV   TL0,#0H;
MOV   TH1,  #3CH     ;重置初值 MOV   TL1 ,#0B0H
MOV   R2,  A
ACALL  DISP ;调用显示函数 ACALL  COMPARE
RETI END

4.实验总结
(1)实验实现功能 本实验实现了通过调节电位器的不同电压输出来改变直流调速电机的转速。当电位器输
出最小时,电机转速最慢;电位器输出最大时,电机达到最大转速。并且电机的转速可以通 过 LED 模块显示出来,可以通过观察来发现电机转速的情况。因此,本实验即达到了动态调 节电机转速,又实现了实时监测电机的运转情况。

(2)实验不足及改正意见
本实验虽然实现了直流电机调速和 LED 动态显示,但 LED 显示的数值是经过延时后输出 的,并不是电机现在转速的实时精确值。不过就现有的实验条件来看已经是所能达到的最准 确的。
另外,此试验只利用了单片机的某一些端口,并且也是一些不很复杂的输出和输入,数 据转换功能,并未充分利用单片机的片内资源。就这一点来看,由本实验出发,单片机所能 实现的功能还有待进一步在后续的试验中继续开发。
实验编程使用的是汇编语言,具有编写的程序效率高,占用的存储空间小,运行速度快, 能直接管理和控制硬件设备,直接访问存储器及 I/O 接口电路等优点。但其可读性和可维护 性较差,编写程序需要对硬件电路及存储器特别了解,是设计程序时不能把精力全部集中到 程序所能实现的功能上。如果程序很长的话,无论是读懂还是修改都是一件很麻烦的事。因 此,建议适当学习高级语言,如 C 语言的单片机程序编写。可以减少在程序设计阶段一些不 必要的麻烦。

记录

1.解释霍尔器件的工作过程。 答:在电机同轴的转盘上装有两块的强力磁钢,它们的磁极性相反,以保持转盘的平衡
并保证转盘每转一周霍尔开关只导通一次。霍尔开关平时输出为正电压,当转盘上的磁钢与 霍尔开关正对时,霍尔开关输出负电压,经整形、放大输出。单片机通过对负脉冲计数,可 计算出电机的转速。
2.PWM 模块上的 IN4002 是什么元件,作用是什么。 答:IN4002 是二极管,作用是整流。
3.PWM 模块上 JUMP 跳线的 S/D 分别是什么,有什么作用。 答:JUMP 跳线的作用为极性选择。
2、3 脚短接(即 D 端)为双极性;1、2 脚短接(即 S 端)为单极性。 单极性时,PWM  IN 为高,电机两端无电压;PWM  IN 为低,电机两端为正电压。单
极性是只可以调节电机的转速;双极性时可以调节电机的转速和转动方向。

以上内容的Word格式文档51黑下载地址:
单片机综合实验-PWM直流电机调速-449985896529647d27285290.doc (713.5 KB, 下载次数: 12)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表