51单片机pwm控制直流电机,内含程序源码及Proteus仿真电路图

[复制链接]
查看5 | 回复0 | 2020-6-6 09:42:24 | 显示全部楼层 |阅读模式
pwm控制直流电机,内含程序源码及仿真电路图 51单片机pwm控制直流电机.zip (66.11 KB, 售价: 2 工控币)
1.png
部分代码:
  1. /*以下是一段产生占空比为20%的脉冲信号的c51程序,我想电机转速*/
  2.   /*对应于一定的占空比,如果你要改变占空比,可能需要建立一个对应*/
  3.   /*于不同转速的参数表(如定时器初值等),查表*/
  4.   /*得到不同参数,以改变占空比和转速。你用什么驱动电路?*/
  5.                                                                                                                   
  6.   /*采用6MHz晶振,在P1.0脚上输出周期为2.5s,占空比为20%的脉冲信号*/   
  7.   /*定时100ms,周期2.5s需25次中断,高电平0.5s需5次中断*/   
  8.    
  9. #include   <reg51.h>   
  10.   typedef   unsigned   char   uchar;   
  11.   sbit   P0_0=P0^0;
  12.   sbit   P0_1=P0^1;
  13.   sbit   P0_2=P0^2;
  14.   sbit   P0_3=P0^3;
  15.   sbit   P2_0=P2^0;
  16.   sbit   P2_1=P2^1;
  17.   uchar   time=0;   
  18.   uchar   period=25;   
  19.   uchar   high=10;
  20.   uchar   th1=0;
  21.   uchar   tl1=0;
  22.   uchar   th0=0;
  23.   uchar   tl0=0;     
  24.    
  25.   void   timer0()   interrupt   1   using   1   
  26.   {   
  27.             TH0=0x3c;     /*定时器初值重装载*/   
  28.             TL0=0xb0;
  29.             //TH0=0xc3;/*定时器初值重装载*/
  30.                         //TL0=0x50;  
  31.             time++;   
  32.             if(time==high)   /*高电平持续时间结束,变低*/   
  33.             {   P2_0=tl0;
  34.                             P2_1=tl1;               
  35.                           }   
  36.             else   if(time==period)     /*周期时间到,变高*/   
  37.                       {   time=0;   
  38.                           P2_0=th0;
  39.                                                   P2_1=th1;
  40.                                                      
  41.                       }   
  42.    
  43.   }   
  44.    
  45.   void   main()   
  46.   {   
  47.         TMOD=0x01;   /*定时器0方式1*/   
  48.         TH0=0x3c;     /*定时器装载初值,设置脉冲信号的占空比为1/5*/   
  49.         TL0=0xb0;
  50.                 //TH0=0xc3;/*定时器装载初值,设置脉冲信号的占空比为4/5*/
  51.                 //TL0=0x50;   
  52.         EA=1;     /*开CPU中断*/   
  53.         ET0=1;   /*开定时器0中断*/   
  54.         TR0=1;/*启动定时器0*/  
  55.                
  56.                 if(P0_2==1)
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则