【Proteus仿真】【51单片机】PWM电机调速系统设计

文章目录

  • 一、主要功能
  • 二、硬件资源
  • 三、软件设计
    • 1、主机程序
  • 四、实验现象
  • 联系作者


一、主要功能

本项目使用Proteus8仿真51单片机控制器,使用L298N电机模块、数码管模块、按键模块、LED指示灯模块等。

系统运行后,数码管显示电机当前运行档位和速度。
可通过按键K4启动与停止,按键K1加速、按键K2减速,按键K3换向;
档位可在1-5挡。
最终可实现:
按键功能:具有加速、减速、正转、反转、启动和停止;
显示功能:数码管显示档位、电机转速;
指示功能:LED指示电机正转、反转;
测速功能:使用霍尔传感器实现电机测速;
电机驱动:L298N驱动直流电机;


二、硬件资源

1、51单片机核心模块
2、L298N电机驱动模块
3、数码管显示模块
4、按键模块
5、LED电路


三、软件设计

1、主机程序

/*
作者:嗨小易(QQ:3443792007)
*/

//功能引脚定义
sbit ZZ_LED=P2^0;
sbit FZ_LED=P2^1;

//定义结构体
_sys_ctrl sys_ctrl;


//系统参数设定
void sys_parm_set(void)
{
	u8 key=0;
	
	key=key_scan(0);
	//开启/停止
	if(key==KEY4_PRESS)	
	{
		sys_ctrl.run=!sys_ctrl.run;
		if(sys_ctrl.run)
		{
			TR1=1;EX0=1;
			if(sys_ctrl.dir==0){ZZ_LED=0;FZ_LED=1;}
			else {ZZ_LED=1;FZ_LED=0;}	
		}
		else 
		{	
			TR1=0;EX0=0;
			ZZ_LED=1;FZ_LED=1;	
		}
		dc_motor_dir_ctrl(sys_ctrl.dir);
		dc_motor_sta(sys_ctrl.run);
	}
	//当处于运行状态时才能调速、切换方向
	if(sys_ctrl.run==1)
	{
		//加速
		if(key==KEY1_PRESS)
		{
			sys_ctrl.gear++;
			if(sys_ctrl.gear>5)sys_ctrl.gear=1;
			pwm_set_duty_cycle(sys_ctrl.gear*20);				
		}
		//减速
		else if(key==KEY2_PRESS)
		{
			sys_ctrl.gear--;
			if(sys_ctrl.gear<1)sys_ctrl.gear=5;
			pwm_set_duty_cycle(sys_ctrl.gear*20);				
		}
		//换向
		else if(key==KEY3_PRESS)
		{
			sys_ctrl.dir=!sys_ctrl.dir;
			if(sys_ctrl.dir==0){ZZ_LED=0;FZ_LED=1;}
			else {ZZ_LED=1;FZ_LED=0;}
			dc_motor_dir_ctrl(sys_ctrl.dir);
		}	
	}
}

//采集数据显示
void sys_data_show(void)
{
	u8 buf[4];

	while(sys_ctrl.run==1)
	{
		//测速完成
		if(sys_ctrl.sta==1)
		{
			sys_ctrl.sta=0;
			sys_ctrl.cnt=0;
			EX0=1;//打开计数	
		}
		buf[0]=gsmg_code[sys_ctrl.gear%10]|0x80;
//		buf[1]=gsmg_code[sys_ctrl.speed/100];
		buf[1]=0;
		buf[2]=gsmg_code[sys_ctrl.speed%100/10];
		buf[3]=gsmg_code[sys_ctrl.speed%100%10];
		smg_display(buf,1);

		break;				
	}
}


//应用控制系统
void appdemo_show(void)
{
	ENA=0;
	SMG_A_DP_PORT=0;
	sys_parm_init();//系统参数初始化
	exti0_init();
	time1_init();
	pwm_init(0XFF,0XD1,100,0);//初始时,PWM占空比为0
	dc_motor_dir_ctrl(sys_ctrl.dir);//默认正转
	pwm_set_duty_cycle(sys_ctrl.gear*20);//占空比40%

	while(1)
	{
		sys_parm_set();
		sys_data_show();		
	}
}



四、实验现象

B站演示视频:https://space.bilibili.com/444388619

【Proteus仿真】【51单片机】PWM电机调速系统设计_第1张图片

【Proteus仿真】【51单片机】PWM电机调速系统设计_第2张图片

【Proteus仿真】【51单片机】PWM电机调速系统设计_第3张图片


联系作者

B站演示视频:https://space.bilibili.com/444388619
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

你可能感兴趣的:(proteus,51单片机,单片机)