51单片机—使用PWM对直流电机调速

发布者:美丽花朵最新更新时间:2021-10-19 来源: eefocus关键字:51单片机  PWM  直流电机调速 手机看文章 扫描二维码
随时随地手机看文章

- 什么是PWM

PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率。


(脉冲可以理解为是IO口的一次高低电平改变)


- PWM是怎么对直流电机进行调速的

使用PWM对电极调速时,是靠改变占空比(改变脉冲宽度)来控制输出电压的,电压较小电机转速就会下降;再通过改变周期(脉冲的周期)来控制其输出频率,脉冲频率对电机的转速有着决定性作用,脉冲频率越高连续性就越好。


我们一般时通过改变占空比来改变电机转速的。


(占空比:占空比是指一个脉冲循环内,通电(高电平)时间相对于总时间所占的比例。)


- 通过定时器中断实现PWM调速

因为51单片机不附带PWM硬件电路,所以我们一般通过软件模拟PWM,具体是利用定时器中断来实现PWM调速。


改变脉冲宽度:此处利用定时器0的工作方式2(即8位自动装填 TMOD=0X02),一次计时溢出就代表一次脉冲,所以占空比的改变(脉冲宽度的改变是在每一次脉冲改变的)就在中断函数内进行了。


主要是在中断函数内进行占空比设置,如下


void timer0() interrupt 1

{

pwm_t++;

if(pwm_t == 255) //将一个周期分成256份

pwm_t = left_en = right_en = 0;

if(pwm_left_val == pwm_t)//达到pwm_left_val后开启左使能开关

left_en = 1;

if(pwm_right_val == pwm_t)//达到pwm_left_val后开启右使能开关

right_en = 1;  

}


改变周期:那周期的改变是依据什么呢?当然是控制溢出时间了(即控制TH0和TL0的初始值)脉冲周期=定时器溢出时间x占空比的总份数。


当设置周期为0.01s、占空比总份数为256时,可以根据定时器溢出时间算出TH0和TL0的初始值为220。


- 上代码

代码经过本人亲测,可以实现


#include

sbit left_en=P1^4;

sbit right_en=P1^5;

sbit left_advance=P1^3;

sbit left_back=P1^2;

sbit right_advance=P1^6;

sbit right_back=P1^7;

unsigned char pwm_left_val = 200;//左电机占空比值 取值范围0-170,0最快

unsigned char pwm_right_val = 0;//右电机占空比值取值范围0-170 ,0最快

unsigned char pwm_t=0;//周期计数变量

/*小车前进*/

void forward()

{

left_advance=1; //左电机前进

left_back=0;

right_advance=1; //右电机前进

right_back=0;

}


//定时器0中断

void timer0() interrupt 1

{

pwm_t++;

if(pwm_t == 255) //将一个周期分成256份

pwm_t = left_en = right_en = 0;

if(pwm_left_val == pwm_t)//达到pwm_left_val后开启左使能开关

left_en = 1;

if(pwm_right_val == pwm_t)//达到pwm_left_val后开启右使能开关

right_en = 1;  

}

void main()

{

TMOD |= 0x02;//8位自动重装模块

TH0 = 220;

TL0 = 220;//11.0592M晶振下占空比最大比值是256,输出100HZ

TR0 = 1;//启动定时器0

ET0 = 1;//允许定时器0中断

EA = 1;//总中断允许

while(1)

{

forward();//前进

}

}

关键字:51单片机  PWM  直流电机调速 引用地址:51单片机—使用PWM对直流电机调速

上一篇:51单片机—LCD1602显示模块
下一篇:关于51单片机中的几种通信模式与总结

推荐阅读最新更新时间:2024-11-09 15:31

