51单片机-PWM调速(直流电机,智能小车的电机调速)

这篇具有很好参考价值的文章主要介绍了51单片机-PWM调速(直流电机,智能小车的电机调速)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

这次来对PWM做一个总结

最近学习时,发现PWM控制在很多地方都会用到,比如使用PWM来控制电机的速度,使用PWM来生成想要的波形。

那么到底什么是PWM呢?


一、PWM

PWM即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效的获得所需要的模拟参量。

说白了就是通过控制高低电平的时间,来对输出的波形进行控制。

其中有几个重要的参数

  • 频率:频率等于周期频率除以1
  • 占空比:高电平在整个周期内所占的时间,即高电平和周期时间的比值
  • 精度:占空比变化的步距
    51单片机直流电机调速,51单片机,51单片机,单片机,stm32

二、产生PWM的方法

下方为江科大ppt教程ppt里的图就是通过定时器定时自增,设置一个比较值,然后通过判断计数器和比较值的大小,输出对应的高低电平

波形详解,就比如第一个周期内,小于比较值60的部分输出的是低电平,大于比较值60的部分输出高电平。两图的波形等效,PWM波形就这样产生了,控制不同的高低电平存在的时间,然后输出。
51单片机直流电机调速,51单片机,51单片机,单片机,stm32

使用定时器产生一个恒定的周期

这里没有限制使用什么定时器,当使用多个定时器的时候,一定要注意不同定时器中断和外部中断的优先级,因为如果不同定时器的中断优先级不相同,就有可能一个优先级较高的定时器中断打破了当前定时器产生的中断。使当前中断失效。下方为中断优先级以及使用C语言编程使用到的中断号
51单片机直流电机调速,51单片机,51单片机,单片机,stm32
例程序
定时器0产生恒定周期

#include <REGX52.H>

/**
  * @brief 定时器0初始化
  * @param  
  * @retval 
  */
void Timer0Init()   //100us  10ms  11.0592MHZ
{
	TMOD&=0xF0;  //高四位不变
	TMOD|=0x01;  //设置定时器模式1 以及设置为定时方式 0
	
	TL0 = 0xA4;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	
	TF0=0;  //定时器0溢出标志位
	TR0=1;  //定时器0运行控制位
	
	TF0=1;	//设置外部中断
	ET0=1;
	EA=1;
	PT0=0;
}

//中断函数
/*void Timer0_Rourine() interrupt 1
{
	static unsigned int T0count;
		TL0 = 0xA4;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	T0count++;
	if(T0count>=1000)
	{
		T0count=0;
		P2_0=~P2_0;
	}
}*/

中断服务子程序里设置比较值

和比较值相比较大小,可以自己设置究竟是大于比较值,输出高电平还是低电平,同时小于比较值也同理

