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

2023-11-17

- 什么是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();//前进		
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机—使用PWM对直流电机调速 的相关文章

  • SpringBoot整合hibernate

    添加springboot依赖 先使用idea创建maven项目 创建过程可以参考下面的博客 http blog csdn net supervictim article details 53490046 创建完maven项目之后添加spri

随机推荐

  • 用例编号怎么规定_怎么看检测报告

    一 怎么看检测报告 1 无论是使用什么系统来检测论文 在检测完成之后都会出现有查看报告 下载报告的相关项目或者按钮 直接点击查看报告项就可以查看报告 点击下载报告项就会将检测报告用PDF的形式保存到本地 2 以知网的检测报告为例 在检测报告
  • (小白教程)anaconda安装配置及可能遇到的问题解决

    相信来搜索的都懂anaconda 的绝美优势 这里便不再赘述了 啥也不说 开干 第一步 下载并安装软件 https www anaconda com 选择适合你的版本 我这里是window10 以管理员身份运行 选择All Users 继续
  • APNS设置

    APNS设置 openssl x509 in aps development cer inform der out MobileCAPCert pem openssl pkcs12 nocerts out MobileCAPKey pem
  • 【javaScript面试题】2023前端最新版javaScript模块,高频24问

    博 主 初映CY的前说 前端领域 个人信条 想要变成得到 中间还有做到 本文核心 博主收集的关于javaScript的面试题 目录 一 2023javaScript面试题精选 1 js的数据类型 2 双等和三等的区别 3 js中布尔值为fa
  • css3选择器之:nth-child(n)和:nth-of-child(n)

    nth child n 和 nth of child n nth child n 选择器匹配属于其父元素的第 N 个子元素 不论元素的类型 通俗一点的用法就是 nth child n 表示谁的弟n个 比如li nth chidl 3 表示页
  • Llama 2: Open Foundation and Fine-Tuned Chat Models

    文章目录 TL DR Introduction 背景 本文方案 实现方式 预训练 预训练数据 训练细节 训练硬件支持 预训练碳足迹 微调 SFT SFT 训练细节 RLHF 人类偏好数据收集 奖励模型 迭代式微调 RLHF 拒绝采样 Rej
  • 触发器(删除操作)

    在删除xs时 把xscj中对应的记录删除 DELIMITER CREATE TRIGGER xs delete AFTER DELETE ON xs FOR EACH ROW BEGIN DELETE FROM xscj WHERE xh
  • 云效知识库 Thoughts,企业文档管理工具

    云效知识库 Thoughts 企业文档管理工具 云效知识库是一款企业 知识管理 工具 通过独立的知识库空间 结构化地组织在线协作文档 实现企业知识的积累和沉淀 促进知识的高度复用和流通 云效知识库是云效团队孵化的一个创新项目 从最早的构想到
  • git commit -m 'project initialized'报did not match any file known to git的错误的问题

    摘要 这两天需要将本地的代码和码云上的代码进行统一下 需将本地的代码上传到码云中 在使用git的时候报了错 实现过程 首先在控制台上输入命令行 查看本地的新的文件 git status 输入命令行 将新的文件新增到git的缓冲区 git a
  • 海量数据存储读后感

    海量数据存储系列读后感 读了淘宝的海量数据存储系列 感觉豁然开朗 见地提升了很多 现在简单用自己的话总结一下里边的 精髓 SQL与关系代数 第1 2章 第一 二章内容比较简单 第一章给了我们一个模型 他是一个三层结构 模型如下 用户API
  • Scratch和机器人编程有什么区别?

    Scratch编程和机器人编程的区别就是 Scratch是面向青少年的图形化简易编程软件 孩子们可以通过不同功能的指令方块组合 创作出交互式故事 动画 游戏 音乐 艺术和科学计算等作品 而机器人编程则是以机器人为载体 通过程序指令控制完成机
  • MySQL中的编码问题Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' for column '字段名' at row 1 问题的解决方法

    今天往mysql数据库中添加数据时出现了如标题的错误 因为刚刚把数据库版本从8 0换成了5 5 27版本 于是网上搜了一下答案 搜了很多修改了都没用 最后终于成功了之后总结了一下 一 修改mysql数据库的编码为uft8mb4 修改mysq
  • 特征工程介绍

    特征工程基础知识 文章目录 1 特征工程是什么 2 数据预处理 2 1 无量纲化 2 1 1 标准化 2 1 2 区间缩放法 2 1 3 归一化 2 2 特征二值化 2 3 独热编码 2 4 缺失值计算 3 特征选择 3 1 Filter
  • Python -- Numpy:添加一列

    np insert 指定位置添加一列 a np arange 12 reshsape 3 4 print a array 0 1 2 3 4 5 6 7 8 9 10 11 b np ones 3 print b array 1 1 1 n
  • IDEA远程调试

    1 概述 原理 本机和远程主机的两个 VM 之间使用 Debug 协议通过 Socket 通信 传递调试指令和调试信息 被调试程序的远程虚拟机 作为 Debug 服务端 监听 Debug 调试指令 jdwp是Java Debug Wire
  • 23062day4

    制作一个简易圆形时钟 头文件 ifndef WIDGET H define WIDGET H include
  • 大话水声通信技术---(BFSK仿真)

    在之前的理论篇中 笔者梳理了水声通信相关的理论知识体系 本次笔者给出了一套基于BFSK的水声通信系统 该系统已经在实际的硬件中得到了验证 通信声呐仿真BPSK方式 几点假设 1 基于射线声学理论 2 几何衰减按球面波传播衰减规律衰减 不考虑
  • python报错之paramiko.ssh_exception.SSHException: EOF during negotiation

    方案1 此方法引自https www cnblogs com lidq p 12030662 html 查找sftp server的位置 find name sftp server 然后查看ssh的配置文件 vim etc ssh sshd
  • matplotlib画二维分布图

    假设我们有一组二维数据 x y label 3 542485 1 977398 1 3 018896 2 556416 1 7 551510 1 580030 1 2 114999 0 004466 1 8 127113 1 274372
  • 51单片机—使用PWM对直流电机调速

    文章目录 什么是PWM PWM是怎么对直流电机进行调速的 通过定时器中断实现PWM调速 上代码 什么是PWM PWM 脉宽调制 是靠改变脉冲宽度来控制输出电压 通过改变周期来控制其输出频率 脉冲可以理解为是IO口的一次高低电平改变 PWM是