基于51单片机直流电机PWM调速设计

基于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原理图、设计报告、任务书、元件清单、视频讲解等。具体内容如下,全网最全! !

资料获取请观看前面演示视频!

点赞分享一起学习成长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值