小车PWM调速-左右轮差速转弯

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

小车PWM调速-左右轮差速转弯

之前写的左转和右转函数都是一个轮子停止,另一个轮子转动,才实现了转弯效果,那差速就是,两个轮子都转动,只不过一个轮子快,一个轮子慢,这样就实现了较平滑的转弯

左转:右轮快,左轮慢

右转:右轮慢,左轮快

程序

程序文件

1.main.c:调用定时器0和定时器1初始化函数,while循环内隔一段时间改变左右轮的速度,赋不同的值实现差速转弯

2.Motor.c:小车前进、后退、左转、右转和停止的函数

3.Delay.c:延时函数

4.Timer.c:定时器0和定时器1初始化函数,定时器0中断处理函数PWM控制左轮前进,定时器1中断处理函数PWM控制右轮前进

pwm控制小车转弯,# 智能小车,单片机,c语言,嵌入式硬件,学习,智能小车

1.拿之前的小车PWM调速-写死的代码进修修改,因为要分别控制两个轮子,两个轮子的速度要不一样,所以要往Motor.c电机驱动头文件中增加单独控制左右轮的函数

其他前进后退等函数不变,只是增加下面的函数即可

/**
  * @brief 控制小车左轮前进
  * @param 无
  * @retval无
  */
void GoForwardLeft()
{	
	leftA = 0;
	leftB = 1;
}

/**
  * @brief 控制小车左轮停止
  * @param 无
  * @retval无
  */
void StopLeft()
{	
	leftA = 0;
	leftB = 0;
}

/**
  * @brief控制小车右轮前进
  * @param无
  * @retval无
  */
void GoForwardRight()
{
	rightA = 0;
	rightB = 1;
}

/**
  * @brief控制小车右轮停止
  * @param无
  * @retval无
  */
void StopRight()
{
	rightA = 0;
	rightB = 0;
}

2.因为之前的代码已经初始化了定时器0,用作两个轮子的PWM调速,所以这里需要再加入定时器1,定时器0用于左轮的PWM控制,定时器1用于右轮的PWM控制,在各自的中断处理函数中,定时器0中断调用左轮前进和停止,定时器1中断调用右轮前进和停止

#include <REGX52.H>
#include "Motor.h"
#include "Delay.h"

unsigned char CountLeft;
unsigned char SpeedLeft;

unsigned char CountRight;
unsigned char SpeedRight;

/**
  * @brief 定时器0初始化函数,左轮PWM控制
  * @param 无
  * @retval 无
  */
void Timer0Init(void)		//0.5毫秒@11.0592MHz
{
	TMOD &= 0xF0;
	TMOD |= 0x01;	//设置定时器模式
	TL0 = 0x33;		//设置定时初值
	TH0 = 0xFE;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	EA = 1;			//开启总中断
	ET0 = 1;		//开启定时器0中断
}

//Timer0中断处理函数,每隔0.5毫秒进入一次中断
void Timer0_Rountine() interrupt 1
{
	CountLeft++;
	TL0 = 0x33;
	TH0 = 0xFE;
	if(CountLeft < SpeedLeft)
	{
		//左轮前进
		GoForwardLeft();
	}
	else
	{
		//左轮停止
		StopLeft();
	}
	if(CountLeft == 40)	//20ms
	{
		CountLeft = 0;
	}
}



/**
  * @brief 定时器1初始化,右轮PWM调速
  * @param 无
  * @retval无
  */
void Timer1Init(void)		//0.5毫秒@11.0592MHz
{
	TMOD &= 0x0F;
	TMOD |= 0x10;	//设置定时器模式
	TL1 = 0x33;		//设置定时初值
	TH1 = 0xFE;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;		//定时器1开始计时
	EA = 1;			//开启总中断
	ET1 = 1;		//开启定时器1中断
}


//Timer1中断处理函数,每隔0.5毫秒进入一次中断
void Timer1_Rountine() interrupt 3
{
	CountRight++;
	TL1 = 0x33;
	TH1 = 0xFE;
	if(CountRight < SpeedRight)
	{
		//右轮前进
		GoForwardRight();
	}
	else
	{
		//右轮停止
		StopRight();
	}
	if(CountRight == 40)	//20ms
	{
		CountRight = 0;
	}
}

