当前位置: 首页 > article >正文

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

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

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

仿真图:

编辑

二、硬件资源

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

1、51单片机

2、L298N驱动电机模块

3、按键模块

三、程序编程

/*全部代码在页尾资源*/
/**********************************
按下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的分享


http://www.kler.cn/a/314335.html

相关文章:

  • Java:解决因为大小写不规范导致的接收不到数据
  • catchadmin-webman 宝塔 部署
  • Rocky、Almalinux、CentOS、Ubuntu和Debian系统初始化脚本v9版
  • 蓝队知识浅谈(上)
  • Java 多线程(三)—— 死锁
  • 量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
  • 记录动态库项目仅生成了dll,未生成lib文件的问题
  • 深度学习02-pytorch-07-张量的拼接操作
  • 剖析Spark Shuffle原理(图文详解)
  • go 以太坊代币查余额
  • Python | Leetcode Python题解之第424题替换后的最长重复字符
  • 是德科技Keysight N4433D ECal模块 26.5GHz 4端口3.5毫米
  • 在python爬虫中xpath方式提取lxml.etree._ElementUnicodeResult转化为字符串str类型
  • RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验
  • 演示jvm锁存在的问题
  • Java集合(三)
  • Centos7安装chrome的问题
  • WebApi开发中依赖注入和RESTful 详解
  • OceanBase 的并发简述笔记
  • Navicate 链接Oracle 提示 Oracle Library is not loaded ,账号密码都正确地址端口也对
  • 【变化检测】基于ChangeStar建筑物(LEVIR-CD)变化检测实战及ONNX推理
  • php变量赋值javascipt变量
  • 13.面试算法-字符串常见算法题(二)
  • 【论文阅读】3D Diffuser Actor: Policy Diffusion with 3D Scene Representations
  • 人工智能与机器学习原理精解【25】
  • 【电路笔记】-运算放大器积分器