51单片机直流电机控制

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、pwm波形?
    • 1.1高低电平交互,LED亮灭。
    • 1.2 驱动电机时?
    • 1.3 怎么调节电机的速度?
  • 二、怎么用51单片机产生PWM波形
    • 2.1 t 怎么来?
    • 2.2 t0怎么来?
    • 2.3 t1怎么来?
    • 2.4 如何更好的写程序,只用一个时间基准1ms
    • 2.5参考程序
  • 三、电路连接图
    • 3.1电机连接图
    • 3.2 ULN2003 逻辑图
    • 3.3 按键连接图
  • 四、 电机开机、关机
  • 五、思考
    • 5.1 如何控制电机正反转?
    • 5.2 如何控制多个电机?
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

我们学习了51单片机的定时器之后,已经定时1s,用按键控制定时的时间。
之前产生的波形都是方波,就是高电平、低电平一样的波形。PWM


提示:以下是本篇文章正文内容,下面案例可供参考

一个学期都没搞懂的直流电机工作原理,一分钟讲解清楚!

https://www.bilibili.com/video/BV1yV4y1o7Nd/?spm_id_from=333.337.search-card.all.click

基于51单片机直流电机调速实验

https://www.bilibili.com/video/BV1Eo4y1m774/?spm_id_from=333.337.search-card.all.click

一、pwm波形?

51单片机直流电机控制_第1张图片

1.1高低电平交互,LED亮灭。

接通电机会有效果?

51单片机直流电机控制_第2张图片

1.2 驱动电机时?

电压越高,电机转得越快

1.3 怎么调节电机的速度?

51单片机直流电机控制_第3张图片
51单片机直流电机控制_第4张图片

二、怎么用51单片机产生PWM波形

2.1 t 怎么来?

t=t0+t1;=50+10=60
D=10/60%100

2.2 t0怎么来?

sbit motor=P1^0;

t0=50ms ,motor=0;
定时50ms,

TH0=( 65536-50000)/256;
TL0=( 65536-50000)%256;

2.3 t1怎么来?

t1=10ms
定时10ms,motor=1;
TH0=( 65536-10000)/256;
TL0=( 65536-10000)%256;

2.4 如何更好的写程序,只用一个时间基准1ms

TH0=( 65536-1000)/256;
TL0=( 65536-1000)%256;
t0=150
t1=1
10

50 10 ->num
num<10 motor=1
num>=10 motor=0
num=60 num=0

51单片机直流电机控制_第5张图片

2.5参考程序

代码如下(示例):

#include

void main()
{
	//初始化定时器
	while(1)
	{
		if(key0)
		{
		   10
		}
		
		if(key1)
		{
		   60
		}

	}

}

void timer0()interrupt 1
{

	TH0=( 65536-1000)/256;
	TL0=( 65536-1000)%256;
	num++;
	if(num<10)
	{
		motor=1;
	}else if(num<60)
	{
	     motor=0;
	}
	else
	{
		num=0;
	}
	
	
/*	t0=1*50
	t1=1*10

	50 10   ->num
	num<10   motor=1
	num>=10 motor=0
	num=60  num=0*/
}

#include

sbit motor=P1^0;
sbit key0=P3^0;
sbit key1=P3^1;

sbit led0=P2^0;

unsigned int num=0;
 int d=0;//占空比
//unsigned int t=0;
#define t 1000


void delay(unsigned int ms)
{
	unsigned int x,y;
	for(x=0;x<ms;x++)
	{
		for(y=0;y<100;y++);
	}
}



void timer_init()
{
	TMOD=0X01;//方式1 16位
	TH0=( 65536-1000)/256;
	TL0=( 65536-1000)%256;
	EA=1;
	ET0=1;
	TR0=1;
	
}

void main()
{
	//初始化定时器
	timer_init();
	key0=1;
	key1=1;
	while(1)
	{
		if(!key0)
		{
		    delay(5);
			if(!key0)
			{
				while(!key0);
				d=d+100;
				if(d>t)
				{
				  d=t;
				}
			}
			
		}
		
		if(!key1)
		{
		    delay(5);
			if(!key1)
		    {
				while(!key1);
				d=d-100;
				if(d<0)
				{
					d=0;		
				}
			 }
				
		}

	}

}

void timer0()interrupt 1
{

	TH0=( 65536-1000)/256;
	TL0=( 65536-1000)%256;
	num++;
	if(num<d)
	{
		motor=1;
	}else if(num<t)
	{
	     motor=0;
	}
	else
	{
		num=0;
		led0=~led0;
	}
	
	
/*	t0=1*50
	t1=1*10

	50 10   ->num
	num<10   motor=1
	num>=10 motor=0
	num=60  num=0*/
}

三、电路连接图

3.1电机连接图

51单片机直流电机控制_第6张图片

3.2 ULN2003 逻辑图

51单片机直流电机控制_第7张图片

3.3 按键连接图

51单片机直流电机控制_第8张图片

四、 电机开机、关机



//开机: TR0=1;

if(!key2)
{
	TR0=1;
}


//关机:TR0=0;

if(!key3)
{
	TR0=0;
}

五、思考

5.1 如何控制电机正反转?

5.2 如何控制多个电机?

总结

了解直流电机工作原理,熟悉定时器定时功能,掌握电机调速技术。

你可能感兴趣的:(单片机,51单片机,单片机)