直流电机介绍

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

电机驱动电路

PWM介绍

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

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

产生PWM方法

  • 模型结构

  • 波形

LED呼吸灯

#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
            }
        }
    }
}

直流电机调速

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

sbit Motor=P1^0;

unsigned char Counter,Compare;    //计数值和比较值,用于输出PWM
unsigned char KeyNum,Speed;

void main()
{
    Timer0_Init();
    while(1)
    {
        KeyNum=Key();
        if(KeyNum==1)
        {
            Speed++;
            Speed%=4;
            if(Speed==0){Compare=0;}    //设置比较值,改变PWM占空比
            if(Speed==1){Compare=50;}
            if(Speed==2){Compare=75;}
            if(Speed==3){Compare=100;}
        }
        Nixie(1,Speed);
    }
}

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

参考资料

51单片机入门教程-2020版 程序全程纯手打 从零开始入门\_哔哩哔哩\_bilibili

最后修改:2023 年 10 月 21 日
如果觉得我的文章对你有用,请随意赞赏