功能:
本实例是基于51单片机的直流电机调速测速系统,主要硬件由51单片机最小系统,LCD1602液晶屏电路,霍尔测速模块,直流电机控制电路,按键电路构成。
1.本设计采用霍尔传感器的非接触方式来测量直流电机的转速;
2.显示屏采用LCD1602显示屏,其中第一行显示当前电机的转速(转速单位为转/分),第二行显示当前电机的控制占空比0-100%。
3.电机转速可以通过按键进行调整,可以设置电机转动或者暂停,也可以通过按键设置电机正转或者反转。
4.系统共设有6个按键,功能分别为加速、减速、正转、反转、开始/暂停、单独的是复位按键。
原理图:
Protues仿真:
程序:
void main()
{
flag_1=0;
m=100; //占空比为100
zhuansu=0; //转速初值0
flag=0;
zheng=1; //初始化电机正转动
fan=0;
init(); //初始化
while(1)
{
keyscan(); //键盘扫描程序
}
}
void int1()interrupt 2 //外部中断1脉冲技术记录电机的转速 电机转一圈zhuansu加一
{
zhuansu++;
}
void int2()interrupt 3 //定时器0显示转速
{
TH0=0xdc;
TL0=0x00;//定时10ms
flag++;
if(flag==200) //计时到达2s
{
display(); //显示转速
zhuansu=0; //转速置0
flag=0;
}
}
void int3()interrupt 1 //产生PWM
{
TH1=0xff;
TL1=0x00;//定时100us
flag_1++;
if(flag_1>199)
flag_1=1;
if(kai==1) //如果kai==1电机启动
{
if(zheng==1) //电机正转
{
if(flag_1<m) //小于占空比m输出PWM=0输出电压为1
{out=0;
out1=1;}
else
{
out=1;
out1=1;
}
}
if(fan==1) //电机反转
{
if(flag_1<m) //小于占空比m输出PWM=0输出电压为1
{
out=1;
out1=0;
}
else //大于m输出PWM=1输出电压为0
{
out=1;
out1=1;
}
}
}
if(kai==0) //kai=0电机停止转动
{
out=1;
out1=1;
}
}
关注公众号-电子应用学习馆,首页回复电机调速获取。