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


一、功能简介

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

主要功能:
系统运行后,可通过按键K4启动系统,数码管显示实际速度和目标速度,再次按下K4键停止系统;按键K1加速、按键K2减速,按键K3换向;速度范围为0-150;通过PID将实际速度调节到目标速度。
最终可实现:
1、具有加速/减速/正转/反转/启动和停止
2、数码管显示速度
3、LED指示电机正转、反转
4、霍尔传感器实现电机测速
5、目标速度设定


二、软件设计

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





//系统参数设定
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)
		{
			pid.target_val+=10;
			if(pid.target_val>150)pid.target_val=150;				
		}
		//减速
		else if(key==KEY2_PRESS)
		{
			pid.target_val-=10;
			if(pid.target_val<10)pid.target_val=0;				
		}
		//换向
		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[8];
	u8 tag_val=pid.target_val;

	while(sys_ctrl.run==1)
	{
		//测速完成
		if(sys_ctrl.sta==1)
		{
			sys_ctrl.sta=0;
			sys_ctrl.cnt=0;
			EX0=1;//打开计数	
		}
		//实际速度
		buf[0]=0;
		buf[1]=gsmg_code[sys_ctrl.speed/100];
		buf[2]=gsmg_code[sys_ctrl.speed%100/10];
		buf[3]=gsmg_code[sys_ctrl.speed%100%10];
		//目标速度
		buf[4]=0;
		buf[5]=gsmg_code[tag_val/100];
		buf[6]=gsmg_code[tag_val%100/10];
		buf[7]=gsmg_code[tag_val%100%10];
		smg_display(buf,1);

		break;				
	}
}

//系统功能控制
void sys_fun_ctrl(void)
{
	static u8 i=0;

	while(sys_ctrl.run==1)
	{
		i++;
		if(i%1==0)
		{
			//PID调节
			sys_ctrl.rate=pid_realize(sys_ctrl.speed);
			if(sys_ctrl.rate>100)sys_ctrl.rate=100;
			else if(sys_ctrl.rate<0)sys_ctrl.rate=-sys_ctrl.rate;
			pwm_set_duty_cycle(sys_ctrl.rate);//占空比	
		}

		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.rate);//占空比

	pid_parm_init();//PID参数初始化

	while(1)
	{
		sys_parm_set();//系统参数设定
		sys_data_show();//采集数据显示
		sys_fun_ctrl();//系统功能控制		
	}
}


三、实验现象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


联系作者

专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。

  • 6
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
控制 Proteus是一款电路仿真软件,可以用来设计和模拟各种电子电路,包括基于51单片机直流电机闭环调速系统。这个系统使用PWM控制技术来调节电机的转速,使其能够在不同负载下保持稳定的转速。 下面是一个基于Proteus51单片机直流电机闭环调速系统设计PWM控制的步骤: 1. 确定电机规格和电路参数 首先需要确定所要控制的直流电机的规格和参数,如额定电压、额定电流、额定转速等。 根据电机的参数和应用场景,选择合适的电路参数,如电容、电阻、电感等。在设计中需要考虑到电源稳定性、电机负载变化、噪声干扰等因素。 2. 编写控制程序 使用Proteus中的编程器编写51单片机的控制程序,实现PWM控制技术。程序主要包括以下部分: a. 初始化程序:设置计时器、PWM输出引脚、中断等参数。 b. 速度测量程序:通过电机的编码器或其他速度传感器测量电机的转速。 c. 控制算法程序:根据实际转速和期望转速,计算出合适的PWM输出信号。 d. 输出PWM信号程序:将计算出的PWM输出信号送到电机驱动器中,控制电机转速。 3. 进行仿真设计好的电路和控制程序导入Proteus中,进行仿真。通过仿真可以测试控制程序的正确性,验证电路参数的合理性,并进行参数调整和优化。 4. 硬件实现 在仿真验证通过后,将电路和控制程序实现到实际硬件中。需要注意硬件实现时需要注意电路布局、信号干扰、电源稳定等问题。 总之,基于Proteus51单片机直流电机闭环调速系统设计PWM控制技术,可以实现电机的精准控制,提高控制精度和稳定性,适用于各种需要精准控制电机转速的应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值