chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PWM是什么?有什么用?PWM能玩出什么花樣?

冬至子 ? 來(lái)源:ZYuanBlogs ? 作者:激沄RagingWaves ? 2023-10-31 17:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、PWM是什么?有什么用?

PWM指的是脈沖寬度調(diào)制技術(shù),通過(guò)對(duì)脈沖寬度的調(diào)節(jié)可以達(dá)到通信(如控制舵機(jī))、模擬“模擬輸出”(如調(diào)節(jié)燈的亮度),前者在以后再結(jié)合舵機(jī)來(lái)講,本文側(cè)重講后者。

圖片

首先,我們來(lái)了解幾個(gè)概念:

1、PWM頻率、PWM周期

圖片

這是一個(gè)約為50Hz的PWM輸出波形

圖片

這個(gè)PWM的周期約為20ms

PWM頻率指1秒的時(shí)間里PWM運(yùn)行的次數(shù);

PWM周期指一次完整的PWM輸出所使用的時(shí)間。

2、占空比

圖片

從上往下,占空比分別為25%、50%、75%

占空比指在一個(gè)周期內(nèi)接通的時(shí)間占這一周期的比例。

明白這些后,恭喜你已經(jīng)基本掌握PWM的原理了!

我們知道單片機(jī)的IO口只有0和1兩種輸出狀態(tài),只能控制LED的亮與滅,如果我們想要得到下面這樣的輸出效果,思考一下,結(jié)合PWM我們可以怎么做?

圖片

你可能已經(jīng)想到了,IO口保持高電平(1)時(shí)LED最亮,此時(shí)電壓為5V(以5V電壓工作的單片機(jī)為例),如果在里面插入低電平,輸出10101010...不就相當(dāng)于輸出2.5V了嗎?

不嚴(yán)謹(jǐn)?shù)卣f(shuō),這樣使用PWM確實(shí)能達(dá)到“模擬輸出”的效果,但如果真的需要模擬輸出,單單這樣是不夠的(所以前面標(biāo)了引號(hào)),在此不進(jìn)行細(xì)說(shuō)。

二、怎樣設(shè)計(jì)PWM程序?

我們先來(lái)構(gòu)造這么一個(gè)框架:

1、確定一個(gè)單位時(shí)間t,每個(gè)t內(nèi)固定地輸出0或1;

2、過(guò)了n個(gè)t完成一個(gè)PWM周期;

3、使用程序控制一個(gè)周期內(nèi)輸出1的數(shù)量為m,輸出0的數(shù)量為(n-m)。

有了上面的框架,設(shè)計(jì)程序就不難了:

我們可以使用定時(shí)器,每隔一定的時(shí)間進(jìn)入一次中斷,并記錄進(jìn)入中斷的次數(shù)x,直到完成一次PWM周期,將x歸零;

設(shè)我們所需要的PWM輸出占空比為y,當(dāng)x<=y時(shí)輸出高電平,x>y時(shí)輸出低電平。

這樣,我們的程序基本就設(shè)計(jì)出來(lái)了,是不是很簡(jiǎn)單?(〃'▽'〃)

在正式編寫(xiě)程序前,我們還需要考慮一些小問(wèn)題:

因?yàn)?a target="_blank">51單片機(jī)的運(yùn)行頻率不高,PWM的頻率也不能設(shè)計(jì)得太高,過(guò)于頻繁地進(jìn)入中斷也會(huì)影響程序的正常運(yùn)行。

在下面的例程中,我所設(shè)置的定時(shí)器中斷的間隔為0.1ms,每20ms完成一次PWM周期。

在這一小節(jié)的最后,我們整理一下思路,可以得到下面的流程圖:

圖片

三、寫(xiě)個(gè)程序試試看!

按上面的流程圖,我們就可以寫(xiě)一個(gè)控制LED亮度的程序了:

#include < reg52.h >


#define PWM_T 200                      //產(chǎn)生中斷的時(shí)間,因?yàn)槭?4MHz,200即100微秒(0.1毫秒)
#define LED P1


int PWM_count0 = 0;                    //進(jìn)入中斷的次數(shù)
int PWM0 = 100;                        //控制PWM的占空比,下同
int PWM1 = 170;
int PWM2 = 188;
int PWM3 = 198;


sbit LED0 = P1^0;                      //LED引腳定義,下同
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;


void PWM_Start()                      //PWM初始化函數(shù),打開(kāi)了定時(shí)器0
{
  EA = 1;
  ET0 = 1;
  TMOD = 0x09;
  TR0 = 1;


  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;
}


