【Proteus仿真】基于51单片机的L298N电机电速调节

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,L298N电机驱动连接电机,采用调节PWM占空比来控制电机速度转动。

仿真图:

编辑

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

1、51单片机

2、L298N驱动电机模块

3、按键模块

三、程序编程

cpp 复制代码
/*全部代码在页尾资源*/
/**********************************
按下KEY1低速前进,
按下KEY2高速前进,
按下KEY4电机停止。
Motor1-Motor4对应四个电机;
**********************************/
#include <reg52.h>

typedef unsigned char uchar;
typedef unsigned int uint;

sbit KEY1 = P3^0;
sbit KEY2 = P3^1;
sbit KEY3 = P3^6;
sbit Motor1_IN1 = P1^0;
sbit Motor1_IN2 = P1^1;
sbit Motor2_IN1 = P1^2;
sbit Motor2_IN2 = P1^3;
sbit Motor3_IN1 = P1^4;
sbit Motor3_IN2 = P1^5;
sbit Motor4_IN1 = P1^6;
sbit Motor4_IN2 = P1^7;
sbit Motor1_EN = P0^0;
sbit Motor2_EN = P0^1;
sbit Motor3_EN = P0^2;	 
sbit Motor4_EN = P0^3;

uchar count = 0;	//定时中断次数
uchar a = 0;

void Timer0_Init(void)		//200微秒@11.0592MHz
{
	//AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x48;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时

	ET0 = 0;
	EA = 0;
}

void delay(int i)	 //延时函数
{
	int j,k; 
	for(j = i;j>0;j--)
		for(k = 125;k>0;k--);
}

void Car_Move(uchar speed)	 //电机转动
{
	uchar Car_Speed = speed;
	count++;	
	if(count <= Car_Speed)
	{
		Motor1_IN1 = 1;
		Motor2_IN1 = 1;
		Motor3_IN1 = 1;
		Motor4_IN1 = 1;
	}
	else
	{
	 	Motor1_IN1 = 0;
		Motor2_IN1 = 0;
		Motor3_IN1 = 0;
		Motor4_IN1 = 0;
	}
	if(count >= 100)
	{
	 	count = 0;
	}	
}

void Car_StopMove()	 //电机停止
{
	P = 0x00;
		Motor1_IN1 = 0;
		Motor2_IN1 = 0;
		Motor3_IN1 = 0;
		Motor4_IN1 = 0;
}



void Timer0_isr(void) interrupt 1
{
  	TL0 = 0x48;		//设置定时初值
	TH0 = 0xFF;		//设置定时初值
	switch(a)
	{
		case 1:Car_Move(30);break;	 	 //电机低速前进
		case 2:Car_Move(60);break;	 	 //电机高速前进
		default:break;
	}
}

四、实现现象

具体动态效果看B站演示视频:

基于51单片机的电机转速PWM调节_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):

链接:https://pan.baidu.com/s/1qOAv4OtM_VBKo60N898_PA

提取码:gopk

--来自百度网盘超级会员V4的分享

相关推荐
BackCatK Chen14 小时前
第 5 篇:TMC2240 寄存器体系详解|分类 + 读写逻辑 + 通用框架
单片机·嵌入式硬件·电机驱动·保姆级教程·tmc2240·寄存器详解·stm32实战
jingshaoqi_ccc15 小时前
使用GD32F103C8T6开发板的标准库实现硬件I2C协议通信(附源码下载地址)
单片机·嵌入式硬件
qq_25814297-npl15 小时前
三开门冰箱的接水盒(也称为储水盒或接水盘)正常情况下不会满水
单片机
华清远见成都中心15 小时前
GPIO(通用输入输出)面试中高频问题
单片机·面试·职场和发展
来自晴朗的明天15 小时前
8、2N7002 MOS 管电平转换电路
单片机·嵌入式硬件·硬件工程
来自晴朗的明天17 小时前
5、CBMV321 分压式电压跟随器电路
单片机·嵌入式硬件·硬件工程
羽获飞18 小时前
从零开始学嵌入式之STM32——7.STM32的系统架构
stm32·单片机·嵌入式硬件
来自晴朗的明天18 小时前
6、AD7683 单通道 AD 采样电路
单片机·嵌入式硬件·硬件工程
TEL1369976275019 小时前
方寸微PT153s千兆网口方案 替代RTL8153b方案
单片机·嵌入式硬件
qq_25814297-npl19 小时前
在单片机串口接收程序中,通常每接收完一条报文就添加一条接收时间,而不是每接收一个字节。这是因为报文是逻辑单元,添加时间戳到完整报文更合理和高效。
单片机·嵌入式硬件