void Timer0_Rourine() interrupt 1   //每隔100us进来一次
{
	TL0 = 0xA4;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	Counter++;
	if(Counter>=100){Counter=0;}
	if(Counter<Compare)  //小于比较值 输出高电平
	{
		out1=1;  //out代表输出高电平对应的管脚
	}
	else
	{
		out=0;
	}

三、实验

使用PWM对直流电机调速

通过按键控制直流电机的速度,使速度在数码管上显示,通过PWM调速
主程序
定时器0程序,和上方定时器0,程序相同

#include <REGX52.H>
#include "Delay.h"
#include "Key.h"
#include "Timer0.h"
#include "NixieTube.h"

sbit motor=P1^0;   //电机端口
unsigned char Counter,Compare;   //counter 0-100 指的是频率 comapre 指的是占空比 高电平时间   Compare 最大值为100us
unsigned char KeyNum,Speed;
void main()
{
	Timer0Init();
	Compare=5;
	while(1)
	{
		KeyNum=Key();
		if(KeyNum==1)
		{
			Speed++;
			if(Speed>3){Speed=0;}
			if(Speed==0){Compare=0;}   //compare 指的就是占空比 
			if(Speed==1){Compare=50;}   //5%的占空比
			if(Speed==2){Compare=75;}
			if(Speed==3){Compare=100;}
		}
		NixieTube(8,Speed);
	}
}

void Timer0_Rourine() interrupt 1   //每隔100us进来一次
{
	TL0 = 0xA4;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	Counter++;
	if(Counter>=100){Counter=0;}
	if(Counter<Compare)
	{
		motor=1;
	}
	else
	{
		motor=0;
	}
}

使用PWM对智能小车的电机调速

直接上源程序啦
在做智能小车的时候肯定大概率会用到,如果你使用PID算法算我没说。
留个小坑,过段时间会把做智能小车遇到问题如何解决的文章分享给大家。
集成了红外循迹、红外避障、红外遥控功能
这个模块可以直接使用


/********************小车PWM输出****************/
/**
  * @brief 小车PWM输出  装载PWM输出,如果设置全局变量pwm_left,pwm_right分别配置左右输出高电平时间
  * @param  无
  * @retval 无
  */
void LoadPWM(void)
{
    if(pwm_left > PWM_HIGH_MAX)		pwm_left = PWM_HIGH_MAX;	//如果左输出写入大于最大占空比数据,则强制为最大占空比。
    if(pwm_left < PWM_HIGH_MIN)		pwm_left = PWM_HIGH_MIN;	//如果左输出写入小于最小占空比数据,则强制为最小占空比。
    if(pwm_right > PWM_HIGH_MAX)	pwm_right = PWM_HIGH_MAX;	//如果右输出写入大于最大占空比数据,则强制为最大占空比。
    if(pwm_right < PWM_HIGH_MIN)	pwm_right = PWM_HIGH_MIN;	//如果右输出写入小于最小占空比数据,则强制为最小占空比。
    if(pwm_val_left<=pwm_left)		Left_moto_pwm = 1;  //装载左PWM输出高电平时间
    else Left_moto_pwm = 0; 						    //装载左PWM输出低电平时间
    if(pwm_val_left>=PWM_DUTY)		pwm_val_left = 0;	//如果左对比值大于等于最大占空比数据,则为零

    if(pwm_val_right<=pwm_right)	Right_moto_pwm = 1; //装载右PWM输出高电平时间
    else Right_moto_pwm = 0; 							//装载右PWM输出低电平时间
    if(pwm_val_right>=PWM_DUTY)		pwm_val_right = 0;	//如果右对比值大于等于最大占空比数据,则为零
}

void Timer1_Routine() interrupt 3
{
    pwm_val_left++;
    pwm_val_right++;
    LoadPWM();//装载PWM输出
}

总结

说白了,PWM就是设置一个恒定的周期内,通过设置计时数和设置的比较值的大小,是在计时数比比较值小置高低电平,则要依据自己的需求来进行设置

这个PWM起初还不知道是啥,看了江科大第一遍视频没懂,第二遍懂了一点点,后面查看了好几个资料,摸着摸着不知道怎么就明白了个大概。

初始接触是应为江科大的视频里,一步一步跟下来

再接触是自己制作的智能小车的速度一直慢不下来,所以使用PWM对小车的速度进行控制

加油加油!

希望本文对你有帮助。

最后行文仓促,还请谅解,欢迎指错。文章来源地址https://www.toymoban.com/news/detail-785466.html

到了这里,关于51单片机-PWM调速(直流电机,智能小车的电机调速)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单片机控制PWM的直流电机调速系统的设计

    单片机控制PWM的直流电机调速系统的设计  摘 要:在国民生产中,随着现代技术的发展,电力电子技术已得到了全面的发展,其技术已应用到各个领域。在各类机电系统中,由于直流电机具有良好的启动、制动和调速性能,直流电机调速系统已广泛运用于工业、航天领域的各个

    2024年02月04日
    浏览(44)
  • 【Proteus仿真】【51单片机】直流电机PID调速系统设计

    本项目使用Proteus8仿真51单片机控制器,使用L298N电机模块、数码管模块、按键模块、LED指示灯模块等。 主要功能: 系统运行后,可通过按键K4启动系统,数码管显示实际速度和目标速度,再次按下K4键停止系统;按键K1加速、按键K2减速,按键K3换向;速度范围为0-150;通过P

    2024年02月11日
    浏览(90)
  • 基于STM32单片机的直流电机PWM调速(数码管显示)(Proteus仿真+程序)

          由 STM32单片机+数码管显示模块+键盘模块+L298N电机驱动模块+直流电机 1、采用STM32F103单片机为主控制器 2、四个按键,分别为启动/暂停、方向切换、加速、减速功能 3、数码管显示PWM占空比和电机转动方向(0正转,1反转) 注意:proteus8.11版本才能打开   24、基于STM32单

    2024年02月11日
    浏览(62)
  • 【51单片机】直流电机驱动(PWM)(江科大)

    · 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 · 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成 · 除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等 电机的驱动无法

    2024年02月20日
    浏览(49)
  • [proteus]STM32F103单片机直流电机PID算法PWM波电机调速正反转Proteus仿真

    1、实现功能: (1)、基于STM32F103单片机PID算法PWM控制直流电机正反转调速,LCD1602显示转速等。可通过“加速”、“减速”按键修改“目标转速”并实时测量“实际转速”送到LCD1602上显示。 (2)、“启动”按键控制电机启动,默认启动电机是正转(示波器上的黄色PWM波)。 (3)、“

    2024年02月06日
    浏览(50)
  • 基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

    仿真图proteus 7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0031 基于51单片机的PWM控制直流电机设计 1.设计要求 采用51单片机作为核心控制器,控制直流电机的正转,反转,制动,停止。 2.功能要求 1)数码管显示当前转动方向和当前的PWM占空比0~100%。 2)电机

    2023年04月25日
    浏览(56)
  • 基于单片机串口控制直流电机调速

    一、系统方案 (2)本设计采用STC89C5单片机作为主控器,串口控制直流电机调速,串口助手发送1-8,改变电机速度,数码管显示对应速度。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 TMOD=0x21;//定时器0工作方式1 ET1=0; SM0=0; SM1=1; REN=1; EA=1; ES=1; 2、数码管

    2024年02月12日
    浏览(50)
  • 单片机学习笔记---LED呼吸灯&直流电机调速

    目录 LED呼吸灯 直流电机调速 模型结构 波形 定时器初始化函数 中断函数 主程序 上一节讲了电机的工作原理,这一节开始代码演示! 我们上一篇说 Ton的时间长Toff时间短电机会快,Ton的时间短Toff时间长电机会慢 并且我们还要保证无论Ton和Toff哪个时间比较长, Ts都得是固定

    2024年02月19日
    浏览(36)
  • 单片机学习笔记---直流电机驱动(PWM)

    直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转子)和换向器组成 除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等 因为电机

    2024年02月21日
    浏览(50)
  • 51单片机-直流电机学习

    51单片机采用的是5V的直流电机 轴长:8mm 轴径:2mm 电压:1-6V 参考电流:0.35-0.4A 3V 转速:17000-18000 转每分钟 直流电机的结构应由 定子 和 转子 两大部分组成。 直流电机运行时静止不动的 部分称为定子 定子的主要作用是产生磁场,由机座、主磁极、 换向极、 端盖、 轴承和

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包