51单片机直流电机调速

本文介绍了直流电机的工作原理及组成,包括电机正反转的实现。同时,详细讲解了电机驱动电路中的ULN2003芯片和H桥驱动,以及PWM脉冲宽度调制在电机速度控制中的应用。通过示例代码展示了如何使用PWM生成100Hz信号来调节电机速度。
摘要由CSDN通过智能技术生成

一、直流电机介绍

       直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时, 电机正转,当电极反接时,电机反转。直流电机主要由永磁体(定子)、线圈(转子) 和换向器组成
除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等。

 二、电机驱动电路

①大功率器件直接驱动 ULN2003芯片做驱动或直接搭建器件电路,不能反转

②H桥驱动,可以做正反转

ULN2003芯片:

给0输出1,给1输出0;0是有驱动能力的,1是没有驱动能力的,相当于断开,因此9脚接VCC,续流二极管起作用,因此负载就一端接VCC,一端直接接ULN2003的端口。该芯片高压输出50V,集电极电流最大50mA。

三、PWM介绍和产生方法

        PWM (Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域。
        频率=1/Ts
       占空比=Ton/Ts     精度=占空比变化步距

四、代码

产生一个100Hz的PWM波

#include <REGX52.H>
#include "Delay.h"
#include "key.h"
#include "Timer0.h"
#include "Shuma.h"

sbit Moter=P1^0;

unsigned char Counter,Compare,KeyNum,Speed;

void main()
{
	Timer0Init();
	Compare=5;
	while(1)
	{
			KeyNum=Key();
			if(KeyNum==1)
			{
				Speed++;
				Speed%=4;
				if(Speed==0){Compare=0;}
				if(Speed==1){Compare=5;}
				if(Speed==2){Compare=50;}
				if(Speed==3){Compare=100;}
			}
			Shuma(1,Speed);
	}
}

void Timer0_Routine() interrupt 1
{
   //这里的Counter作为全局变量也可以,不会因为中断结束而销毁
		TL0 = 0x9C;		//设置定时初值
		TH0 = 0xFF;		//设置定时初值
		Counter++;
		Counter%=100; //当Counter=100,对100取余为0,刷新为0
		if(Counter<Compare)
		{
			Moter=1;
		}
		else
		{
			Moter=0;
		}
}

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值