单片机与控制实验(3)——直流电机脉宽调制调速

发布者:脑力激荡最新更新时间:2016-12-08 来源: eefocus关键字:单片机  控制实验  直流电机  脉宽调制调速 手机看文章 扫描二维码
随时随地手机看文章

一、实验目的和要求

  掌握脉宽调制调速的原理与方法,学习频率/周期测量的方法,了解闭环控制的原理。

二、实验设备

  单片机测控实验系统
  直流电机调速实验模块
  Keil开发环境
  STC-ISP程序下载工具

三、实验内容  

  1. 编写程序,能够在数码管上显示一个数值。
  2. 固定向P1.1输出0,然后测量每秒钟电机转动的转数,将其显示在数码管,每秒刷新一次即可。
  3. 使用脉宽调制的方法,动态调整向P1.1输出的内容,使得电机转速能够稳定在一个预定值附近,同时实时显示当前转速。
  4. 根据输入修改电机转速目标值,设置两个转速目标值:低转速和高转速。
  5. 每隔一秒钟读取两个开关的状态,如果S1按下,动态调整输出,使得电机转速能够稳定到低转速目标值附近,如果S2按下,动态调整输出,使得电机转速能够稳定到高转速目标值附近。交替显示目标值和当前转速值。

 

四、实验步骤

1. 建立工程,实现实验内容1

  参考辅助材料,学习8031汇编语言使用和直流电机原理。  

2. 编写中断程序,测量电机转速

  本程序需要使用定时器定时,并使用中断来同步。中断程序的典型例子如下: 

ORG 0000H
LJMP START
ORG 000BH
LJMP T0IN ;中断向量表
ORG 0040H
START: ...;初始化
...
T0IN: ...;中断程序
... 
RETI ;中断返回
END

3. 完成控制转速程序

  按照脉宽调制的原理,再添加一个快速的定时中断(0.1ms左右),在这个中断里面动态改变P1.1的输出,宏观上输出有效(0)的比例就是预定的控制变量。这个控制变量增大,电机转速就应该提高,但由于各种内部和外部因素,它们之间不存在简单的函数关系,因此必须根据测量出来的实际转速进行动态调整。

  首先将电机转速控制在一个预定数值附近,在每一个1秒钟中断测量出当前转速之后,将其与目标值相对比,如果不够则增加控制变量,否则减少之,这样就能逐步达到稳定转速的目的。同时将速度显示出来。

4. 完成整体实验内容

  在上面程序的基础上,再加上根据开关状态改变预定转速的代码。同时,在主程序中交替显示目标值和当前转速值,显示一个内容之后等待一段时间(可以由延时代码实现),然后再显示另一个并延时。要显示的内容都是在中断中被修改的。

 

五、实验原理

