• 基于51单片机的PWM控制马达电机调速正反转


    资料编号:117  下面是相关功能视频演示:

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

    仿真图proteus 7.8(理论上高于7.8均可以打开)
    程序编译器:keil 5
    编程语言:C语言
    有仿真图,源码

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

    下面是程序部分展示:

     void   timer0()   interrupt   1   using   1   
      {   
                TH0=0xfc;     /*定时器初值重装载*/   
                TL0=0x18;
                
                time++; 
                P3_4=~P3_4;  
          if(dir==1)
          {
                
                if(time==high)   /*高电平持续时间结束,变低*/   
                   P2_0=th0;         /*经过反相器反相*/
                    
                    
                else   if(time==period)     /*周期时间到,变高*/   
                          {   time=0;   
                              P2_0=tl0;        /*经过反相器反相*/
                              
                               
                          }   
                  
            }
             else      if(time==high)   /*高电平持续时间结束,变低*/   
                
                   P2_1=th0;         /*经过反相器反相*/
                    
                   
                      else   if(time==period)     /*周期时间到,变高*/   
                          {   time=0;   
                              P2_1=tl0;        /*经过反相器反相*/
                              
                          }           

     void   main()   
      {   

            P0=0x00;
            P2=0x00;

            TMOD=0x01;   /*定时器0方式1*/   
            TH0=0xfc;     /*定时器装载初值,设置脉冲信号的占空比为1/5*/   
            TL0=0x18; 
            
             
            ET0=1;   /*开定时器0中断*/   
            TR0=1;    /*启动定时器0*/ 

            while(1)    
            {
                if(P0_0==1)
                EA=1;     /*开CPU中断*/

                 if(P0_1==1)
                EA=0;     /*关CPU中断*/

                if(P0_2==1)
                {
                dir=~dir;  /*转向控制*/
                while(P0_2!=0)
                {};

                }

                if(P0_3==1)
                {

                 high++;
                 if(high==30)
                 high=0;
                while(P0_3!=0)
                {};
                 }

     下面是该资料的分享下载链接:

    https://pan.baidu.com/s/1UVK4LxdJ9Cea1X9dXeAYtA?pwd=2aft

  • 相关阅读:
    如何安装Vue
    【计算机网络实验】虚拟局域网组建
    Redis实战案例及问题分析之-附近商铺(GEO数据结构)-用户签到(BitMap)-UV统计(HyperLogLog)
    基于Java毕业设计志愿者管理系统演示录像2020源码+系统+mysql+lw文档+部署软件
    Rust中derive宏的作用及常用trait
    day04-MQ
    人工智能的未来:从 Jetson 到 GPT,沙龙见闻与洞察
    数据预处理与模型评估【机器学习、人工智能、实际事例】
    今天解决了一个主从延迟导致超发的问题
    基于C#的超市进销存管理系统设计与实现
  • 原文地址:https://blog.csdn.net/m0_74295839/article/details/127837126