首页 > 其他分享 >【Proteus仿真】基于51单片机的L298N电机电速调节

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

时间:2024-09-18 11:53:02浏览次数:3  
标签:P1 电机 void Motor4 51 IN1 L298N 单片机 sbit

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于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的分享

标签:P1,电机,void,Motor4,51,IN1,L298N,单片机,sbit
From: https://blog.csdn.net/2401_84985327/article/details/142329569

相关文章

  • CMS32L051驱动WS2812B全彩灯-PWM+DMA模式
    文章目录概要代码小结概要基于中微CMS32L051驱动WS2812B全彩灯,使用PWM+DMA模式。参照中微的串口uartSendReceive,该例程中有使用DMA进行串口数据的收发。代码main.c/******************************************************************************************......
  • CMS32L051使用旋转编码器
    文章目录概要代码小结概要CMS32L051使用外部中断的方式识别旋转编码器的方向。选取其中一个信号A进行外部中断触发,由于信号A空闲时处于高电平,因此初始化时外部中断使用下降沿触发;触发第一个下降沿后,判断当前是否已经触发了上升沿,如果已经触发上升沿,则需要判断当前......
  • CMS32L051定时器时钟选择
    文章目录概要代码小结概要CMS32L051的定时器搭载两个通用定时器单元,每个单元含有4个通道。每个通用定时器单元有4个16位定时器。各16位定时器称为“通道”,既能分别用作独立的定时器,也能组合多个通道用作高级的定时器功能。定时器时钟选择寄存器m(TPSm)是16位寄存器,选......
  • GYM 105125 C
    题目描述给定\(NM\)个数\(A_1,A_2,\dots,A_{NM}\),你要将这些数分成\(N\)个数组,每个数组\(M\)个数。接着你要将这些数组按字典序排序。对于排序后每个数组求出可能的字典序最小情况。思路我们从字典序的比较上来考虑,并把\(A\)排序。首先考虑当前数组\(i\)的第一位......
  • 51c大模型~合集55
    #新型忆阻器昂贵LLM的救星?Nature新研究提出新型忆阻器,比HaswellCPU高效460倍前些天,OpenAI发布了ο1系列模型,它那「超越博士水平的」强大推理性能预示着其必将在人们的生产生活中大有作为。但它的使用成本也很高,以至于OpenAI不得不限制每位用户的使用量:每位用户每周仅能给o1-......
  • STM32F407单片机编程入门(三)ADC详解及实战含源码
    文章目录一.概要二.STM32F407VET6单片机ADC外设特点三.STM32单片机ADC内部结构图1.ADC相关引脚说明2.ADC通道分类3.触发源4.转换周期5.电压转换计算6.更精确电压转换计算四.规则通道ADC采集信号流向1.单次转换模式2.连续转换模式五.CubeMX配置一个ADC采集例程六.CubeMX......
  • 教育部等十八部门关于加强新时代中小学科学教育工作的意见 20240917_085127
    原文教育部等十八部门关于加强新时代中小学科学教育工作的意见_国务院部门文件_中国政府网https://www.gov.cn/zhengce/zhengceku/202305/content_6883615.htm概述教育部等十八部门联合发布此意见,强调要加强科学教育,推动校内校外融合,规范科技类校外培训。这一政策为少儿编程教......
  • 【Proteus51单片机仿真】PWM直流电机调速
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能**        基于AT89C51,L298N驱动两个电机,因为是平台,最后用两个电机驱动,然后第一个按键控制所有电机停止,第二个按键按下,电机顺时针转动,第三个按键按下,电机逆时针转动。然后加入pwm调速,分为......
  • 【Proteus单片机仿真】基于51单片机的循迹小车避障+气体传感器和温度传感器系统
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能开机即两个直流电机运转,然后三个气体传感器,如果超过阈值,即蜂鸣器报警;超声波传感器,如果检测到障碍,电机停止;温度传感器,超过阈值,电机停止,蜂鸣器报警,点亮一个灯;循迹模拟,与电机联动;仿真图:编辑二、......
  • [proteus仿真]基于51单片机,74hs373,8255A扩展 流水灯设计
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能基于51单片机,74hs373,8255A扩展流水灯设计二、硬件资源基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。三、程序编程#include<reg52.h>#include<intrins.h>#include......