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 <reg52.h>
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工程框架
目录 1)功能概述 2)引脚连接 3)框架介绍 4)模块说明 5)复用规则 6)工程链接 1)功能概述 名称:独立按键控制直流电机调速 内容:对应的电机接口需用杜邦线连接到uln2003电机控制端; ...
- 玩转X-CTR100 l STM32F4 l TB6612直流电机调速控制
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 本文介绍X-CTR100控制器的直流调速电机控制,X ...
- 51单片机 | 模拟PWM调制控制实验
———————————————————————————————————————————— PWM(脉冲宽度调制) 对模拟信号电平进行数字编码的方法 - - - - - - - - - - - - - ...
- 直流电机PWM调速系统中控制电压非线性研究_控制元件_工业自动化控制_文章
直流电机PWM调速系统中控制电压非线性研究_控制元件_工业自动化控制_文章_e-works数字化企业网 http://articles.e-works.net.cn/Component/Article ...
- [问题解决]不使用PWM调速系统,彻底解决一个L298N带动两个电机却转速不同的问题
问题描述:由单片机的VCC引脚供电,使用L298N控制两个电机,发现左右两个轮子的转速老是不一样,更多的情况是左轮转速高(左轮电机接OUT1和OUT2),右轮转速低(右轮电机接OUT3和OUT4)甚至 ...
- 用STM32玩L298N(正反转、调速)
目录 用STM32玩L298N(正反转.调速) 控制直流电机正反转 使用PWM调速 用STM32玩L298N(正反转.调速) 开发板:STM32F103ZET6(正点原子F103核心板)/STM32F ...
- [51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY
目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动( ...
- PLECS_晶闸管调速系统_9w
3. 直流电机开环调压调速系统模型搭建 (1)电路图 (2)仿真 当 α = pi / 2.7 的时候,直流电机的稳定转速大约保持很低的速度. 随着α的减少,直流电机的速度逐渐增大.当α = pi / ...
- 基于51单片机个LCD1602的万年历程序
小白 第一次跟新博客 基于51单片机和LCD1602的万年历程序 可实现走时和调时功能 有简单的1602菜单制作 欢迎大家交流 LCD1602和51单片机的连接方法 RS = P3^5; //数据/命 ...
随机推荐
- linux 之管道命令与重定向
一.Linux重定向 重定向能够实现Linux命令的输入输出与文件之间重定向,以及实现将多个命令组合起来实现更加强大的命令.这部分涉及到的比较多的命令主要有: 涉及到的比较多的命令主要有: cat:连 ...
- 根据使用者反馈,对开源项目 go-gin-api 新增两个功能
目录 前言 接口返回的错误信息支持中英文 代码位置 使用方式 错误信息自定义 参数验证的错误信息支持中英文 代码位置 使用方式 错误信息语言包 示例 小结 推荐阅读 前言 根据使用者的反馈,对开源项目 ...
- WPF教程十五:数据模板的使用(重发)
数据模板 数据模板是一段如何显示绑定在VM对象的XAML代码.数据模板可以包含任意元素的组合,基于Binding来显示不同的信息. 在实际的开发中数据模板的应用场景很多,同样一个控件可以根据不同的绑定 ...
- 建立属于自己的scrapy crawl模板
本人安装PYTHON3.7安装位置:D:\Python\Python37模板位置:D:\Python\Python37\Lib\site-packages\scrapy\templates\spide ...
- python 图像读取与显示
import aircv as ac import matplotlib.pyplot as plt '''imshow()函数格式为: matplotlib.pyplot.imshow(X, cma ...
- 【012】JavaSE面试题(十二):多线程(2)
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [012] - JavaSE面试题(十二):多线程(2) 第1问:多线程的创建方式? 方式一:继承 ...
- 微信小程序云开发-数据库表创建和操作
一.新建云数据库 进入[云开发]界面,点击[数据库]>添加>创建集合>确定. 二.向数据库中添加数据 选中[数据库],点击[添加记录],向数据库中添加记录 添加[字段]和[值],并选 ...
- python 连接远程服务器,修改时间
import paramiko from datetime import date, timedelta def set_time(hostname): ssh = paramiko.SSHClien ...
- 关于GPIO口的一些概念性问题
一.什么是GPIO? GPIO的英文全称是General-Purpose IO ports,也就是通用输入输出口. 在嵌入式系统中,经常需要控制许多结构简单的外部设备或者电路,这些设备有的需要通过CP ...
- Pelles C编译时出现的“POLINK: fatal error: 拒绝访问”问题的一种可能成因
在使用PellesC编译程序时,第一遍能正常编译执行,第二遍就无法编译,出现以下问题提示: Building NEWprogram2.exe. POLINK: fatal error: 拒绝访问. * ...