基于51单片机的三档风速调节使用51单片机作为系统主控,使用L298N作为系统主控,采用一位数码管显示风速等级,LED作为系统指示灯,使用定时器产生PWM波控制直流电机,通过改变PWM占空比实现调速,按键实现修改PWM占空比。
一、硬件设计
本次设计的硬件图比较简单,大致是一个独立按键、一个L298N驱动,一个一位数码管(共阴),另外实物上还有一个dc供电口和开关,仿真图如下:
二、软件设计
1、定时器产生PWM波
本次设计使用定时器产生PWM波,通过修改PWM的占空比,就可以实现直流电机的调速.
void Timer0_Routine() interrupt 1
{static unsigned int T0Count2;TL0=0X18;TH0=0xfc;T0Count2++;T0Count2%=20; //PWM调节速度if(T0Count2 < compare){ Motor1=1;Motor2=0;}else{Motor1=0;Motor2=0; }
}
2、主程序设计
#include <REGX51.H>sbit key1 = P1^2;
sbit Motor1 = P1^0;
sbit Motor2 = P1^1;int compare=0;void delay(unsigned int x){while(x){unsigned char i,j;i=2;j=239;do{while(--j);}while(--i);x--;}
}
void Timer0_Init(){//TMOD=0x01;TMOD&=0xf0;//1与任何数&为原数,0与任何数|为原数TMOD|=0x01;TF0=0;TR0=1;TH0=0xfc;TL0=0x18;ET0=1;EA=1;PT0=0;
}unsigned char Data[]={0x3f,0x30,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//一位数码管显示
void nixie(unsigned char number){P2=Data[number];delay(1);P2=0x00;
}int Key()
{int keyNum=0;if(key1==0){delay(20);while(key1==0);keyNum=1;delay(20);}return keyNum;
}int keyNum=0;void main()
{Timer0_Init();while(1){keyNum = Key();if(keyNum == 1){compare+=6;if(compare>20)compare=0;}nixie(compare/6);}
}void Timer0_Routine() interrupt 1
{static unsigned int T0Count2;TL0=0X18;TH0=0xfc;T0Count2++;T0Count2%=20; //PWM调节速度if(T0Count2 < compare){ Motor1=1;Motor2=0;}else{Motor1=0;Motor2=0; }
}
三、项目演示
程序运行,默认是不会转动的,数码管显示0。
按下按键,风速会循环变化,大致是0-3-0,往复循环。如下:
四、项目总结
本次设计使用51单片机结合洞洞板,设计了一款简单的风速调节系统,按下按键调节电机风速,同时数码管显示风速等级。详情参考我的bilibili,如下:
基于51单片机得三档风速调节系统_哔哩哔哩_bilibili