void main()
{
  PWM_Start();                        //PWM開(kāi)始運(yùn)行


  while(1)
  {
    if(PWM_count0 <= PWM0)            //調(diào)節(jié)LED0的亮度
    {
      LED0 = 1;
    }
    else
    {
      LED0 = 0;
    }


    if(PWM_count0 <= PWM1)            //調(diào)節(jié)LED1的亮度
    {
      LED1 = 1;
    }
    else
    {
      LED1 = 0;
    }


    if(PWM_count0 <= PWM2)            //調(diào)節(jié)LED2的亮度
    {
      LED2 = 1;
    }
    else
    {
      LED2 = 0;
    }


    if(PWM_count0 <= PWM3)            //調(diào)節(jié)LED3的亮度
    {
      LED3 = 1;
    }
    else
    {
      LED3 = 0;
    }
  }
}


void Timer0() interrupt 1
{
  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;


  PWM_count0++;
  if(PWM_count0 == 200)                //完成了一個(gè)PWM周期,計(jì)數(shù)變量清零
  {
    PWM_count0 = 0;
  }
}

把上面的程序編譯后下載到開(kāi)發(fā)板上:

圖片

小提示:人眼對(duì)亮度的感覺(jué)不是線性變化的,因此LED0與LED1雖然占空比相差較大,但肉眼感覺(jué)亮度不相上下,感興趣的可以去研究一下。

用邏輯分析儀收集一下IO口的輸出信息:

圖片

黃框里的為一個(gè)PWM周期

上面的程序還有一些需要注意的地方:

1、記得加while循環(huán),因?yàn)镻WM輸出是持續(xù)的,沒(méi)有循環(huán)就只會(huì)進(jìn)行一個(gè)周期;

2、晶振頻率建議設(shè)置為24MHz,12MHz也可以,相應(yīng)地定時(shí)器中斷時(shí)間也要更改。

我們可以將上面的程序進(jìn)一步優(yōu)化,如果我們把if語(yǔ)句寫(xiě)成子函數(shù),通過(guò)參數(shù)控制占空比,返回值控制0和1的輸出,程序會(huì)簡(jiǎn)化很多:

#include < reg52.h >


#define PWM_T 200                      //產(chǎn)生中斷的時(shí)間,因?yàn)槭?4MHz,200即100微秒(0.1毫秒)
#define LED P1


int PWM_count0 = 0;                    //進(jìn)入中斷的次數(shù)
int PWM0 = 100; //去掉7~10行                       //控制PWM的占空比,下同
int PWM1 = 170;
int PWM2 = 188;
int PWM3 = 198;


sbit LED0 = P1^0;                      //LED引腳定義,下同
sbit LED1 = P1^1;
sbit LED2 = P1^2;
sbit LED3 = P1^3;


void PWM_Start()                      //PWM初始化函數(shù),打開(kāi)了定時(shí)器0
{
  EA = 1;
  ET0 = 1;
  TMOD = 0x09;
  TR0 = 1;


  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;
}


int PWM(int PWM_value)                //控制PWM輸出的子函數(shù)
{
  if(PWM_count0 <= PWM_value)
  {
    return 1;
  }
  else
  {
    return 0;
  }
}


void main()
{
  PWM_Start();                        //PWM開(kāi)始運(yùn)行


  while(1)
  {
    LED0 = PWM(100);                  //調(diào)節(jié)LED0的亮度
    LED1 = PWM(170);                  //調(diào)節(jié)LED1的亮度
    LED2 = PWM(188);                  //調(diào)節(jié)LED2的亮度
    LED3 = PWM(198);                  //調(diào)節(jié)LED3的亮度
  }
}


void Timer0() interrupt 1
{
  TH0 = (65536-PWM_T)/256;
  TL0 = (65536-PWM_T)%256;


  PWM_count0++;
  if(PWM_count0 == 200)                //完成了一個(gè)PWM周期,計(jì)數(shù)變量清零
  {
    PWM_count0 = 0;
  }
}

