一、功能简介
本项目使用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();//系统功能控制
}
}
三、实验现象
文章来源:https://www.toymoban.com/news/detail-515957.html
联系作者
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。文章来源地址https://www.toymoban.com/news/detail-515957.html
到了这里,关于【Proteus仿真】【51单片机】直流电机PID调速系统设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!