基于51单片机直流电机PWM调速
(仿真+程序+原理图+设计报告)
功能介绍
具体功能:
1.霍尔传感器测电机转速;
2.LCD1602实时显示转速、PWM占空比;
3.按键控制电机加减速、正反转、开始/暂停;
演示视频:
基于51单片机直流电机PWM调速设计
/*
功能:基于51单片机的霍尔直流电机PWM调速设计
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void displaym();
sbit en=P2^5; //1602 6管脚
sbit rs=P2^7; //1602 4管脚
sbit rw=P2^6;//lcd1602控制端口 5管脚
sbit num1=P1^0; //占空比加1
sbit num2=P1^1; //占空比减1
sbit num3=P1^2; //正转
sbit num4=P1^3; //反转
sbit num5=P1^4; //开始/停止切换
sbit out=P3^4; //PWM输出正转
sbit out1=P3^7; //PWM输出反转
uint zhuansu,flag,z1,z2,m,flag_1,zheng,fan,kai;
void delay(uint z)//延时1ms
{
uint x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void write_com(uchar com)//1602控制指令
{
rs=0;
P0=com;
delay(5);
en=0;
delay(10);
en=1;
}
void write_data(uchar date)//1602数据指令
{
rs=1;
P0=date;
delay(5);
en=0;
delay(5);
en=1;
}
void init()//初始化
{
en=0;
rw=0;
write_com(0x01); //lcd初始化
write_com(0x38); //5X7显示
write_com(0x0c); //关闭光标
TMOD=0x01; //定时器方式1
TH0=0xdc;
TL0=0x00; //定时器初值
EA=1; //开中断
ET0=1; //定时器0开中断
TR0=1;
EX1=1;
IT1=1; //定时器启动
TH1=0xfc;
TL1=0x66;//定时100us
ET1=1; //定时器1开中断
TR1=1;
write_com(0x80);
write_data('V');
write_data(':');
write_com(0x87); //第一行显示转数
write_data('r');
write_data('p');
write_data('m');
write_com(0xc0);
write_data('z');
write_data('h');
write_data('a');
write_data('n');
write_data('k');
write_data('o');
write_data('n');
write_data('g');
write_data('b');
write_data('i'); //第二行显示占空比:
write_data(':');
displaym();
}
void keyscan() //键盘扫描函数
{
if(num1==0)
{
delay(5); //消除抖动
if(num1==0)
{
if(m<=199)
m++;
displaym(); //占空比加一
}
}
if(num2==0)
{
delay(5);
if(num2==0)
{
if(m>=1)
m--;
displaym(); //占空比技跻?
}
}
if(num3==0)
{
delay(5);
if(num3==0)
{
zheng=1; //开始正转
fan=0; // 反转停止
}
}
if(num4==0)
{
delay(5);
if(num4==0)
{
zheng=0; //正转停止
fan=1; // 反转开始
}
}
if(num5==0)
{
delay(5);
if(num5==0)
{
while(num5==0) ;
kai=1-kai;
}
}
}
void display()
{
write_com(0x82);
zhuansu=zhuansu*30; //每分钟转速
if(zhuansu/10000!=0)
write_data(zhuansu/10000+0x30);
else
write_data(' ');
if(zhuansu/1000==0)
write_data(' ');
else
write_data(zhuansu%10000/1000+0x30);
if(zhuansu/100==0)
write_data(' ');
else
write_data(zhuansu%10000%1000/100+0x30);
if(zhuansu/10==0)
write_data(' ');
else
write_data(zhuansu%10000%1000%100/10+0x30);
write_data(zhuansu%10000%1000%100%10+0x30);
write_com(0xd0);
}
void displaym()
{
write_com(0xcb);
if(m/200%10!=0)
write_data(m/200%10+0x30);
else
write_data(' ');
if(m/200%10==0&&m/20%10==0)
write_data(' ');
else
write_data(m/20%10+0x30);
write_data(m/2%10+0x30);
}
硬件设计
使用元器件:
单片机:STC89C51;
(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)
9*15万用板;40脚IC座;
1602液晶;16p母座;
16p排针;10k电阻*3;
1k电阻*5;3v直流电机;
3*1万用板;磁铁*2;
塑料管;3144霍尔传感器;
4148二极管*4;8050三极管*4;
8550三极管*2;103排阻;
104独石电容;10uf电解电容;
30pf瓷片电容*2;12M晶振;
按键*6;自锁开关;DC电源插口;
USB电源线或电池盒;
导线:若干;
结构图:
设计资料
01 仿真图
本设计使用proteus8.9版本设计,资料里有安装教程,无需担心!具体如图!
02 原理图
本系统原理图采用Altium Designer19设计,具体如图!
03 程序
本设计使用软件keil5版本编程设计,资料里有安装教程,无需担心!具体如图!
04 设计报告
一万一千字设计报告,具体如下!
05 设计资料
资料获取请关注同名公众号,全部资料包括仿真源文件 、程序(含注释)、AD原理图、设计报告、任务书、元件清单、视频讲解等。具体内容如下,全网最全! !
资料获取请观看前面演示视频!
点赞分享一起学习成长。