一.硬件方案
本设计以单片机STC89C51和三极管控制的直流电机脉宽调制调速系统。利用STC89C51芯片进行低成本直流电动机控制系统的设计,能够简化系统构成、降低系统成本、增强系统性能、满足更多应用场合的需要。系统实现对电机的正转、反转、急停、加速、减速的控制,以及PWM的占空比在液晶上的实时显示。同时显示实时的电机转速。
二.设计功能
(1)本设计采用51单片机作为主控制器(STC89C51/52,AT89C51/52,AT89S51/52均兼容);
(2)采用霍尔传感器非接触式测电机转速;
(3)LCD1602液晶显示当前的转速,转速单位为转/分(RPM)。和显示当前的pwm占空比0~100%;
(4)电机的速度可以通过按键调整,也可以开始暂停,正转和反转;
(5)按键功能:按键1:正转;按键2:反转;按键3:占空比+1;按键4:占空比-1;按键5:开启/暂停键;
三.设计原理图
原理图主要采用AD软件进行设计,如图:
Protues仿真:
四.程序设计
主程序源码如下:
void main()
{
LCD_RW=0;
PWM=0;
init_lcd(); // 初始化液晶显示
system_Ini(); //中断配置
count=0; //将T0中断次数初始化为0
temp=0;
flag=0;
input1=0;
input2=1;
dis(val); //设置值显示
write_com(0x80+14);
write_data('Z');
while(1)
{
display_val(v); //电机速度显示
delay(10);
}
}
void Time0(void ) interrupt 2 using 1 //定时器T0的中断编号为1,使用第1组工作寄存器
{
EX1=0;
flag_aa++;
if(count>=10) //若累计满4次,即计满200ms秒钟
{
v=flag_aa; //计算速度
TL1=0; //计数器1 清零
TH1=0;
if(x==0)
pidout= PIDcontrol(val , v); //PID调用
if(pidout>=149) // PWM限幅值
{
pidout=145;
}
else if(pidout<=0)
{
pidout=0;
}
flag_aa=0;
count=0; //清0,重新统计中断次数
}
EX1=1;
}
void TIM0(void) interrupt 1 //定时器2中断 产生模拟PWM
{
TH0=(65536-25000)/256; //定时器T0的高8位设置初值,每50ms产生一次中断
TL0=(65536-25000)%256; //定时器T0的低8位设置初值,每50ms产生一次中断
count++;
key();
}
void TIM2(void) interrupt 3 //定时器2中断 产生模拟PWM
{
TH1=(65536-10)/256; //定时器T0高8位重新赋初值
TL1=(65536-10)%256; //定时器T0低8位重新赋初值 TF1=0;
timer3++;
if(timer3>90)
timer3=0;
if(timer3<=pidout) //pidout
PWM=1 ;
else
PWM=0 ;
}
资料链接:https://pan.baidu.com/s/1l6lp59pDByEv1jAtr2ZlnA?pwd=wdwq
提取码:wdwq