12. 直流电机调速(PWM)

文章介绍了直流电机的工作原理及其组成部分,包括永磁体、线圈和换向器。同时,详细阐述了PWM脉冲宽度调制的概念,以及如何通过调整PWM的占空比来控制电机速度。文中还提供了呼吸灯和直流电机驱动的示例程序,并展示了Proteus仿真的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 直流电机介绍

•直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转

•直流电机主要由永磁体(定子)、线圈(转子)和换向器组成

•除直流电机外,常见的电机还有步进电机、舵机、无刷电机、空心杯电机等

  1. 电机驱动电路

  1. PWM波介绍

•PWM(Pulse Width Modulation)即脉冲宽度调制,在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效地获得所需要的模拟参量,常应用于电机控速、开关电源等领域

•PWM重要参数:

频率= 1 /TS 占空比= TON / TS 精度= 占空比变化步距

  1. 产生PWM波方法

  1. 呼吸灯

1)程序

#include <REGX52.H>

sbit LED=P2^0;

void Delay(unsigned int t)
{
    while(t--);
}

void main()
{
    unsigned char Time,i;
    while(1)
    {
        for(Time=0;Time<100;Time++)        //改变亮灭时间,由暗到亮
        {
            for(i=0;i<20;i++)            //计次延时
            {
                LED=0;                    //LED亮
                Delay(Time);            //延时Time
                LED=1;                    //LED灭
                Delay(100-Time);        //延时100-Time
            }
        }
        for(Time=100;Time>0;Time--)        //改变亮灭时间,由亮到暗
        {
            for(i=0;i<20;i++)            //计次延时
            {
                LED=0;                    //LED亮
                Delay(Time);            //延时Time
                LED=1;                    //LED灭
                Delay(100-Time);        //延时100-Time
            }
        }
    }
}

2)Proteus仿真

  1. 直流电机驱动

1)程序

#include <REGX52.H>
#include "Nixie.H"
#include "Timer0.H"
#include "Key.H"

sbit Motor=P1^0;

unsigned char Counter,Compare,KeyNum,Speed;
void main ( )
{
    Timer0_Init();
  while(1)
  {
        KeyNum=Key();
        Nixie(1,Speed);    
        if(KeyNum==1)
        {
            Speed++;        
        }
        if(Speed<4)
        {
            switch(Speed)
            {
                case 0:Compare=0;
                break;
                case 1:Compare=25;
                break;                
                case 2:Compare=75;
                break;
                case 3:Compare=100;
                break;
            }
        }    
        else
            {
                Speed=0;
            }
  }
}

void Timer0_Routine() interrupt 1
{
    TL0 = 0x9C;        //设置定时初值
    TH0 = 0xFF;        //设置定时初值
    Counter++;
    Counter%=100;    //计数值变化范围限制在0~99
    if(Counter<Compare)    //计数值小于比较值
    {
        Motor=1;        //输出1
    }
    else                //计数值大于比较值
    {
        Motor=0;        //输出0
    }
}

2)仿真软件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值