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

基于51单片机直流电机PWM控制设计

直流电机驱动

  • 🎶基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)
    • 🎶主要功能:
    • 🎶仿真
    • 🎶程序设计:
  • 🎶设计报告
    • 🎶资料清单:
    • 资料网盘下载链接(可点击):

🎶基于51单片机的PWM控制直流电机设计( proteus仿真+程序+报告+讲解视频)

仿真图proteus 7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0031

🎶主要功能:

1.设计要求

采用51单片机作为核心控制器,控制直流电机的正转,反转,制动,停止。

2.功能要求

1)数码管显示当前的转速(单位为转/分(RPM))和当前的PWM占空比0~100%。

2)电机(L298n)转速可以通过按键调整,也可以开始暂停,正转和反转。

3)按键可实现加速、减速、正转、反转、停止等功能。

1键:加速键,短按,占空比加1;

2键:减速键,短按,占空比减1;

3键:正反转切换键,按下后电机正反转;

4键:按一下停止,PWM脉宽清零。

🎶仿真

开始仿真后,用数码管第一位显示0表示正转后面三位标志PWM脉宽(0-100), 示波器实时检测显示脉宽黄线是正转脉宽,蓝线是反转脉宽。

img

反转脉宽如下所示

img

🎶程序设计:

img

部分代码:

#include<reg52.h>    
#include<intrins.h>                        
#define uchar unsigned char	
#define uint unsigned int  
		
/**********************************************************************
							L298n接口定义
**********************************************************************/  
sbit MOTOR_A_1=P3^6;
sbit MOTOR_A_2=P3^7;																   
sbit k1=P1^0;		//定义k1为p1.0口
sbit k2=P1^1;   //定义k2为p1.1口
sbit k3=P1^2;   //定义k3为p1.2口
sbit k4=P1^3;   //定义k4为p1.3口
uchar T=0;	   //定时标记
uchar W=0;	   //脉宽值	 0~100
uchar A=0;	   //方向标记 0,1
uchar k=0;	   //按键标记
uchar i=0;    	 //计数变量

uchar code table1[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};

uchar code table2[]={0xfe,0xfb,0xfd,0xf7};
		 
void delayms(uint t);					 			 
/**********************************************************************
						数码管显示
**********************************************************************/ 
void disp(void)
{
	P2=table2[3];					
	P0=table1[W%10];			//显示占空比个位
	delayms(1); 					//延时1ms
	P2=0xff;							//P0清1

	P2=table2[2];
	P0=table1[W/100]; 		//显示占空比百位
	delayms(1); 					//延时1ms
	P2=0xff;							//P0清1
  
	P2=table2[1];
	P0=table1[W/10%10];  //显示占空比十位
	delayms(1); 				 //延时1ms
	P2=0xff;   					 //P0清1

	P2=table2[0];
	P0=table1[A];  			//显示方向
	delayms(1); 				//延时1ms
	P2=0xff;						//P0清1
}

/**********************************************************************
							定时器变量定义
**********************************************************************/ 


void init(void)
{
	//启动中断
	TMOD=0x01;	
	EA=1;						
	ET0=1;
	TR0=1;
	//设置定时时间
	TH0=0xff;
	TL0=0xf6;
}

		
/**********************************************************************
							延时1ms
**********************************************************************/ 
void delayms(uint t)
{
	uchar j;
	while(t--)
	{
		for(j=0;j<250;j++)			//循环250次
		{
		   _nop_();             //系统延时          
	       _nop_();							//系统延时
	       _nop_();							//系统延时
	       _nop_();							//系统延时
		}
	}
}
/**********************************************************************
							独立按键检测
**********************************************************************/ 
void key(void)           //按键判断程序
{
	if(k1==0)							//按键1按下
	{
		while(k1==0);				//按键1抬起
		if(W==100)					//如果脉宽为100
			W=0;							//脉宽置0
		else
			W+=1;							//否则加1
	}
	else if(k2==0)				//按键2按下
	{				 
		while(k2==0);				//按键2抬起
		if(W==0)						//如果脉宽为0
			W=100;						//脉宽设置成100
		else
			W-=1;							//否则减1
	}
	else if(k3==0)				//按键3按下
	{			   
		while(k3==0);				//按键3抬起
		A=!A;								//方向标记取反
		k=!k;								//按键标记取反
	} 
	else if(k4==0)				//按键4按下
	{			   
		while(k4==0);				//按键4抬起
		W=0;								//脉宽清0									
	}
}

void main(void)
{

	init();			/系统初始化 
	while(1)	 
	{
	if(k==0)
	    MOTOR_A_2=0;
	else
		MOTOR_A_1=0;	 		
		key();			查询按键
	}
}

🎶设计报告

img

🎶资料清单:

img

资料网盘下载链接(可点击):


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

相关文章:

  • 工业相机 SDK 二次开发-Halcon 插件
  • linux平台RTMP|RTSP播放器如何回调SEI数据?
  • Linux探秘坊-------3.开发工具详解(2)
  • 集合帖:前缀和及差分模板题 ← “洛谷 P5638:光骓者的荣耀” + “洛谷 P3397:地毯”
  • BUUCTF_Web([GYCTF2020]Ezsqli)
  • Pytorch使用教程(12)-如何进行并行训练?
  • linux环境下对mysql操作
  • FilterChain攻击解析及利用
  • ATK-ESP8266 WIFI模块串口通信通用实现方案
  • mac VScode 添加PHP debug
  • 在 Ubuntu 上安装最新版的 Calibre
  • ElasticSearch之禁用交换分区
  • 数据结构 / 顺序表的遍历
  • 云匣子 FastJson反序列化RCE漏洞复现
  • 京东数据分析(京东大数据):2023年10月京东手机行业品牌销售排行榜
  • 初学vue3与ts:setup与setup()下的数据写法
  • Blender快捷键总结
  • vs2015如何远程启动程序来进行调试
  • Vue轻松入门,附带学习笔记和相关案例
  • Retrofit怎么返回一个JSON字符串?
  • TS常见类型概述
  • 1. 图的广度优先遍历
  • docker 常用容器创建(自用)
  • 操作系统题目分类总结 | 进程管理 内存管理 文件系统 设备管理
  • 2023/11/26总结
  • 5 动态规划解分割等和子串