本实验示意电路原理图(图中的P1.3应改为P1.1):

  对于直流电机来说,其转速由输入电压决定,因此具有平滑调速的效果;相比而言,交流电机的转速由交流电频率和电机结构决定,难以改变速度。当然,交流电机构造简单,没有换向器,所以容易制造高转速、高电压、大电流、大容量的电机;而直流电机一般用在负荷小,但要求转速连续可调的场合,如伺服电机。

  脉宽调制(Pulse Width Modulation,PWM)是一种能够通过开关量输出达到模拟量输出效果的方法。使用PWM可以实现频率调制、电压调制等效果,并且需要的外围器件较少,特别适合于单片机控制领域。这里只关心通过PWM实现电压调制,从而控制直流电机转速的效果。也称作脉宽调制调速。

  PWM的基本原理是通过输出一个很高频率的0/1信号,其中1的比例为δ(也叫做占空比),在外围积分元件的作用下,使得总的效果相当于输出δ×A(A为高电平电压)的电压。通过改变占空比就可以调整输出电压,从而达到模拟输出并控制电机转速的效果。

  使用单片机实现PWM,就是根据预定的占空比δ来输出0和1,这里δ就是控制变量。最简单的办法就是以某个时间单位(如0.1ms,相当于10kHz)为基准,在前N段输出1,后M-N段输出0,总体的占空比就是N/M。这种方法由于0和1分布不均匀,所以要求基准频率要足够高,否则会出现颠簸现象。

  要达到更稳定的效果,可以采用累加进位法如果将总的周期内的0和1均匀分散开。设置一个累加变量x,每次加N,若结果大于M,则输出1,并减去M;否则输出0。这样整体的占空比也是N/M。在实验中取M=256可以使程序更加简单。

  另外,由于本实验板的设计,输出0使电机工作。因此对于本实验,上面所说的0和1要翻转过来用。

  在本实验板中,电机每转动一次,与之相连的偏心轮将遮挡光电对管一次,因此会产生一个脉冲,送到INT0。要测量转速,既可以测量相邻两次中断之间的时间;也可以测量一秒种之内发生的中断次数。显然,后一种方法更加简单。

  进行转速控制时,涉及到三个变量:预期转速,实际转速和控制变量。这里控制变量就是占空比。我们并不能够预先精确知道某个控制变量的值会导致多少的实际转速,因为这里有很多内部和外部因素起作用(如摩擦力,惯性等),但可以确定就是随着控制变量的增加,实际转速会增加。

  反馈控制的基本原理就是根据实际结果与预期结果之间的差值,来调节控制变量的值。当实际转速高于预期转速时,我们需要减少控制变量,以降低速度;反之则需要调高控制变量。

  本实验的转速控制可以使用简单的比例控制算法,也就是当转速S大于预定值时,将输出0的个数减少;当转速小于预定值时,将输出0的个数增加。改变值正比于测量出的差值。也可自行使用其他更加复杂的算法。

  实验中采用的电机最大转速在200转/s左右,转速小于40转/s左右将不稳定,可能会停转。

 

六、实验代码  

 

ORG 0000H
LJMP START
ORG 0003H
LJMP OUTINT
ORG 000BH
LJMP TIME0
ORG 001BH
LJMP TIME1
ORG 0030H

 

P4SW EQU 0BBH
P4 EQU 0C0H
CLK EQU P4.4
DAT EQU P4.5
S1 EQU P3.6
S2 EQU P3.7
MOT EQU P1.1
START:
;对P4口进行初始化设置
MOV DPTR,#TAB
MOV P4SW,#70H

MOV R0,#0 ;计转速
MOV R1,#0 ;产生1s定时用

;R6、R5、R4数码管显示控制
MOV R6,#0 ;数码管个位
MOV R5,#0 ;数码管十位
MOV R4,#0 ;数码管百位

MOV R7,#0 ;交替显示时用
MOV 60H,#100 ;存高电平
MOV 61H,#100 ;存低电平

MOV R2,61H ;R2用于快速定时中断中给MOT送值时计数,赋初值为低电平的个数

MOV 62H,#200 ;按下s1时的目标值(最大值)
MOV 63H,#100 ;按下s2时的目标值(最小值)
MOV 64H,#150 ;不按键时的转速

MOV R3,64H ;计目标值(初始值为不按键时的转速)
;---------------------------------------------------------------------
;TMOD说明、T1/T0初值计算:
;---------------------------------------------------------------------
; T1 | T0
;TMOD D7 D6 D5 D4 D3 D2 D1 D0
;(89H) GATE C/T M1 M0 GATE C/T M1 M0
; 0 0 0 1 0 0 1 0
; |定时模式| 方式1 |由软件启动| | 方式2
;---------------------------------------------------------------------
MOV TMOD,#12H
;---------------------------------------------------------------------
;T0初值计算(快速定时中断,动态改变MOT的输出,0.1ms,方式2),Tosc=12MHz
;X=(2^8-(0.1ms)/12*Tosc)=256-100=156=9CH
;---------------------------------------------------------------------
MOV TH0,#9CH
MOV TL0,#9CH
;---------------------------------------------------------------------
;T1初值计算(定时中断,数码管显示控制,1s,方式1),Tosc=12MHz
;X=(2^16-(1s)/12*Tosc)=65536-1000000<0
;折中方法:每20次产生1s定时初值,一次间隔50ms
;X=(2^16-(50ms)/12*Tosc)=65536-50000=15536=3CB0H
;---------------------------------------------------------------------
MOV TH1,#3CH
MOV TL1,#0B0H