3.main函数中外部声明左右轮的速度变量,在while循环内给左右轮变量赋不同的值即可实现差速转弯文章来源地址https://www.toymoban.com/news/detail-579778.html

extern unsigned char SpeedLeft;
extern unsigned char SpeedRight;

void main()
{
	Timer0Init();
	Timer1Init();
	while(1)
	{
		//左轮慢,右轮快,右转
		SpeedLeft = 15;
		SpeedRight = 35;
		Delay1ms(2000);
		//左轮快,右轮慢,左转
		SpeedLeft = 35;
		SpeedRight = 15;
		Delay1ms(2000);
	}
}

到了这里,关于小车PWM调速-左右轮差速转弯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • STM32+L298N+PWM可调速小车(四驱)

    完整工程代码已放到百度网盘,链接如下: 电源引脚 VCC 外接直流电源引脚,电压范围在5~35V之间 GND GND是接地引脚,连接到电源负极 5V 驱动芯片内部逻辑供电引脚,如果安装了5V跳帽,则此引脚可输出5V电压,为微控板或其他电路提供电力供给,如果拔掉5V跳帽,则需要独立

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

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

    2024年02月04日
    浏览(44)
  • STM32之L298N控制130电机+PWM调速

    左右两边的OUT0~OUT4接130电机两端; 中间蓝色端口接电源, 注意:两个电源口和一个接地口都要接上!!!!!!!! 偏左一些的排针用杜邦线接上io口,如果需要PWM控速的话,ENA和ENB的跳线帽需要拔掉, 然后用两根杜邦线分别连到一个io口,给高电平使能,如果是低电平则

    2024年02月04日
    浏览(42)
  • 基于单片机的智能循迹避障小车STC89C52红外对管L298N驱动PWM波控制速度

    wx供重浩:创享日记 对话框发送:单片机小车 免费获取完整无水印报告等 利用红外对管检测黑线与障碍物,并以STC89C52单片机为控制芯片控制电动小汽车的速度及转向,从而实现自动循迹避障的功能。其中小车驱动由L298N驱动电路完成,速度由单片机输出的PWM波控制。 1.1智能

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

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

    2024年02月15日
    浏览(72)
  • STM32循迹小车系列教程(一)—— 使用PWM控制电机

    本章节主要讲解直流减速电机控制原理,电机驱动电路,以及如何使用PWM控制直流减速电机 1.软件准备:STM32CubeMx、Keil5_ MDK 2.硬件准备:STM32F103C8T6核心板、TB6612电机驱动模块/L298N电机驱动、18650锂电池3节/3S航模电池、杜邦线若干         图2-1为 市场上 常用 的 直流减速 电

    2024年02月05日
    浏览(54)
  • 12. 直流电机调速(PWM)

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

    2024年02月11日
    浏览(42)
  • 【51单片机学习】PWM电机调速

    中断允许寄存器,详情可以看STC51单片机芯片手册第160页 TMOD、TCON详情可以看STC51单片机芯片手册第187页 51单片机中的定时器有三个,(C52比C51多了一个定时器3,但这些都统称为51单片机) 本次以 Timer0 为例进行介绍 定时器的作用: 1:用于计时系统,可实现软件计时,或者使程

    2023年04月18日
    浏览(84)
  • 【51单片机】直流电机的驱动和PWM调速

    51单片机驱动直流电机与 PWM 调速是通过使用 51 单片机来控制直流电机的转速和方向。51 单片机通过控制电机的电流来实现驱动,并通过生成 PWM 信号来调节电机的转速。使用 PWM 调速可以使得直流电机的转速精确可控,并且减少了电机的功率损耗。在 51 单片机的控制系统中,

    2023年04月09日
    浏览(42)
  • 【Proteus仿真】【51单片机】PWM电机调速系统设计

    本项目使用Proteus8仿真51单片机控制器,使用L298N电机模块、数码管模块、按键模块、LED指示灯模块等。 系统运行后,数码管显示电机当前运行档位和速度。 可通过按键K4启动与停止,按键K1加速、按键K2减速,按键K3换向; 档位可在1-5挡。 最终可实现: 按键功能:具有加速、

    2023年04月17日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包