基于51单片机的PWM控制马达电机调速正反转(仿真+源码+全套资料)

资料编号:117

仿真图proteus 7.8
程序编译器:keil 5
编程语言:C语言

采用51单片机,用PWM控制电机脉冲频率应控制在25HZ~35HZ之间
定时1ms,1个周期30ms,脉冲频率为33HZ 来控制马达调速以及正反转

具体功能请看下方演示视频:

117-基于51单片机的PWM控制马达电机调速正反转(仿真+源码+全套资料)

基于51单片机的PWM控制马达电机调速正反转(仿真+源码+全套资料)_第1张图片

单片机最小系统介绍
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。本文的单片机特指51单片机,具体芯片型号是 AT89C52。需注意STC89C51,STC89C52,AT89C51,AT89C52都是51单片机的一种具体芯片型号。

最小系统组成:

51单片机最小系统:单片机、复位电路、晶振(时钟)电路、电源

最小系统用到的引脚

1、主电源引脚(2根)

VCC:电源输入,接+5V电源

GND:接地线

2、外接晶振引脚(2根)

XTAL1:片内振荡电路的输入端

XTAL2:片内振荡电路的输出端

3、控制引脚(4根)

RST/VPP:复位引脚,引脚上

复位电路
一般来说,在电路图中,电容的的大小是10uf,电阻的大小是10k。(不特指本电路,具体参数看仿真图)

在5V正常工作的51单片机中小于1.5V的电压信号为低电平信号,而大于1.5V的电压信号为高电平信号。可以算出电容充电到电源电压的0.7倍,即电容两端电压为3.5V、电阻两端电压为1.5V时,需要的时间约为T=RC=10K*10UF=0.1S。

也就是说在单片机上电启动的0.1S内,电容两端的电压从0-3.5V不断增加,这个时候10K电阻两端的电压为从5-1.5V不断减少(串联电路各处电压之和为总电压),所以RST引脚所接收到的电压是5V-1.5V的过程,也就是高电平到低电平的过程。

单片机RST引脚是高电平有效,即复位;低电平无效,即单片机正常工作。所以在开机0.1S内,单片机系统RST引脚接收到了时间为0.1S左右的高电平信号,所以实现了自动复位。

在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。

晶振电路
晶振基本概念 晶振全名叫晶体振荡器,每个单片机系统里都有晶振,晶振是由石英晶体经过加工并镀上电极而做成的,主要的特性就是通电后会产生机械震荡,可以给单片机提供稳定的时钟源,晶振提供时钟频率越高,单片机的运行速度也就越快。 晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

晶振起振后, 产生的振动信号会通过XTAL1引脚, 依次经过振荡器和时钟发生器的处理,得到机器周期信号,作为指令操作的依据。51单片机常用的晶振是12M和11.0592M

基于51单片机的PWM控制马达电机调速正反转(仿真+源码+全套资料)_第2张图片

资料相关源码:

#include     
  typedef   unsigned   char   uchar;   
  sbit   P0_0=P0^0;
  sbit   P0_1=P0^1; 
  sbit   P0_2=P0^2;
  sbit   P0_3=P0^3; 
  sbit   P2_0=P2^0;
  sbit   P2_1=P2^1; 
  uchar   time=0;   
  uchar   period=25;   
  uchar   high=10;
  uchar   th1=0;
  uchar   tl1=0;
  uchar   th0=0; 
  uchar   tl0=0;     
    
  void   timer0()   interrupt   1   using   1   
  {   
            TH0=0x3c;     /*定时器初值重装载*/   
            TL0=0xb0;
            //TH0=0xc3;/*定时器初值重装载*/
            //TL0=0x50;  
            time++;   
            if(time==high)   /*高电平持续时间结束,变低*/   
            {   P2_0=tl0;
                P2_1=tl1;        
              }   
            else   if(time==period)     /*周期时间到,变高*/   
                      {   time=0;   
                          P2_0=th0;
                          P2_1=th1;
                             
                      }   
    
  }   
    
  void   main()   
  {   
        TMOD=0x01;   /*定时器0方式1*/   
        TH0=0x3c;     /*定时器装载初值,设置脉冲信号的占空比为1/5*/   
        TL0=0xb0; 
        //TH0=0xc3;/*定时器装载初值,设置脉冲信号的占空比为4/5*/
        //TL0=0x50;    
        EA=1;     /*开CPU中断*/   
        ET0=1;   /*开定时器0中断*/   
        TR0=1;/*启动定时器0*/  
        
        if(P0_2==1)
         {
          th0=1;
          tl0=0;
          th1=0;
          tl1=0;
              }

          if(P0_3==1)
         {
          th0=0;
          tl0=0;
          th1=1;
          tl1=0;
              }
        while(1)     /*等待中断*/   
        {}   
    
  }   

PWM对电机转速的控制

占空比可以实现对电机转速的调节,我们知道,占空比是高电平在一个周期之中的比值,高电平的所占的比值越大,占空比就越大,对于直流电机来讲,电机输出端引脚是高电平电机就可以转动,当输出端高电平时,电机会转动,但是是一点一点的提速,在高电平突然转向低电平时,电机由于电感有防止电流突变的作用是不会停止的,会保持这原有的转速,以此往复,电机的转速就是周期内输出的平均电压值,所以实质上我们调速是将电机处于一种,似停非停,似全速转动又非全速转动的状态,那么在一个周期的平均速度就是我们占空比调出来的速度了,

在电机控制中,电压越大,电机转速越快,而通过PWM输出不同的模拟电压,便可以使电机达到不同的输出转速。

当然,在电机控制中,不同的电机都有其适应的频率 频率太低会导致运动不稳定,如果频率刚好在人耳听觉范围,有时还会听到呼啸声。频率太高的电机可能反应不过来。

资料下载链接https://pan.baidu.com/s/1UVK4LxdJ9Cea1X9dXeAYtA?pwd=2aft

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