;中断开关
SETB EA
SETB EX0
SETB IT0
SETB ET0
SETB TR0
SETB ET1
SETB TR1

CLR MOT ;电机初始状态设置为低电平

L1:
SJMP L1 ;死循环,用于查询

;---------------------------------------------------------------------
;每个1ms调整MOT口输出一次,一次调整一个脉冲
;60H存高电平输出次数,61H存低电平输出次数
;每隔1s调整60H,61H的值一次,来动态调整电机转速
;---------------------------------------------------------------------
TIME0:
;保存程序状态
PUSH ACC
PUSH PSW
DJNZ R2,RETURN0 ;R2用于快速定时中断中给MOT送值时计数

CPL MOT ;取反MOT
JNB MOT,LP0 ;判断MOT电平高低
MOV R2,60H ;若MOT=1,给R2赋高电平计数值
LJMP RETURN0
LP0:
MOV R2,61H ;若MOT=0,给R2赋低电平计数值

RETURN0:
POP PSW
POP ACC
RETI

 

TIME1:
;保存程序状态
PUSH ACC
PUSH PSW
INC R1 ;R1自增
CJNE R1,#20,RETURN1 ;不等于20(小于20)直接return1,TIME1执行20次,产生1秒中断
MOV R1,#0
MOV R3,64H

;在1s中断中应该执行的操作
JNB S1,MAX ;s1按下,R3置为MAX
JNB S2,MIN ;s2按下,R3置为MIN
SJMP LOOP
MAX:
MOV R3,62H
SJMP LOOP
MIN:
MOV R3,63H
SJMP LOOP

;转速调整
LOOP:
MOV A,R0 ;R0计转速
SUBB A,R3 ;A-R3影响Cy
JC ZENG ;R0JNC JIAN ;R0>R3,跳转JIAN
SJMP SHOW ;跳转交替显示

ZENG:
INC 61H ;增加低电平
DEC 60H ;减少高电平
SJMP SHOW

JIAN:
INC 60H ;增加高电平
DEC 61H ;减少低电平
SJMP SHOW

;交替显示
SHOW:
INC R7
CJNE R7,#2,LP1 ;R7=1显示当前转速,R7=2显示目标转速
MOV R7,#0

 

;显示目标转速
MOV A,R3 
MOV B,#100
DIV AB ;商A,余数B
MOV 65H,A ;百位
MOV A,B
MOV B,#10
DIV AB
MOV 66H,A ;十位
MOV 67H,B ;个位
MOV R6,67H ;目标转速
MOV R5,66H
MOV R4,65H

LP1:
LCALL DSL

MOV R6,#0
MOV R5,#0
MOV R4,#0
MOV R0,#0

RETURN1:
POP PSW
POP ACC
RETI

OUTINT:
INC R0
INC R6
CJNE R6,#10,COUNT_EXIT

INC R5
MOV R6,#0
CJNE R5,#10,COUNT_EXIT

INC R4
MOV R5,#0
CJNE R4,#10,COUNT_EXIT
MOV R4,#0
COUNT_EXIT:
RETI

DSL:
MOV A,R6
MOVC A,@A+DPTR
LCALL DISPLAY
MOV A,R5
MOVC A,@A+DPTR
LCALL DISPLAY
MOV A,R4
MOVC A,@A+DPTR
LCALL DISPLAY
RET ;中断函数内,此处必须是RET,RETI结束中断

DISPLAY:
MOV R0,#8
DS_L:
CLR CLK
RLC A
MOV DAT,C
SETB CLK
DJNZ R0,DS_L
RET

 

