找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5774|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)PWM波調(diào)速-按鍵實(shí)現(xiàn)速度加減 程序+視頻

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:523178 發(fā)表于 2020-5-5 11:47 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

  51單片機(jī)是可以輸出PWM的,相對(duì)麻煩。此時(shí)需要用到內(nèi)部定時(shí)器來(lái)實(shí)現(xiàn),可用兩個(gè)定時(shí)器實(shí)現(xiàn),也可以用一個(gè)定時(shí)器實(shí)現(xiàn)。

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

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

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

提取碼:kqew


單片機(jī)源程序如下:


  1. //12MHz的晶振,產(chǎn)生頻率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;         //定時(shí)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;  //關(guān)閉定時(shí)器
  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. }
復(fù)制代碼

所有程序51hei提供下載:

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




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表