本项目使用Proteus8仿真51单片机控制器,使用L298N电机模块、数码管模块、按键模块、LED指示灯模块等。
系统运行后,数码管显示电机当前运行档位和速度。
可通过按键K4启动与停止,按键K1加速、按键K2减速,按键K3换向;
档位可在1-5挡。
最终可实现:
按键功能:具有加速、减速、正转、反转、启动和停止;
显示功能:数码管显示档位、电机转速;
指示功能:LED指示电机正转、反转;
测速功能:使用霍尔传感器实现电机测速;
电机驱动:L298N驱动直流电机;
1、51单片机核心模块
2、L298N电机驱动模块
3、数码管显示模块
4、按键模块
5、LED电路
/* 作者:嗨小易(:) */ //功能引脚定义 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/
B站演示视频:https://space.bilibili.com/
专注于51单片机、STM32、国产32、DSP、Proteus、ardunio、ESP32、物联网软件开发,PCB设计,视频分享,技术交流。