找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7294|回复: 4
收起左侧

51单片机直流电机调速仿真与程序

[复制链接]
ID:331603 发表于 2018-9-28 16:43 | 显示全部楼层 |阅读模式
直流电机调速仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序如下:
  1. #include <reg51.h>

  2. #define uint unsigned int
  3. #define uchar unsigned char
  4.        
  5. void keycan();   //按键
  6. void delayms(x); //延时

  7. sbit  K1 = P1^6;
  8. sbit  K2 = P1^7;

  9. sbit  M1 = P0^0;
  10. sbit  M2 = P0^2;
  11. sbit  M11 = P0^1;
  12. sbit  M22 = P0^3;

  13. uint AUXR;

  14. uint temp1=0,temp2=0;

  15. void Timer0Init(void)                //10微秒@12.000MHz
  16. {
  17.         AUXR &= 0x7F;                //定时器时钟12T模式
  18.         TMOD &= 0xF0;                //设置定时器模式
  19.         TMOD |= 0x01;                //设置定时器模式
  20.         TL0 = 0xF6;                //设置定时初值
  21.         TH0 = 0xFF;                //设置定时初值
  22.         TF0 = 0;                //清除TF0标志
  23.         TR0 = 1;                //定时器0开始计时
  24. }

  25. uint c=0,sudu=0;

  26. void time_0 () interrupt 1
  27. {
  28.         TL0 = 0xF6;                //设置定时初值
  29.         TH0 = 0xFF;                //设置定时初值
  30.         c++;
  31. }

  32. void main()
  33. {
  34.         uint i=0;
  35.         P1=0XFF;
  36.         P0=0X00;
  37.         Timer0Init();
  38.         ET0=1;
  39.         EA=1;
  40.         while(1)
  41.         {
  42.                 keycan();//按键       
  43.                 M11=0;
  44.                 M22=0;
  45.                 if(temp1==0)
  46.                 {
  47.                         M1=0;
  48.                 }
  49.                 if(temp1==1)
  50.                 {
  51.                         if(c<=30) M1=1;
  52.                         else      M1=0;
  53.                     if(c>114)  c=0;
  54.                 }                       
  55.                 if(temp1==2)
  56.                 {                       
  57.                         if(c<=80) M1=1;
  58.                         else      M1=0;  
  59.                         if(c>114)  c=0;
  60.                 }       
  61.                 if(sudu==1)
  62.                 {
  63.                    M2=1;
  64.                 }
  65.         }       
  66. }


  67. void keycan()//按键
  68. {
  69.         if(K1==0)
  70.         {
  71.                 delayms(10);
  72.                 if(K1==0)
  73.                 {
  74.                         temp1++;
  75.                         if(temp1>=3) temp1=0;                       
  76.                 }
  77.                 while(!K1);
  78.         }
  79.         if(K2==0)
  80.         {
  81.                 delayms(10);
  82.                 if(K2==0)
  83.                 {
  84.                         sudu=1;
  85.                 }
  86.                 while(!K2);
  87.         }       
  88. }
  89. void delayms(x)//延时
  90. {
  91.         uint i=0,j=0;
  92.         for(i=x;i>0;i--)
  93.                 for(j=110;j>0;j--);
  94. }
复制代码

所有资料51hei提供下载:
单片机作业.zip (109.3 KB, 下载次数: 132)

评分

参与人数 2黑币 +52 收起 理由
stu + 2 共享资料的黑币奖励!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:89286 发表于 2018-9-28 20:12 | 显示全部楼层
thanks for sharing
回复

使用道具 举报

ID:282457 发表于 2018-11-25 10:17 | 显示全部楼层
本帖最后由 qqhrchen 于 2018-11-25 10:47 编辑

这个程序肯定不能PWM调速的。
51单片机没有PWM功能,只能用定时器模拟PWM的实现。
必须用到定时器的中断,即PWM的实现是在定时中断里完成的。

评分

参与人数 1黑币 +90 收起 理由
admin + 90 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:282457 发表于 2018-11-25 10:29 | 显示全部楼层
本帖最后由 qqhrchen 于 2018-12-1 10:43 编辑

void T0 (void ) interrupt 0
{static unsigned char i;
   i++;
  if(i>PWMH)   //PWMH为高电平周期
    {
     PWMout=0;//1时电机转动   
     }
  else if(i>PWM) //PWM为PWM周期
   {
      PWMout=1;
      i=0;
   }
}
回复

使用道具 举报

ID:750834 发表于 2020-5-13 15:13 | 显示全部楼层
为什么打不开啊
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表