衡阳派盒市场营销有限公司

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

利用STM32定時器實現(xiàn)呼吸燈

GReq_mcu168 ? 來源:玩轉(zhuǎn)單片機 ? 作者:玩轉(zhuǎn)單片機 ? 2020-10-10 14:49 ? 次閱讀

實驗目標

利用STM32定時器產(chǎn)生PWM信號

利用PWM信號實現(xiàn)呼吸燈。

什么是PWM信號呢?

PWM,英文名Pulse Width Modulation。

PWM信號是一種脈寬調(diào)制信號,廣范用于LED電機控制等場合。

PWM信號其實類似于方波,只有0和1兩種狀態(tài)。

PWM信號可以調(diào)節(jié)占空比。

不同占空比可以使LED產(chǎn)生不同的亮度。

占空比就是指在一個周期內(nèi), 信號處于高電平的時間占據(jù)整個信號周期的百分比, 例如上圖中所示脈沖的占空比就是25%。

PWM波可以由GPIO口產(chǎn)生,通過GPIO口輸出高電平,延時,輸出低電平,延時來產(chǎn)生PWM波。

還可以使用定時器,利用比較寄存器形成PWM。

本實驗就是利用PWM信號這一特性控制LED產(chǎn)生不同亮度,從而實現(xiàn)呼吸燈的效果。

PWM信號應用場景

我們經(jīng)常見到的就是交流調(diào)光電路,高電平占多一點,也就是占空比大一點亮度就亮一點,占空比小一點亮度就沒有那么亮,前提是PWM的頻率要大于我們?nèi)搜圩R別頻率,要不然會出現(xiàn)閃爍現(xiàn)象。

除了在調(diào)光電路應用,還有在直流斬波電路、蜂鳴器驅(qū)動、電機驅(qū)動、逆變電路、加濕機霧化量等都會有應用。

PWM信號如何輸出呢?

1)可以直接通過芯片內(nèi)部模塊輸出PWM信號,前提是這個I/O口要有PWM集成模塊,自帶PWM功能的芯片只需要簡單幾步操作即可實現(xiàn)PWM功能。這種自帶有PWM輸出的功能模塊在程序設計更簡便,同時數(shù)據(jù)更精確。如下圖,一般的IO口都會標明這個GPIO是否是PWM口;

STM32單片機就是標識如下形式:TIMx_CHy這樣的形式,下圖中所示的PWM引腳即占用TIM1的通道1。

2)但是如果IC內(nèi)部沒有PWM功能模塊,或者要求不是很高的話可以利用I/O口結合定時器輸出PWM信號,因為PWM信號其實就是一高一低的一系列電平組合在一起。具體方法是給I/O加一個定時器,輸出的PWM信號頻率與你的定時器一致,用定時器中斷來計數(shù),但是這種方法一般不采用,除非對于精度、頻率等要求不是很高可以這樣實現(xiàn)。

LED使用的引腳:

原理圖

由上面的原理圖可知,當LED1和LED2引腳為高電平的時候,LED滅;當引腳為低電平的時候,LED亮。

一個周期內(nèi)低電平占比越來越少,高電平占空比越來越高,LED越來越暗。

具體實現(xiàn)

1. LED引腳PB8、PB9初始化

注意 GPIO_Mode 要設置為:GPIO_Mode_AF_PP

voidLED_Init(void) { GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); }

2. TIM4_CH3和TIM4_CH4初始化

voidLed_PWM_Init(u16arr,u16psc) { TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_OCInitTypeDefTIM_OCInitStructure; NVIC_InitTypeDefNVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); LED_Init(); TIM_DeInit(TIM4); /*TimeBaseconfiguration*/ TIM_TimeBaseStructure.TIM_Period=arr; TIM_TimeBaseStructure.TIM_Prescaler=psc; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_ClockDivision=0; TIM_TimeBaseStructure.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse=0; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC3Init(TIM4,&TIM_OCInitStructure); TIM_OC4Init(TIM4,&TIM_OCInitStructure); TIM_CtrlPWMOutputs(TIM4,ENABLE); TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM4,ENABLE); TIM_Cmd(TIM4,ENABLE); }

其中參數(shù)arr為重載值,psc為TIMx時鐘頻率的預分頻系數(shù)。

設置定時器的周期:

PWM的周期一般要設置到50Hz以上,否則,我們會看到明顯的視覺閃爍。

設置定時器的周期需要改變ARR和PSC兩個寄存器的值來控制輸出PWM的周期。

在STM32的庫函數(shù)中,

TIM_TimeBaseStructure.TIM_Period即設置的ARR寄存器,溢出計數(shù)值,(如有中斷)達到這個值就中斷,對應參數(shù)arr;

TIM_TimeBaseStructure.TIM_Prescaler即設置的PSC寄存器,對應預分頻系數(shù)參數(shù)psc。

TIM_TimeBaseStructure.TIM_Period=arr; TIM_TimeBaseStructure.TIM_Prescaler=psc; TIM_TimeBaseStructure.TIM_ClockDivision=0; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