TAB:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END


七、一点想法

  在本次实验中,PWM脉宽调制是通过改变低电平(0,存在61H中)和高电平(1,存在60H中)的输入比例实现的。初始时,高低电平均为100次(可以随便设置,高低电平次数也可以不同),比例为1:1。当当前转速低于目标转速时,增加低电平输入次数,减少高电平输入次数(两者总和不变,还是200次),增加了低电平的占空比,转速提高。当当前转速高于目标转速时,减少低电平输入次数,增加高电平输入次数(两者总和不变,还是200次),降低了低电平的占空比,转速降低。

  60H+61H的和(高低电平输入总和)影响转速调整精度和速度,值越大,精度越高(摆动越小),转速调整越慢;相反,值越小,转速调整越快,但精度越低(摆动越大)。

  转速调整的速度和精度还可以通过每次转速调整时,60H(高电平输入次数)和61H(低电平输入次数)调整的幅度来调控。幅度越大,转速调整越快,但精度越低,幅度越小,精度越高,转速调整越慢。

  60H和61H中的数可以随便(为正即可)取,但在整个过程中,61H+60H的值一定为一个定值,这样才能确定改变的是占空比。


关键字:单片机  控制实验  直流电机  脉宽调制调速 引用地址:单片机与控制实验(3)——直流电机脉宽调制调速

上一篇:单片机与控制实验(2)——LED点阵显示屏
下一篇:单片机与控制实验(4)——步进电机原理及应用

推荐阅读最新更新时间:2024-03-16 15:24