采用AT89C51单片机和温度变送器实现炉温控制系统的设计
1、引 言 电加热炉随着科学技术的发展和工业生产水平的提高,已经在冶金、化工、机械等各类工业控制中得到了广泛应用,并且在国民经济中占有举足轻重的地位。对于这样一个具有非线性、大滞后、大惯性、时变性、升温单向性等特点的控制对象,很难用数学方法建立精确的数学模型,因此用传统的控制理论和方法很难达到好的控制效果。 单片机以其高可靠性、高性能价格比、控制方便简单和灵活性大等优点,在工业控制系统、智能化仪器仪表等诸多领域得到广泛应用。采用单片机进行炉温控制,可以提高控制质量和自动化水平。 2、单片机炉温控制系统结构 本系统的单片机炉温控制系统结构主要由单片机控制器、可控硅输出部分、热电偶传感器、温度变送器以及被控对象组成。如图1所示
[单片机]
采用AT89C<font color='red'>51单片机</font>和温度变送器实现炉温控制系统的设计
51单片机对智能防火防盗报警系统的设计
0 引言 现如今在学校的寝室里,学生贵重物品被盗、由于学生过失而引起着火等事故时有发生,这些都是一直以来困扰着学生、学工以及学校保卫处的“大问题”。传统的防范措施存在很大的弊端,比如当事故发生时,防护铁门、铁栏杆就会成为主人逃生的最大障碍。而采用智能防火防盗报警系统,便能很好地解决此类问题了。但是市场上防火防盗系统价格对大学生来讲过高,本系统便是针对大学宿舍,从低成本的角度来设计制作的。 1 系统组成及工作原理 本系统通过一个监控室和两个宿舍来模拟,通过RS 485总线来实现通信。考虑到现实中监控室要能监控整栋宿舍楼,因此采用功能强大的ARM7芯片LPC2103作为主机控制芯片,从机采用价格低廉的51系列单片机作为控制芯片。宿
[单片机]
<font color='red'>51单片机</font>对智能防火防盗报警系统的设计
51单片机使用C语言点亮闪烁LED灯
导语 下面是点亮51单片机使用C语言闪烁LED灯的的一段代码,也是我们迈入C51的第一步。我们将从头开始,一步步讲解下面的程序。 #include #define uchar unsigned char #define uintunsigned int sbit LED= P1^0; void main() { LED=0; while(1) { LED=0; delay(1000); LED=1; delay(1000); } } void delay(uchar ms) { uint x=0, y=0; for(x=xms;x =0;x--) for(y=110;y =0;y--); } .C to .Hex 在从编写
[单片机]
Proteus8.9 仿真STM32407ZGT6系列009_PWM多路可调占空比输出
一,打开文件(可以随文下载放置在文档中打开)。(如下图1所示) 图1 二,调整虚拟器件,另存工程文件。(如下图2,3,4所示) 图2 图3 图4 三,点击Source Code标签。(如下图5所示) 图5 四,编辑main.c,timer.c,timer.h, key.c,key.h, led.c,led.h 代码如Proteus8.9 仿真STM32407ZGT6系列001(如下图6所示) 图6 五,Main.c 代码: /* Main.c file generated by New Project wizard * Author: Ziegler Yin * Created: 周四 一月
[单片机]
Proteus8.9 仿真STM32407ZGT6系列009_<font color='red'>PWM</font>多路可调占空比输出
基于8051单片机DPTR扩展设计介绍
单片机的出现是计算机技术发展史上的一个里程碑,它使计算机从海量数值计算进入到控制领域。在单片机中,以8051系列最为经典,至今仍是最普及、广泛使用的8位MCU架构。业界许多技术人员在其基础上不断进行性能扩展,使得8051系列芯片不断完善,从而形成一个庞大的体系。在传统的8051系列单片机中,设置了一组双字节寄存器(数据指针DPTR),用于访问外接的64 KB数据存储器和I/O接口电路;但在现今的8051单片机应用中,特别是在嵌入式系统中,往往涉及大规模的数据转移操作,而传统8051的一组数据指针使用起来则显得捉襟见肘,因此若在8051设计中将数据指针设计为两组或多组,则在执行大规模数据转移操作时会相当简便、迅速。在这种背景下,本文
[单片机]
基于80<font color='red'>51单片机</font>DPTR扩展设计介绍
MCS-51单片机最小系统的组成部分及电路图介绍
  MCS-51单片机概述   MCS-51单片机是一种集成的电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。   51系列单片机的特点   -8位cpu   -片内带振荡器,频率范围为1.2MHz~12MHz   -片内带128B的数据存储器   -片内带4KB的程序存储器   -程序存储器的寻址空间为64KB   -片外数据存储器的寻址空间为64KB   -128个用户位寻址空间   -21个字节特殊功
[单片机]
MCS-<font color='red'>51单片机</font>最小系统的组成部分及电路图介绍
80C51单片机内部定时器和计数器的结构及原理解析
80C51单片机内部设有两个16位的可编程定时器/计数器。可编程的意思是指其功能(如工作方式、定时时间、量程、启动方式等)均可由指令来确定和改变。在定时器/计数器中除了有两个16位的计数器之外,还有两个特殊功能寄存器(控制寄存器和方式寄存器)。 定时器/计数器的结构: 图片1 从上面定时器/计数器的结构图中我们可以看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1构成。其访问地址依次为8AH-8DH。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过
[单片机]
80C<font color='red'>51单片机</font>内部定时器和计数器的结构及原理解析
51单片机字符串口通信为什么乱码?终于找到原因了
被这个问题卡了3天,代码很简单就是乱码出问题,烦恼! 后来查资料找到原因,晶振12MHz和11.0592Hz的问题。 如果你用的是12Mhz的单片机,定时器初值TH1一般要设置到E6(2400bps)、F3(4800bps)。 对应的在上位机配置UART串口时,选取2400 4800bps。如果试了不行,那就换更低的1200bps。 修改前 修改后 做了半天才发现我的晶振是11.0592Mhz,为啥对应的开发板视频讲的是12Mhz。 以4800bps为例,TH1=TL1=0xF4,SMOD=1,波特率翻倍=2*2400bps。这样就不会乱码了 ------------------------------
[单片机]
<font color='red'>51单片机</font>字符串口通信为什么乱码?终于找到原因了
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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