欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機驅動直流電機,測試可用,可調速 [打印本頁]

作者: 紫小義    時間: 2018-5-21 10:14
標題: 51單片機驅動直流電機,測試可用,可調速
51 驅動直流電機,測試可用,可調速

單片機源程序如下:
  1. #include <REG52.H>               //包含51單片機相關的頭文件
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. /*==================
  5. 對各個輸出端口的定義
  6. 對占空比的端口定義
  7. ====================*/
  8. sbit IN4=P1^3;                          //定義左輪前進  
  9. sbit IN3=P1^2;                          //定義左輪后退  
  10. sbit IN1=P1^0;                          //定義右輪前進  
  11. sbit IN2=P1^1;                                                        //定義右輪后退
  12. sbit ENA=P1^6;                                                     //定義右輪使能
  13. sbit ENB=P1^7;                                                    //定義左輪使能
  14. uint Duty_left;                                                        //定義左輪占空比
  15. uint Duty_right;                                                //定義右輪占空比
  16. uint i;                                                                    //中斷中控制占空比變量

  17. /*===========
  18. ms級延時函數
  19. =============*/
  20. void delay(uint n)  
  21. {
  22.     int x,y;
  23.         for(x=n;x>0;x--)
  24.         for(y=115;y>0;y--);
  25. }
  26. /*=======
  27. 停止函數
  28. =========*/
  29. void tingzhi()
  30. {
  31.    Duty_left=0;                        //左輪占空比
  32.    Duty_right=0;                //右輪占空比
  33.    IN1=0;                                   
  34.    IN2=0;                                   
  35.    IN3=0;                                 
  36.    IN4=0;

  37. }

  38. /*=======
  39. 前進函數
  40. =========*/
  41. void qianjin()
  42. {  
  43.    Duty_left=100;                         //左輪占空比
  44.    IN4=0;
  45.    IN3=1;
  46.    delay(3000);
  47.    ENB=0;
  48.    delay(3000);
  49.    ENB=1;
  50. }




  51. /*============
  52. pwm初始化函數
  53. ==============*/
  54. void pwm_init()               
  55. {
  56.     TMOD |= 0x01;        //設置定時器工作方式0x01
  57.     TH0=(65536-1)/256; //取約150HZ,12M晶振,每次定時66us,分100次,
  58.         TL0=(65536-1)%256;        //這樣開頭定義的變量正好直接表示占空比的數值
  59.         EA=1;                          //打開總中斷
  60.         ET0=1;                          //開啟定時器0中斷
  61.         TR0=1;                          //啟動定時器0
  62. }
  63. main()
  64. {       
  65.    pwm_init();
  66.    while(1)
  67.    {
  68.                 qianjin();
  69.    }
  70. }
  71. /*========
  72. 中斷函數
  73. ==========*/
  74. void T0_timer() interrupt 1
  75. {
  76.            i++;                 
  77.         if(i<=Duty_right)
  78.           ENA=1;
  79.         else
  80.           ENA=0;
  81.         if(i<=Duty_left)
  82.           ENB=1;
  83.         else
  84.           ENB=0;
  85.           if(i==100)
  86.           {
  87.                   i = 0;
  88.           }
  89.     TH0=(65536-1)/256; //取約150HZ,12M晶振,每次定時66us,分100次,
  90.         TL0=(65536-1)%256;        //這樣開頭定義的變量正好直接表示占空比的數值       
  91. }
復制代碼

所有資料51hei提供下載:
直流電機驅動.zip (21.86 KB, 下載次數: 91)



作者: 白木林    時間: 2018-11-30 23:46
還是不太懂它的原理
作者: qqhrchen    時間: 2018-12-1 02:18
TH0=(65536-1)/256; //取約150HZ,12M晶振,每次定時66us,分100次,
TL0=(65536-1)%256;        //這樣開頭定義的變量正好直接表示占空比的數值

如果采用12T的89c52的話,這個定時時間應該是1us,頻率是1MHz。
如果是1T的CPU,定時時間約1/12us,頻率是12MHz.
正確的應該是(不會是故意寫錯的吧):
TH0=(65536-66)/256; //取約150HZ,12M晶振,每次定時66us,分100次,
TL0=(65536-66)%256;  
作者: Wikkings_Bob    時間: 2019-5-18 23:30
沒有圖么?
作者: Wikkings_Bob    時間: 2019-5-18 23:36
i都不初始化變量么?
作者: Wikkings_Bob    時間: 2019-5-18 23:37
定時器0溢出標志位也沒清除
作者: 漠城    時間: 2020-9-8 22:18
我個人覺得,這程序不能實現調速。整體看下來,這程序是截取的,而且截取的不對,怎么看都有問題。
作者: luogu    時間: 2020-9-11 16:08
直接硬件生成PWM吧




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1