可以看到,寫(xiě)成子函數(shù)后調(diào)用PWM輸出方便了不少。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 51單片機(jī)
    +關(guān)注

    關(guān)注

    277

    文章

    5710

    瀏覽量

    127237
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3298

    瀏覽量

    118730
  • 脈沖寬度調(diào)制
    +關(guān)注

    關(guān)注

    7

    文章

    81

    瀏覽量

    13980
  • 邏輯分析儀
    +關(guān)注

    關(guān)注

    3

    文章

    216

    瀏覽量

    23717
  • PWM輸出
    +關(guān)注

    關(guān)注

    1

    文章

    66

    瀏覽量

    6391
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    PWM應(yīng)用

    PWM
    橙群微電子
    發(fā)布于 :2023年03月09日 09:11:48

    【FPGA設(shè)計(jì)實(shí)例】JTAG讓你的FPGA玩出新花樣

    本帖最后由 eehome 于 2013-1-5 09:46 編輯 JTAG讓你的FPGA玩出新花樣第1部分:JTAG是什么?第2部分:JTAG如何的工作第3部分:查詢JTAG鏈第4部分:運(yùn)行
    發(fā)表于 03-20 15:03

    stc單片機(jī)輸出pwm,旁邊再連上enc28j60模塊什么用

    芯片的stc12c5410ad,這芯片輸出pwm,然后再連上enc28j60網(wǎng)絡(luò)模塊,這網(wǎng)絡(luò)模塊什么用
    發(fā)表于 05-11 21:25

    這個(gè)電路干什么用的?PWM_P接的是PMOS;PWMP接的是單片機(jī)?

    這個(gè)電路干什么用的?PWM_P接的是PMOS;PWMP接的是單片機(jī)。這是移動(dòng)電源上的一個(gè)電路。
    發(fā)表于 07-09 22:01

    請(qǐng)問(wèn)PWM轉(zhuǎn)為線性電壓什么用

    單片機(jī)輸出PWM信號(hào),經(jīng)過(guò)RC變換再經(jīng)過(guò)跟隨器輸出線性電壓,這樣
    發(fā)表于 04-16 06:48

    如何把手中的這顆LED燈玩出新花樣

    學(xué)會(huì)了如何點(diǎn)亮LED燈,那么接下來(lái)的就是如何把手中的這顆LED燈玩出新花樣,在上一篇文章的基礎(chǔ)上這次我加入了按鍵去抖和LED呼吸燈的程序。根據(jù)電路原理圖可知,按鍵一端分別連接PA0和PA1,另一端連接GND。也就是說(shuō)當(dāng)PA0或PA1按下的時(shí)候,按鍵與GND導(dǎo)通,使得IO端口短接到...
    發(fā)表于 01-24 07:35

    斬波器什么用

    斬波器什么用找來(lái)一個(gè)東西象電子管的樣子,全金屬封裝,7腳,常州繼電器廠出的。ZB-2-6.3    6.3v/50HZ。不知干什么用的,請(qǐng)教大家?! szsw回復(fù)
    發(fā)表于 11-10 10:28 ?1929次閱讀

    vivoNEX雙屏版玩游戲怎么樣

    雙屏版獨(dú)特的設(shè)計(jì)在拍照方面玩出花樣,而作為一名游戲玩家,我發(fā)現(xiàn)它還能玩出更多花樣
    的頭像 發(fā)表于 01-07 10:07 ?1.3w次閱讀

    Tivoo像素音箱評(píng)測(cè) 音箱上也能玩出新花樣

    藍(lán)牙音箱品牌很多,但是能玩出花的不多。
    的頭像 發(fā)表于 03-12 10:33 ?2826次閱讀

    PWM的占空比是什么東西PWM什么優(yōu)點(diǎn)

    pwm也即脈寬調(diào)制,在現(xiàn)實(shí)中,pwm在諸多器件中均有所應(yīng)用。在往期文章中,小編對(duì)pwm的原理、調(diào)制方法有所介紹。為增進(jìn)大家對(duì)pwm的了解程度,本文將對(duì)
    的頭像 發(fā)表于 12-12 09:55 ?5.6w次閱讀
    <b class='flag-5'>PWM</b>的占空比是什么東西<b class='flag-5'>PWM</b><b class='flag-5'>有</b>什么優(yōu)點(diǎn)

    藍(lán)牙信標(biāo)定位什么用

    藍(lán)牙信標(biāo)定位什么用?
    的頭像 發(fā)表于 07-28 14:11 ?1w次閱讀

    小米機(jī)器狗什么用

    小米機(jī)器狗什么用?
    的頭像 發(fā)表于 08-12 09:33 ?1.5w次閱讀

    STM32F103輸出一路PWM波形,完整源碼。示波器觀察輸出波形

    STM32F103輸出一路PWM波形,完整源碼。示波器觀察輸出波形 序 言 1) 什么是PWM信號(hào) 2) 如何實(shí)現(xiàn)
    發(fā)表于 01-14 16:06 ?25次下載
    <b class='flag-5'>用</b>STM32F103輸出一路<b class='flag-5'>PWM</b>波形,<b class='flag-5'>有</b>完整源碼。<b class='flag-5'>用</b>示波器觀察輸出波形

    MWCS 2023丨5G時(shí)代 還能玩出什么花?

    原文標(biāo)題:MWCS 2023丨5G時(shí)代 還能玩出什么花? 文章出處:【微信公眾號(hào):中興通訊】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
    的頭像 發(fā)表于 06-26 15:55 ?485次閱讀

    pcb仿真技術(shù)什么用

    pcb仿真技術(shù)什么用
    的頭像 發(fā)表于 11-28 15:22 ?1625次閱讀