直流电机实验报告

一,预习报告修改

1. 防止按一次键,多次循环的程序修改:

K1CHECK:

JB P1.1,K1HANDLE;

修改为K1CHECK

K2CHECK:

JB P1.2,K2HANDLE;

修改为K2CHECK

修改理由为:K1CHECK和K2CHECK的功能都是在按键没有跳起来之前是阻止程序继续往下走,这是因为人手按住键的时间相对于程序执行时间时间是很长的,假设按住再放开的时间为0.1s,即100ms;要使PWMH增减一的程序需要最长时间约20多个机器周期,一个机器周期90ns,那么这个循环执行时间为us级,如果不判断按键是否弹起,按一次可执行十万次PWMH增一或减一的操作,而PWMH上限为21。显然,按键将会失效。所以,增加一个判断按键是否弹起过程,然后再继续工作是十分必要的。

2.防抖动,即按一次键,弹若干次情况的排除的程序修改方案(加一个延时程序):

K1H2:

INC PWMH;增加占空比

DELAY,增加延时程序

K2H2:

DEC PWMH

修改为DELAY

DELAY:

MOV R7,#50

D1: MOV R6,#100

D2: DJNZ R6,D2

DJNZ R7,D1

SJMP SCAN;延时程序,延时10ms

修改原因:实验过程中发现,在做了改动1之后,确实避免了按一次键就全满的错误。但是,理论上要按20次才能把高电平按满,但是事实上不到20次,原因就在于按一次键之后,按键会抖动若干次,总时间持续约10ms,因此,在做完一个循环后,避免计算抖动的次数,

就必须在下一个循环开始之前,加一个相应时间的延时,保证抖动结束之后再开始判断是否又有键按下。

二,实验结果分析:

在做了以上的修改之后,按下加速和减速开关,在P1.0端口用示波器观测,可以明显地看到波形占空比增加和减少,同时,直流电机的速度也能出现相应的增加和减少。结果符合实验要求。

三,其他问题分析:

尽管做了两个修改,但是还是会出现以下不可避免的问题:1.观测直流电机的转速比较困难,往往在转盘高速时,增减占空比人眼视觉很难观测到差异,而在占空比较小时,变化过于剧烈,导致在高电平占空比未到零时,转盘就已经停了下来。原因是转盘的摩擦较大,对电平的变化感应不够灵敏,对于起始转动高电平占空比要求较高。2.当把占空比调到最高时,示波器显示的波形并不是一条高电平的直线,原因是:在一个周期结束时,改程序做的操作是,先置零,后置一,故导致在一个周期的开端会有一个很窄的负脉冲出现。

 

第二篇:实验报告 实验十三 直流电机控制实验

EDA实验报告       之

  实验十三  直流电机控制实验

1、 实验目的       

1)         了解直流电机控制原理。

2)         学习单片机控制直流电机的编程方法。

3)         了解单片机控制外部设备的常用电路。

2、实验要求

利用实验仪上的D/A变换电路,输出-8V至+8V电压,控制直流电机。改变输出电压值,改变电机转速,用8255的PC.0读回脉冲计数,计算电机转速。

3、实验说明

在电压允许范围内,直流电机的转速随着电压的升高而加快,若加上的电压为负电压,则电机会反向旋转。

本实验仪的D/A变换可输出-8V到+8V的电压,将电压经驱动后加在直流电机上,使其运转。通过单片机输出数据到D/A变换电路,控制电压的高低和正负,观察电机的旋转情况。在电机转盘上安装一个小磁芯,用霍尔元件感应电机转速,用单片机控制8255读回感应脉冲,从而测算出电机的转速。

有兴趣的同学,可以做一个恒速的试验,即让电机转速保持一定。若电机转速偏低,则提高输出电压,若电机转速偏高,则降低输出电压。 首先给电机一定的阻力,让转速保持一定,然后稍微给加大阻力,观察D/A输出的电压是否能做出反应,再减小阻力,也观察D/A电压,有何变化。注意所加的阻力不能过大,以免电机烧毁。

4原理图。

5、 实验内容

5.1   使用仪器、仪表,开发平台型号

本实验用到了WAVE 6000软件平台,电脑一台,LAB6000实验箱,若干连线,串行数据线。

5.2   性能指标、技术要求、思路方案、流程图

5.2.1         性能指标、技术要求见实验目的和实验要求。

5.2.2         思路方案:在程序中给出一个数字量,通过D/A变换为模拟电压,将电压经驱动后加在直流电机上,使其运转。在电机转盘上安装一个小磁芯,用霍尔元件感应电机转速,用单片机控制8255读回感应脉冲,并用计时器得到转一圈所用的时钟周期,从而根据相关公式测算出电机的转速;另一方面,通过肉眼观察出转速;将理论值和观察值进行比较,看是否接近,如果有误差,说明原因。

5.2.3         流程图:

5.3源程序

; DC            motor
; ASM for MCS51
mode        equ   082h
STATUS     equ   08001h
PORTA      equ  08000h
CTL            equ  08003h
CS0832     equ  09000h
DC_P         equ 0
count0      equ  40H
count1      equ  41H

Org             0000h
ljmp           start
ORG          000BH              ;外部中断0
LJMP         INT0
org            0030h
start:
mov           40H,#0
[番茄花园1] SETB              EA                ; 开所有中断
SETB         IT0               ; INT0边沿触发
SETB         ET0               ; 允许INT0中断
[番茄花园2] mov      dptr, #CS0832
mov           a, #0B5h
movx         @dptr, a
lcall           delay                   ; 等待电机运转稳
lcall           read                    ;  读取时间

