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

標題: 單片機PWM波調速-按鍵實現速度加減 程序+視頻 [打印本頁]

作者: jkla    時間: 2020-5-5 11:47
標題: 單片機PWM波調速-按鍵實現速度加減 程序+視頻

  51單片機是可以輸出PWM的,相對麻煩。此時需要用到內部定時器來實現,可用兩個定時器實現,也可以用一個定時器實現。

  用兩個定時器的方法是用定時器T0來控制頻率,定時器T1來控制占空比。大致的的編程思路是這樣的:T0定時器中斷讓一個I0口輸出高電平,在這個定時器T0的中斷當中起動定時器T1,而這個T1是讓IO口輸出低電平,這樣改變定時器T0的初值就可以改變頻率,改變定時器T1的初值就可以改變占空比。

  下面重點介紹用一個定時器的實現PWM的方法。以周期為0.1ms(10KHz)為例,要產生其它頻率的PWM波,程序中只需作簡單修改即可。用一個定時器時(如定時器T0),首先要確定PWM的周期T和占空比D,確定了這些以后,就可以用定時器產生一個時間基準t,比如定時器溢出n次的時間是PWM的高電平的時間,則D*T=n*t,類似的可以求出PWM低電平時間需要多少個時間基準n。

下面的程序讓51單片機產生一個100KHz的PWM方波,使用按鍵加減速度,在實際調試中,發現占空比D達到17%時即可轉動,但是需要外力啟動,此時轉速最慢;在沒有外力的情況下,占空比需要達到75%才可以轉動,此時轉速已經非常快;通過按鍵將占空比D調節到%17或%16時停止轉動。占空比的值是LCD1602顯示的。附上代碼和演示視頻鏈接:鏈接:https://pan.baidu.com/s/1BqV4morVQeHN2uTd89DRWw

提取碼:kqew


單片機源程序如下:


  1. //12MHz的晶振,產生頻率10KHz,占空比為x的PWM波
  2. #include "reg52.h"
  3. #include "lcd.h"
  4. typedef unsigned int u16;
  5. typedef unsigned char u8;

  6. sbit PWM_LED = P1^0;
  7. sbit KeyUp   = P2^0;
  8. sbit KeyDown = P2^1;
  9. u8 value = 1;
  10. u8 Br, Sr, Gr;
  11. u8 str[] = {"Moto Speed Trim"};
  12. u8 str1[] = {"PWM:"};
  13. void delay(u16 i)
  14. {
  15.         while(i--);
  16. }
  17. void Timer0_Init(void)
  18. {
  19.         TMOD |= 0x01;
  20.         TH0 = 0xFF;
  21.         TL0 = 0x9C;         //定時0.01ms
  22.         TR0 = 1;
  23.         ET0 = 1;
  24.         EA  = 1;
  25. }
  26. void datapros(u8 val)
  27. {
  28.         Br = val / 100 + 0x30;
  29.         Sr = val % 100 / 10 + 0x30;
  30.         Gr = val % 10 + 0x30;
  31. }

  32. void main(void)
  33. {
  34.         PWM_LED = 0;
  35.         Timer0_Init();
  36.         LcdInit();
  37.         while(1)
  38.         {
  39.                 if(KeyUp != 1)
  40.                 {
  41.                          delay(1000);
  42.                         if(KeyUp != 1)
  43.                         {
  44.                                
  45.                         }
  46.                         while(!KeyUp);
  47.                         value++;
  48.                         if(value == 100)
  49.                         {
  50.                                  value = 1;
  51.                         }
  52.                 }
  53.                 if(KeyDown != 1)
  54.                 {
  55.                          delay(1000);
  56.                         if(KeyDown != 1)
  57.                         {

  58.                         }
  59.                         while(!KeyDown);
  60.                         value--;
  61.                         if(value == 0)
  62.                         {
  63.                                  value = 1;
  64.                         }
  65.                 }
  66.                 datapros(value);
  67.                 LcdShowStr(0,0,str);
  68.                 LcdShowStr(0,1,str1);
  69.                 DisplayOneChar(5,1,Br);
  70.                 DisplayOneChar(6,1,Sr);
  71.                 DisplayOneChar(7,1,Gr);
  72.                 DisplayOneChar(8,1,'%');               
  73.         }        
  74. }
  75. void Timer0() interrupt 1
  76. {
  77.         static u8 time = 0;

  78.         TR0 = 0;  //關閉定時器
  79.         TH0 = 0xFF;
  80.         TL0 = 0x9C;        //重裝初值
  81.         TR0 = 1;
  82.         time++;
  83.         if(time > 100)
  84.         {
  85.                  time = 0;
  86.         }
  87.         if(time < value)
  88.         {
  89.                  PWM_LED = 1;
  90.         }
  91.         else
  92.                 PWM_LED = 0;
  93. }
復制代碼

所有程序51hei提供下載:

PWM波-按鍵控制電機速度.rar (18.75 KB, 下載次數: 44)









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