STC89C51单片机对LCD显示的串口调试关照强度程序设计
最近在调试传感器的那块程序,这里总结一下自己的心得。 调试程序的方法 方法1:led显示法,在程序中调用这一句函数led = 0;可以知道程序运行到哪里,为什么会出错,到什么地方陷入了死循环。 方法二:串口打印法,串口打印法可以知道函数输出的东西是什么,程序中只需要使用串口中断就可以了,关于串口怎么样使用,我觉得等一下我需要总结一下最近编程的问题。 现在这里要好好总结一下串口调试法,天祥哥在他的书上总结了串口调试的方法,开始的时候虽然开了一下,了解了他是什么情况,会用串口之外,其他的什么都不懂,到现在才真正明白串口中断的真正含义是什么,串口中断可以打断单片机的执行,让单片机在执行主函数的时候去执行别的函数。 // BH
[单片机]
ADSP-BF533在低耗高速实时系统中的应用
   1 引言   当今信息技术与计算机技术的飞速发展。使得数字信号处理发展成为一门非常关键的技术。而数字信号处理器(DSP芯片)的出现为数字信号处理算法的实现提供了可能,同时,DSP器件性能的不断提高又极大地促进了数字信号处理技术的进一步发展。Blackfin系列DSP芯片是美国模拟器件公司(ADI)与Intel联合开发的体现高性能体系结构的新一代嵌入式定点处理器。Blackfin处理器在一个芯片和一个开发平台上融合了DSP信号处理、RISC控制处理和音视频处理功能,具有高速实时数据处理、极佳的代码密度、动态电源管理、极低的功耗、方便的开发使用等优点。   Blackfin系列DSP具有一个双MAC 300刎,(每秒600
[嵌入式]
sim900a程序,基于51单片机与sim900a相连接程序
  51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。   SIM900A模块是一款尺寸紧凑的GSM/GPRS模块,采用SMT封装,基于STE的单芯片案,采用ARM926EJ-S架构,性能强大,可以内置客户应用程序。可
[单片机]
c51单片机第二课笔记
1震荡周期:就是晶振震荡一次所用的时间。也叫做时钟周期 机器周期:单片机完成一次独立的操作需要的时间。是震荡周期的12倍。 指令周期:cpu完成一次完整的操作需要的所有时间,有单周期指令,双周期指令等。 2 用循环左移,循环右移指令 实现流水灯。 int temp; temp=0xfe; P1=temp; temp=_crol_(temp,1); 有关循环指令包含在intrins.h头文件中。 3 对蜂鸣器的操作,类似与对led的操作,对相应端口输出第电平。关于蜂鸣器的数据有待补充。 4 共阴极led显示器16进制编码表 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77
[单片机]
基于单片机的数字频率计设计
频率计是我们经常会用到的实验仪器之一,本实验要使用单片机和计数电路及液晶器件来设计一个宽频的频率计。 期望达到10Hz-1.1G范围的频率精确测量。 实验电路图(初步方案) 1) 计数及显示电路: 2)前置放大及分频电路: 设计思路 频率的测量实际上就是在1S时间内对信号进行计数,计数值就是信号频率。用单片机设计频率计通常采用两种办法,1)使用单片机自带的计数器对输入脉冲进行计数,或者测量信号的周期;2)单片机外部使用计数器对脉冲信号进行计数,计数值再由单片机读取。 由于单片机自带计数器输入时钟的频率通常只能是系统时钟频率的几分之一甚至几十分之一,因此采用单片机的计数器直接测量信号频率就受到了很大的限制。 本
[单片机]
基于<font color='red'>单片机</font>的数字频率计设计
【自学51单片机】7--LED点阵学习
1、LED点阵介绍 LED点阵由多个LED小灯构成,以8*8LED点阵介绍,实物图和内部原理图如下。 图7-2左侧8个引脚为内部LED小灯阳极,上侧8个引脚为阴极。 2、点亮LED点阵 2.1 原理 点亮LED点阵与点亮LED小灯原理相似,根据LED点阵电路图分析即可,详细见第三章。 2.2 点亮全部LED点阵程序 利用定时器中断和数码管动态显示原理,就不进行说明,详细见第六章 3、取模软件简单介绍 取模软件可以将LED点阵图形的数据转换为程序中的数据。取模软件中黑色为LED熄灭,值为1,白色为LED点亮,值为0。如下图绘制了一个心形。 下面来说明取模软件参数的选取。 取模方式:根据LED点阵结构原理图
[单片机]
【自学51<font color='red'>单片机</font>】7--LED点阵学习
基于89C51单片机的开关电源优化设计
引言          开关电源是利用现代电力电子技术控制功率开关管(MOSFET,IGBT)开通和关断的时间比率来稳定输出电压的一种新型稳压电源。从上世纪90年代以来开关电源相继进入各种电子、电器设备领域,计算机、程控交换机、通讯、电子检测设备电源、控制设备电源等都已广泛地使用了开关电源。利用单片机控制的开关电源,可使开关电源具备更加完善的功能,智能化进一步提高,便于实时监控。其功能主要包括对运行中的开关电源进行检测、自动显示电源状态;可以通过按键进行编程控制;可以进行故障自诊断,对电源功率部分实现自动监测;可以对电源进行过压、过流保护;可以对电池充放电进行实时控制。           开关电源的系统结构     
[电源管理]
基于89C51<font color='red'>单片机</font>的开关电源优化设计
AD574与8031单片机及前置电路的一种实用接口电路
  AD574是美国核拟器件公司Analog Devices) 生产的12 位逐次逼近型快速A/D 转换器。其转换35us,转换误差为土0.05%,是前我国应用广泛,价格适中的A/D转换器。其内部含三态电路,可直接与各种微处理器连接,且无须附加逻辑接口电路,便能与CMOS 及TTL 电平兼容。内部配置的高精度参考电压源和时钟电路,使它不需要任何外部电路和时钟信号,就能实现A/D转换功能,应用非常方便。   许多文献有关于AD574与8031单片机接口技术的介绍, 但其控制功能引线基本局限于单一的AD574与8031的连接。由于8031无内部程序存贮器, 其内部数据存贮器也有限, 因而8031构成的测控系统, 往往都需外扩存贮器
[单片机]
AD574与8031<font color='red'>单片机</font>及前置电路的一种实用接口电路
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved