【51单片机学习】PWM电机调速

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

(一)51单片机需要用到的寄存器

中断允许寄存器,详情可以看STC51单片机芯片手册第160页
TMOD、TCON详情可以看STC51单片机芯片手册第187页
51单片机中的定时器有三个,(C52比C51多了一个定时器3,但这些都统称为51单片机)
本次以Timer0为例进行介绍

定时器的作用:

1:用于计时系统,可实现软件计时,或者使程序每隔一段固定的时间完成一项操作

2:替代长时间delay,提高CPU的运行效率和处理速度
因为delay延时函数会占用代码的运行空间、影响代码运行速度

通过查看芯片手册我们知道Timer0有四种工作模式,通过配置寄存器TMOD来选择模式

  • 模式0:13位定时器/计数器

    模式1:16位定时器/计数器

    模式2:8位自动重装模式

    模式3;两个8位计数器

而寄存器TCON作用是控制定时器的启、停,标志定时器溢出和中断情况

TCON(可位寻址)用于设置定时器的控制状态
TMOD(不可位寻址)用于设置定时器的模式

这两个寄存器都分别有8位,每一位都有相应的功能

【51单片机学习】PWM电机调速
定时器0的中断触发方式,是由寄存器中TCON中的第六位TF0控制。当定时器计数溢出时,就会给TF0一个标志位,单片机检测到这个标志位就会触发一次定时器中断,执行中断函数,执行完之后就会重新给标志位清零

对于51单片机定时器的详细介绍跳转连接
介绍TMOD和TCON的博客

(二)PWM波的产生及调速原理

【51单片机学习】PWM电机调速

了解PWM可以点击此处
通过调节PMW的占空比来实现对电机的速度控制,PWM的周期非常的小、其周期信号从宏观来看、电压与时间所围成面积等效于一个正弦信号,因此也可以用PWM来制作呼吸灯。

(三)电机调速的实现

51单片机的定时器每1us计数值增加1

TH=(65536-time/(12/ft))/256
其中,time就是要延时的时间(单位:us),ft是晶振频率。这个式子又可以简化成

TH=(65536-time*ft/12)/256

TL=(65536-time*ft/12)%256

首先初始化定时器,这里选择51单片机的Timer0定时器
51定时器的计数值是分成高四位和低四位分别存放在寄存器THTL当中,因此需要分别设置TH0TL0的值
特别注意
TMOD寄存器是不可位寻址的(即不能对TMOD的中的8位单独赋值),只能一次性给8位全部赋值。


void Timer0_Init()//这里以定时器0为例
{
								/*
								  TMOD的低四位控制定时器0
								  0位:M0
								  1位:M1
								  2位:C/T:置0为定时器模式,置1为计数器模式
								  3位:GATE
								*/
    /* 设置定时器模式1,计数模式(16位定时器,最大值65535)*/ 	
    TMOD &=~0xFF;//所有位全部置0
    TMOD |=0x01;//高四位保持不变,低0位置1  
    
   /*设置定时器0.01ms中断一次*/         
	TH0 = 0XFF;//定时器0高位的初始值;(65536-10)/256
	TL0 = 0XF7;//定时器0低位的初始值;(65536-10)%256
	
	EA = 1;//使能所有中断中断
	
	ET0 = 1;//使能定时器0中断
	TR0 = 1;//允许定时器0开始从1开始计数,启动定时器
}

现在已经初始化好了51单片机定时器0,现在开始设置定时器中断函数
51单片机中具有一种特性,每次进入定时器中断都会将之前在初始化定时器函数中设置的初始值清0,所以每次进入定时器中断都需要在中断函数中重新赋给定时器初始值

uint Counter,Compare;//定义两个变量,Counter用于计数(即每进入一次中断Counter+1)
                     //Compare用于设置PWM波占空比
void Timer0_Routine() interrupt 1
{
       TR0=0;		//赋初值时,关闭定时器
       TH0=0xff;	//(65536-10)/256;//赋初值定时
       TL0=0xf7;	//(65536-10)%256;//0.01ms
       
       Counter++;
				 if(Counter>100) 
				 {
					 Counter=0;	//1khz,每触发一次Counter+1,每到加到100清零
					            //所以一个pwm周期时间为100x0.01ms=1ms
				 }
       TR0=1;		//打开定时器
}

现在定时器部分已经配置好了,现在开始配置一下电机,直流电机有两个接口IN1IN2(这里使用TT马达为例)
其中一个接口给高电平另一个给低电平就能实现电机旋转。

/*
   Compare为设置电机PWM的占空比
   direction设置电机的正转和反转
*/
void dianji(uchar Compare,uchar direction)      //定义一个电机
{     /*确保占空比在0%-100%之间*/
		if(Compare>100)
		{
			Compare=100;
		}
			
		if(Compare<0)
		{
			Compare=0;
		}
		/*确定电机的旋转方向*/
					switch(direction)	    //case 0正转 case 1反转
					{
						case 0:
							{
								 if(Compare>Counter) //将设定的占空比和计数值进行比较
								 {IN1=1;IN2=0;}
								 else
								 {IN1=0;IN2=0;}
							}
					  break;
							
					  case 1:
								{
								 if(Compare>Counter)
								 {IN1=0;IN2=1;}
								 else
								 {IN1=0;IN2=0;}
								}
					   break;
				 }
}

这些程序只是简单的调速,要制作出一辆简易循迹小车还需要学习更多东西文章来源地址https://www.toymoban.com/news/detail-416986.html

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

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

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

相关文章

  • 基于51单片机的电机(L298芯片,PWM调速,可加速、减速、正转、反转)

            电机是我们日常生活中比较常用的一个工具,我们经常需要使用电机来转动和拖动,完成一些任务。本次设计便用基于51单片机完成的电机转动与调速,使得电机可以正常启停、加速、减速以及正反转。          文章末尾提供资源免费下载,包括proteus仿真文件

    2024年02月06日
    浏览(52)
  • 【【51单片机直流电机调速】】

    PWM的生成方法 先用户设定一个比较值,然后计数器定时自增。 当计数器比较值,输出0 当计数器比较值,输出1

    2024年02月15日
    浏览(50)
  • 单片机控制PWM的直流电机调速系统的设计

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

    2024年02月04日
    浏览(44)
  • 通过51单片机实现直流电机调速

    随着各种工业生产设备和机械设备的广泛使用,直流电机调速技术的研究和应用越来越受到人们的重视,具有广泛的应用前景。本项目通过51单片机实现直流电机调速功能,为实际工程应用提供一个可靠和有效的调速方案。 如果需要下载项目工程,可以去这里: https://blog.c

    2024年02月14日
    浏览(48)
  • 【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日
    浏览(63)
  • [proteus]STM32F103单片机直流电机PID算法PWM波电机调速正反转Proteus仿真

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

    2024年02月06日
    浏览(50)
  • 104、基于51单片机智能风扇pwm调速红外遥控无线遥控风扇温控风扇系统设计

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、Protues仿真 六、流程图 七、程序源码 八、资料包括 随着气温的逐渐上升,风扇的需求量也逐渐扩大。传统风扇不能根据外界温度的变化对风扇转速快慢进行

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

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

    2024年02月20日
    浏览(50)
  • 单片机学习笔记---红外遥控&红外遥控电机调速(完结篇)

    目录 低电平触发中断和下降沿触发中断的区别 红外遥控 Int0.c Int.h Timer0.c Timer0.h IR.c IR.h main.c  红外遥控电机调速 Timer1.c Timer.h Motor.c Motor.h main.c 上一节讲了红外发送和接收的工作原理,这一节开始代码演示! 提前说明,本节代码演示中会涉及定时器和中断系统! 如果不懂定

    2024年02月21日
    浏览(50)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包