标题: 51单片机直流电机调速程序,1KHz的PWM波 [打印本页]

作者: Ascii.    时间: 2018-12-9 21:09
标题: 51单片机直流电机调速程序,1KHz的PWM波
  直流电机调速,占空比可调。小白第一次发帖

电路原理图如下:

单片机源程序如下:
  1. #include "reg51.h"
  2. #include "led.h"
  3. #include "delay.h"

  4. uint d=100;  //占空比
  5. uint b=65436;  //初值计时100us
  6. bit flag=0;

  7. void timer0(void) interrupt 1  //中断部分代码,见下文的释疑
  8. {
  9.         if(flag)
  10.         {
  11.      TH0 = b/256;         //900
  12.      TL0 = b%256;
  13.          flag = 0;
  14.          P2_4 = 0;
  15.          b=65536-d;
  16.         }
  17.         else
  18.         {
  19.      TH0 = b/256;          //100
  20.      TL0 = b%256;
  21.          flag = 1;
  22.          P2_4 = 1;
  23.          b=64536+d;
  24.         }
  25. }

  26. void main()
  27. {   
  28.     TMOD = 0x01; //TMOD的值表示定时器工作方式选择                              
  29.     TH0 = b/256; //写入初始值,初始值可以决定定时多久
  30.     TL0 = b%256;
  31.     TF0 = 0; //计数到时TF0为1,即当TH0 = 0xff;TL0 = 0xff;再运行一步TF0 = 1;
  32.     TR0 = 1; //开始计数,从这时起,每运行一步TH0和TL0都会增加,直到TH0 = 0xff;TL0 = 0xff;                        
  33.     ET0 = 1; //允许定时器0中断
  34.     EA=1;   //开总中断
  35.     while(1)
  36.         {
  37.          if(P3!=0xff)                         //按键对应占空比调整
  38.          {        
  39.             TR0 = 0;
  40.                   delay_ms(10);
  41.        if((P3_4==0)&&(d>=100))
  42.            {
  43.            d=d-100;                                         //10倍程可调减
  44.            }
  45.           if((P3_5==0)&&(d>=10))
  46.           {
  47.            d=d-10;                                        //1倍程可调减
  48.           }
  49.           if(P3_6==0)
  50.           {         
  51.            d=d+10;                                           //1倍程可调加
  52.           }
  53.           if(P3_7==0)
  54.           {
  55.            d=d+100;                                          //10倍程可调加
  56.           }
  57.           while(P3!=0xff);
  58.           TR0 = 1;
  59.         }
  60.           if(d<=10)                                                 //设置占空比最大最小值
  61.           {
  62.                  d=10;
  63.           }
  64.           if(d>=990)
  65.           {
  66.              d=990;
  67.           }
  68.           delay_ms(2);
  69.           show_led_one(0,(d%100)/10);                 //实时显示占空比
  70.           delay_ms(2);
  71.           show_led_one(1,d/100);
  72.         }        
  73. }
复制代码

所有资料51hei提供下载:
PWM.zip (39.21 KB, 下载次数: 47)
PWM.pdf (37.2 KB, 下载次数: 26)


作者: admin    时间: 2018-12-10 03:39
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者: baka0000    时间: 2018-12-10 08:21
感谢大佬
作者: baka0000    时间: 2018-12-10 08:21
大佬可以的,感谢分享。。。。。。。。。。。

作者: Ascii.    时间: 2018-12-10 20:55
根据管理员建议,附上了原理图
作者: 机智的愚人    时间: 2018-12-11 14:40
感谢大佬的分享
作者: 931121667    时间: 2018-12-29 10:52
admin 发表于 2018-12-10 03:39
补全原理图或者详细说明一下电路连接即可获得100+黑币

你好  有没有四个按键的直流电机调速程序 启停  正反转 加速 减速  谢谢大佬

Screenshot_20181228-211705.jpg (226.85 KB, 下载次数: 33)

Screenshot_20181228-211705.jpg





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1