STC89C52学习笔记(十一)

STC89C52学习笔记(十一

综述:本文讲述了直流电机以及PWM调速。

一、直流电机

1、特点

(1)直流电机能将电能转化位机械能。

(2)直流电机有两个电极,电极正接时,电机正转;电极反接时,电机反转。

(3)电机的功率比较大,不可以直接接在单片机的IO口上,需要在IO口和电机之间接驱动电路。

2、常见的两种驱动电路

(1)直接驱动电路:电机只能固定一个方向转动。

①三极管直接驱动

电路原理:如果IN输入低电平,三极管导通,电流从电源流向三极管流向电机。当IN输入高电平时,三极管截止,电流不导通,而由于电机是一个感性元件,电流不能突变,于是,电机会产生一个极大的电压,这时,电机和三极管产生对抗:当电机的感性很大时,三极管击穿或者IO击穿,对电路的稳定性和安全性造成影响。所以这里必须要有二极管,做续流二极管的作用,可以在三极管断开时,和电机形成回路,使电机的电流流向二极管,逐渐消耗电流,达到保护电路的作用。

(拓展:如果电路中有电感元件,由于电流不能突变,那么可能会产生一个高于电源的电压,产生巨大的危险。)

②ULN2003驱动电路

ULN2003驱动电路也是只能使电机往一个方向转动的电路。由于ULN2003内部相当于有达林顿管,也能够达到保护电路的作用,左移可以直接在芯片外部接电机(Vcc接电机正极,OUT1接电机负极),当P10为高电平时,OUT1输出为低电平,电机转动。

(2)H桥驱动电路:电机可以向两个方向转动。

IN1和IN4导通,IN2和IN3断开时,电机正转;IN2和IN3导通,IN1和IN4断开时,电机反转。这里由于电机既能正转,又能反转,所以不需要加续流二极管,也能具有很强的耐压性。

二、PWM

1、PWM调速原理

通过控制开关断开闭合来控制电机速度(脉冲宽度调制)。由于PWM在开关断开时不会立马停止,所以,当单片机快速断开开关,再打开开关时,电机还是转动的,而且,电机会以一个比一直闭合开关小的速度在转动。当电机断开的时间占比越大时,速度就会越小,因此,可以通过控制开关断开闭合时间来控制电机的速度。(类似于开关电源的原理,开关电源是控制开关断开闭合时间来控制输出电压。)

注意:需要在惯性系统里!

2、PWM相关参数

Ts是周期,Ton是高电平时间,Toff是低电平时间。频率f=1/Ts,占空比=Ton/Ts,精度=占空比变化布距(一般会保证调制时间一样的情况下来调整占空比,不同也行)

三、代码

1、LED不同亮度

(1)直接给LED赋值来实现
While(1)

{

  LED=0;

  LED=1;

  LED=1;

  LED=1;

  LED=1;

  LED=1;

  LED=1;


}
(2)利用延时函数来实现
While(1)

{

  LED=0;

  Delay(5);

  LED=0;

  Delay(95);

}
(3)利用定时器来实现

思路:利用定时器和计数器来实现计数,再通过计数的值和比较值相比来实现置1还是置0,实现LED占空比,最终实现改变比较值的大小就能控制LED亮度。

void Timer0 Routine (interrupt 1
{
  TL0=0x9C;
  TH0=0xFF;
  Counter++;
  Counter%=100;
  if (Counter<Compare)
  {
    LED=0
  }
  else
  {
    LED=1;
  }
}

2、LED呼吸灯

(1)在while里运用for循环和延时函数

思路:

①使LED亮一小段时间,灭一小段时间,使LED达到一种亮度;

②延长①状态相应的时间,呈现维持LED亮度的现象;

③慢慢增加LED高电平的时间,呈现LED慢慢变亮的现象;

④再慢慢减少LED高电平的时间,呈现LED慢慢变暗的现象;

⑤循环增加LED高电平的时间与减少LED高电平的时间,呈现LED慢慢变暗后又慢慢变亮的,达到一种呼吸灯的效果。

while(1)
	{
		for(Time=0;Time<100;Time++)		
		{
			for(i=0;i<20;i++)			
			{
				LED=0;					
				Delay(Time);			
				LED=1;					
				Delay(100-Time);		
			}
		}
		for(Time=100;Time>0;Time--)		
		{
			for(i=0;i<20;i++)			
			{
				LED=0;					
				Delay(Time);			
				LED=1;					
				Delay(100-Time);		
			}
		}
	}
}

(2)利用定时器

由于(1)需要不断进行for循环和Delay,占用太多CPU资源,于是可以利用定时器来实现减少CPU资源浪费。


参考视频:51单片机学习.视频

侵权联系删除!

上一篇:python输入某年某月某日判断这一天是这一年的第几天


下一篇:1.Go的基本语法 - 函数、数组、接口-2.数组