博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51单片机—使用PWM对直流电机调速
阅读量:3948 次
发布时间:2019-05-24

本文共 1626 字,大约阅读时间需要 5 分钟。

文章目录

- 什么是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();//前进 }}

转载地址:http://bawzi.baihongyu.com/

你可能感兴趣的文章
Android开发——微信Android架构历史
查看>>
Android开发——ListView的复用机制源码解析
查看>>
Android开发——WebView轻量缓存优化
查看>>
Android开发——Android7.0的适配注意点小结
查看>>
Android开发——架构组件LiveData源码解析
查看>>
IDEA常用快捷键整理
查看>>
【Vue】两个元素同一行显示
查看>>
XXL-Job使用
查看>>
如何在SwaggerAPI中添加统一授权认证
查看>>
多线程
查看>>
【Linux】Centos7 常用命令
查看>>
【Redis】Centos7下安装Redis
查看>>
【Redis】Centos7下搭建Redis集群
查看>>
【Redis】Centos7下搭建Redis集群——哨兵模式
查看>>
【Linux】本地ping不同VM虚拟机
查看>>
【SpringCloud】Hystrix
查看>>
乐观锁、悲观锁、公平锁、可重入锁
查看>>
快速阅读——《认知篇》
查看>>
一本书的学习
查看>>
如何画思维导图?
查看>>