sjmp          $

;###################

mov   dptr, #CS0832           ;  设断点,观察上次时间

       mov   a, #80h

       movx  @dptr, a ;

       lcall  delay                   ;停止电机运行

 

       mov   dptr, #CS0832           ;  设断点,观察上次时间

       mov   a, #0ffh

       movx  @dptr, a

       lcall  delay                   ; 等待电机运转稳定

       lcall  read

      

       mov   dptr, #CS0832

       mov   a, #80h

       movx  @dptr, a

       lcall  delay                   ;停止电机运行

 

       mov   dptr, #CS0832           ;  设断点,观察上次时间

       mov   a, #40h                ;  电机反转

       movx  @dptr, a

       lcall  delay                   ; 等待电机运转稳定

       lcall  read                    ;  读取时间

       

       mov   dptr, #CS0832

       mov   a, #80h

       movx  @dptr, a

       lcall  delay                   ;停止电机运行

 

       mov   dptr, #CS0832           ; 设断点,观察上次时间

       mov   a, #00h                 ;  电机反转加速

       movx  @dptr, a

       lcall  delay                   ; 等待电机运转稳定

       lcall  read

    

       mov   dptr, #CS0832

       mov   a, #80h

       movx  @dptr, a

       lcall  delay                   ;停止电机运行

LJMP         START

SJMP         $

;###################

[番茄花园3] ;========================
delay:
       mov   r5,#10
       mov   r6,#0
       mov   r7,#0
ddd:
       djnz  r7,ddd
       djnz  r6,ddd
       djnz  r5,ddd
       ret
;========================
read:                  ;读测速度的霍尔器件,count0\count1 为电机转一圈的时间
       mov    TMOD, #01               ; 16 位计时
       clr                 TR0
       mov    TH0, #0
       mov    TL0, #0       
       mov    dptr, #STATUS
r_0:  

 movx          a,@dptr
       jnb               acc.DC_P, r_0           ;  等待低电平完
r_1:   

movx           a,@dptr
       jb                  acc.DC_P, r_1           ;  等待高电平完

       setb              TR0
r_2:   

movx           a,@dptr
       jnb               acc.DC_P, r_2           ;  等待低电平完
r_3:   

movx           a,@dptr
       jb                  acc.DC_P, r_3           ;  等待高电平完
       clr                TR0
[番茄花园4]     
       mov   count0+1,TH0
       mov   count1+1,TL0
       ret
;========================
INT0:
       clr                TR0
       mov    TH0, #0
       mov    TL0, #0
       SETB   TR0
       INC              40h
[番茄花园5]        RETI
;========================       

5.4实验步骤,完成情况

5.4.1         在WAVE 6000中新建文件,并将代码写入文件中,保存为EXPERIMENT13.ASM;

5.4.2         在WAVE 6000中新建项目,并在模块文件中包含上述EXPERIMENT13.ASM文件,最后保存为EXPERIMENT13.PRG。

5.4.3         编译程序,按照提示改正错误的地方,直到没有语法错误为止。

5.4.4         完成上一步后,检查是否有逻辑错误。

5.4.5         按连线图连好线,经师兄确认后打开电源。

5.4.6         观看直流电机的转动方向,转速是否大致正确,如果不是,检查源程序和连线,直到正确为止。然后用单片机控制8255读回感应脉冲,并用计时器得到转一圈所用的时钟周期,从而根据相关公式测算出电机的转速;另一方面,通过肉眼观察出转速;将理论值和观察值进行比较,看是否接近,如果有误差,说明原因。

5.4.7         结果正确后,等师兄检查完毕。然后收拾实验仪器,包括电源线、导线、串口线,示波器等,收拾桌面和凳子。

6、本实验遇到问题及解决方案

6.1   中断用的是计数器0,把中断允许位弄错了,导致一直没有中断产生,结果肯定就错了。

解决方案:正确将中断允许位置位。

6.2   转速的理论值与观察值有出入,有误差。

解决方案:一方面,由于直流电机的转速不稳定,导致得到的转一圈所需的时钟周期有波动,从而由它计算出的理论上的转速自然不是很准确。另一方面,肉眼观察的转速由于各种人为的原因也会造成误差。故理论值和观察值有出入是能容忍的,实验中的误差也是在允许的范围内。(转速理论值为1.9,转速观察值为2.1

7、对本实验的改进建议和疑难问题:

7.1   改进建议:由于用计数电机转一圈来得到的时钟周期数来计算理论上的转速,而电机的转速不稳定,从而导致6.2提到的问题。为了减小误差,可以利用多次测量,求平均值的方法。当然,这也提高了程序的难度。不过值得一试。

7.1   疑难问题:如何采用更多的方法来减小人为或者机械造成的理论上的电机转速和观察到电机转速之间的误差,这是一个值得思考的问题。

20##-6-3


 [番茄花园1]计数器中断次数计数器单元,初始值为0

 [番茄花园2]计数器0中断允许

 [番茄花园3]这部分是为了观看不同电压驱动直流电机的情况。要这部分时只需要将前面的sjmp  $ 删掉即可。

 [番茄花园4]计数一个低电平和高电平(即电机转动一圈)所用的时钟周期。

 [番茄花园5]计数器中断次数加一。

相关推荐