應用

Led_PWM_Init(899,0);

psc為0,表示初始化PWM對應的定時器不分頻,仍舊為72MHz,arr為899,代表PWM的頻率為:72000/(899+1)=80KHz。周期等于頻率的倒數(shù),即1/80KHz=12.5us。

while(1) { //呼吸燈 if(dir) led0pwmval++; else led0pwmval--; if(led0pwmval>900) dir=0; if(led0pwmval==0) dir=1; TIM_SetCompare3(TIM4,led0pwmval);//CH3綠色 TIM_SetCompare4(TIM4,led0pwmval);//CH4紅色 delay_ms(1); }

其中代碼:

TIM_SetCompare3(TIM4,led0pwmval);//CH3綠色 TIM_SetCompare4(TIM4,led0pwmval);//CH4紅色

就是調(diào)節(jié)定時器TIM4的通道3和通道4的占空比,當計數(shù)時間達到led0pwmval時電平翻轉(zhuǎn),比如默認0-arr都為高電平,如TIM_SetCompare的值為arr/2,就是0-arr/2 為低電平,arr/2-arr為高電平,占空比 50%。

TIM_SetCompare設置的值就是設置的CCRx。由上面的圖可知,CCRx/ARR就是占空比,由于占空比不能大于1,CCRx的值肯定不能大于ARR了。

比如我們執(zhí)行如下代碼:

TIM_SetCompare3(TIM4,450);//CH3綠色 TIM_SetCompare4(TIM4,450);//CH4紅色

示波器中可以看到如下效果:

從上我們可以看到:

脈沖頻率是:80KHz

周期是:12.50us

占空比:50% (450/(899+1))

跟上面的我們設置的值是一致的。

實現(xiàn)的效果

視頻中的板子就是2020.06每月活動智能風扇使用的板子。

由核心板+底板的形式組成,待月底全部功能實現(xiàn)并驗證沒有問題之后,開源原理圖和PCB圖給大家下載自行搭建測試。

本文的PWM控制LED實現(xiàn)呼吸燈的原理,其實就是我們控制風扇轉(zhuǎn)速的原理,有了本節(jié)課的知識,我們就可以控制風扇的轉(zhuǎn)速了。

原文標題:利用PWM原理,實現(xiàn)呼吸燈功能

文章出處:【微信公眾號:玩轉(zhuǎn)單片機】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

責任編輯:haq

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

    關注

    114

    文章

    5198

    瀏覽量

    214902
  • 呼吸燈
    +關注

    關注

    10

    文章

    111

    瀏覽量

    42812

原文標題:利用PWM原理,實現(xiàn)呼吸燈功能

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    呼吸的概念和實現(xiàn)原理

    呼吸在日常生活中經(jīng)常見到,如電子時鐘,小夜燈等等,本文我們介紹下通過PWM波來控制LED實現(xiàn)呼吸
    的頭像 發(fā)表于 10-24 14:50 ?2122次閱讀
    <b class='flag-5'>呼吸</b><b class='flag-5'>燈</b>的概念和<b class='flag-5'>實現(xiàn)</b>原理

    定時器的工作方式介紹

    定時器是計算機和嵌入式系統(tǒng)中常見的一種硬件模塊,用于實現(xiàn)定時和計數(shù)功能。定時器的工作方式通常由一組寄存來控制,這些寄存
    的頭像 發(fā)表于 07-12 10:29 ?1128次閱讀

    定時器相關的寄存有哪些類型

    在微控制編程中,定時器是一種非常常見的功能模塊,用于實現(xiàn)各種定時和計數(shù)功能。定時器的工作原理是通過內(nèi)部的計數(shù)
    的頭像 發(fā)表于 07-12 10:25 ?1079次閱讀

    STM32G4系列芯片定時器的延時輸出問題

    有人使用STM32G4系列芯片內(nèi)部的多個定時器做PWM輸出,輸出頻率一樣,占空比也一樣,均為50%。可是,當他中途調(diào)整各個定時器以相同的工作參數(shù),即改變ARR的值和CCR值后,會發(fā)現(xiàn)TIM2和TIM5兩個
    的頭像 發(fā)表于 07-01 09:45 ?1908次閱讀
    <b class='flag-5'>STM32</b>G4系列芯片<b class='flag-5'>定時器</b>的延時輸出問題

    三菱PLC編程實現(xiàn)讀出時間定時器

    的功能,而定時器實現(xiàn)時間控制的關鍵組件。本文將詳細介紹如何使用三菱PLC編程實現(xiàn)讀出時間定時器。 1. 定時器的基本概念
    的頭像 發(fā)表于 06-20 11:11 ?2722次閱讀

    三菱plc如何顯示定時器時間

    三菱PLC(Programmable Logic Controller,可編程邏輯控制)是一種廣泛應用于工業(yè)自動化領域的設備。定時器是PLC中的一種基本功能,用于實現(xiàn)延時控制、計時控制等功能。在三
    的頭像 發(fā)表于 06-20 11:10 ?2058次閱讀

    PLC定時器的工作原理和應用

    至關重要的角色。定時器能夠實現(xiàn)對時間的精確控制,是控制系統(tǒng)中實現(xiàn)延時、定時、周期控制等功能的關鍵元件之一。本文將詳細闡述PLC中定時器的工作
    的頭像 發(fā)表于 06-18 11:55 ?2868次閱讀

    STM32F051能不能實現(xiàn)定時器同步啟動?

    我做的有個項目中希望STM32里面的5個定時器同步啟動,通過官方手冊了解到,好像只有4個能實現(xiàn), 另外有TIM14、TIM16、TIM17從手冊描述上看貌似也可以,但這幾個定時器的寄存
    發(fā)表于 05-13 09:07

    stm32定時器的如何外部啟動?

    我想利用stm32定時器精確定時一個信號從發(fā)生到結束的時間,想讓定時器通過外部觸發(fā)開啟,一般有什么方法。
    發(fā)表于 05-10 06:40

    如何實現(xiàn)一個軟件定時器

    在Linux,uC/OS,F(xiàn)reeRTOS等操作系統(tǒng)中,都帶有軟件定時器,原理大同小異。典型的實現(xiàn)方法是:通過一個硬件定時器產(chǎn)生固定的時鐘節(jié)拍,每次硬件定時器中斷到,就對一個全局的時間
    的頭像 發(fā)表于 04-29 11:00 ?752次閱讀

    STM32G030定時器16 17和1同步輸出如何實現(xiàn)

    STM32G030系列中只有定時器1 16和17三個定時器可以輸出帶死區(qū)時間互補pwm,我想實現(xiàn)其中兩個或者3個同步輸出,請問如何實現(xiàn),我查
    發(fā)表于 03-27 06:45

    ?PLC定時器介紹

    定時器是PLC中重要的編程元件,是累計時間增量的內(nèi)部器件。大部分自動控制領域都需要定時器進行延時控制,靈活地使用定時器可以編制出復雜的控制程序。
    發(fā)表于 03-22 12:36 ?2567次閱讀
    ?PLC<b class='flag-5'>定時器</b>介紹

    如果STM32定時器外接了正交編碼,該剩余通道是否能做PWM輸出呢?

    其實,對于STM32芯片,編碼輸入信號就是定時器的計數(shù)時鐘源之一。定時器外接了編碼輸入,若還有剩余通道的話,剩余通道依然可以實現(xiàn)輸入捕獲或輸出比較功能。
    的頭像 發(fā)表于 03-21 09:06 ?2000次閱讀
    如果<b class='flag-5'>STM32</b><b class='flag-5'>定時器</b>外接了正交編碼<b class='flag-5'>器</b>,該剩余通道是否能做PWM輸出呢?

    在通用定時器PWM輸出實現(xiàn)呼吸的實驗中,通道輸出極性選擇中選擇高電平有效,LED0為啥會一直亮?

    大佬們,在通用定時器PWM輸出實現(xiàn)呼吸的實驗中,我在這個通道輸出極性選擇中選擇高電平有效,LED0為啥會一直亮?按理說應該是輸出低電平才會亮啊。
    發(fā)表于 03-07 06:47

    使用555定時器的可調(diào)雙定時器電路

    定時器 IC 555 是最通用和最常用的 IC 之一,因為它的應用范圍更廣,如 PWM放大器、延遲定時器、開關電路、占空比選擇、時鐘脈沖發(fā)生等。這也可用于各種應用,如精確
    的頭像 發(fā)表于 02-25 15:16 ?2422次閱讀
    使用555<b class='flag-5'>定時器</b>的可調(diào)雙<b class='flag-5'>定時器</b>電路
    大发888客服电话| 百家乐官网菲律宾| 黄金城百家乐安卓版| 波克棋牌官方免费下载| 百家乐官网玩法最多的娱乐城| 缅甸百家乐官网赌博有假吗| 大发888 dafa888uk.com| 百家乐投注双赢技巧| 娱乐城百家乐官网可以代理吗| 大发888娱乐场网页| 百家乐英皇娱乐城| 百家乐官网扑克玩法| 大发888直播网| 如何打百家乐的玩法技巧和规则| 澳门百家乐官网洗码提成查询| 九龙娱乐| 青岛人家棋牌室| 博彩百家乐最新优惠| 百家乐如何睇路| 申请百家乐官网会员送彩金| 网络百家乐官网最安全| 皇家百家乐的玩法技巧和规则| 澳门百家乐上下限| 百家乐官网娱乐网佣金| 百家乐官网视频游戏大厅| 湛江市| 金盛娱乐| 百家乐包赢| 百家乐游戏官网| 百家乐官网足球投注网哪个平台网址测速最好 | 百家乐官网烫金筹码| 博彩e天上人间| bet365百科| 真钱娱乐场游戏| 网络博彩公司| 棋牌室营业执照| 娱乐城送18| 大发888娱乐城亚付宝| 澳门百家乐手机软件| 百家乐鞋| 真人游戏网|