色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

基于RoboMasterC板的RT-Thread使用分享—PWM使用

冬至子 ? 來源:goldengrandpa ? 作者:goldengrandpa ? 2023-10-13 16:46 ? 次閱讀

創(chuàng)建工程

在上篇文章中我是使用基于芯片創(chuàng)建的,我原本想著不通過BSP文件在教程中教大家一步一步的通過Kconfig+CubeMX配置出可以驅(qū)動(dòng)整個(gè)開發(fā)板所有外設(shè)的工程的。在社區(qū)前輩的提醒后才知道通過基于芯片創(chuàng)建工程是沒有辦法Kconfig配置的。

因此我在之后的教程中我會(huì)基于RT-Thread提供的BSP文件stm32f407_robomaster_c來創(chuàng)建工程

但是這個(gè)bsp文件暫時(shí)還沒有支持板上的所有外設(shè),因此我計(jì)劃隨著教程的編寫,我也會(huì)幫忙維護(hù)這個(gè)bsp文件,將我們使用到的外設(shè)增加支持。

便于大家后續(xù)使用,也滿足我希望告訴大家Kconfig配置的計(jì)劃。下圖是目前bsp文件的外設(shè)支持情況。

1.jpg

下面就正式開始創(chuàng)建工程。

我們這里點(diǎn)擊導(dǎo)入

1.jpg

之后選擇RT-Thread BSP到工作空間中

1.jpg

BSP根目錄選擇從Github下載下來的bsp文件路徑,點(diǎn)擊完成,即可創(chuàng)建工程。

1.jpg

點(diǎn)擊編譯,下載后根據(jù)BSP文件提供規(guī)范,下載后將實(shí)現(xiàn)LED燈閃爍的功能。如下圖LED_B閃爍說明工程創(chuàng)建成功。

1.jpg

PWM教程之呼吸燈

CubeMX配置

首先我們來看一下開發(fā)板原理圖,來看看LED引腳連接著哪一個(gè)定時(shí)器輸出引腳。

通過原理圖我們可以看到是TIM5的1、2、3通道。

1.jpg

接下來我們就在CubeMX中查看相關(guān)引腳的配置。我們需要把TIM5的通道1、2、3設(shè)置為PWM模式,并且勾選Internal Clock。

1.jpg

設(shè)置重載值為65535。這里設(shè)置的原因我會(huì)在后面進(jìn)行頻率計(jì)算的時(shí)候再說明。

1.jpg

原理講解(計(jì)算部分新手可視情況略過)

PWM簡(jiǎn)介

PWM即脈沖寬度調(diào)制,是利用微處理器的數(shù)字輸出來對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。

1.jpg

例如上圖中,矩形脈沖是 stm32 輸出的數(shù)字信號(hào),當(dāng)這個(gè)信號(hào)接到外設(shè)上時(shí),效果可以等效為這個(gè)正弦波。

一個(gè)周期內(nèi)高電平的持續(xù)時(shí)間占總周期的比例成為占空比,通過修改占空比,可以改變輸出的等效模擬電壓。例如輸出占空比為 50%,頻率為 10Hz 的脈沖,高電平為 3.3V.則其輸出的模擬效果相當(dāng)于輸出一個(gè) 1.65V 的高電平。此外 PWM 輸出的頻率也會(huì)影響最終的 PWM輸出效果,PWM 輸出的頻率越高,最終輸出的“連續(xù)性”越好,越接近模擬信號(hào)的效果,頻率低則會(huì)增強(qiáng)離散性,最終的輸出效果會(huì)有比較強(qiáng)的“突變”感。

脈沖調(diào)制有兩個(gè)重要的參數(shù),第一個(gè)就是輸出頻率,頻率越高,則模擬的效果越好。第二個(gè)就是占空比。占空比就是改變輸出模擬效果的電壓大小。占空比越大則模擬出的電壓越大。

定時(shí)器觸發(fā)頻率計(jì)算
接下來給大家簡(jiǎn)單的講解一下定時(shí)器觸發(fā)頻率,以及PWM信號(hào)的周期和占空比的計(jì)算。

首先是定時(shí)器的觸發(fā)頻率,這里我們首先需要查看datasheet,看我們的TIM5是掛載在哪一條總線的。這里我們可以看到他是在APB1上的。

1.jpg

接著我們就要看CubeMX上我們配置的時(shí)鐘樹了,在整個(gè)時(shí)鐘樹的最右端,可以看到 APB1 和 APB2 兩個(gè)總線的時(shí)鐘頻率設(shè)置,其中 APBx peripheral clocks 為掛載在總線上的定時(shí)器以外的外設(shè)提供時(shí)鐘源,APBx timer clocks 為掛載在總線上的定時(shí)器提供時(shí)鐘源。那么這里我們就可以知道TIM5時(shí)鐘源頻率為84MHz,時(shí)鐘樹的配置在上篇文章有較為詳細(xì)的解釋,這里就不重復(fù)了。

這里解釋一下前面的倍頻為何是2,這里可以看到STM32F4xx中文參考手冊(cè),我們這里APB1預(yù)分頻器為4,所以定時(shí)器時(shí)鐘頻率等于APB域的頻率的兩倍,所以倍頻為2

1.jpg

確定時(shí)鐘源頻率之后,我們就開始計(jì)算定時(shí)器觸發(fā)頻率,我們前面設(shè)置TIM5_PSC為0,因此分頻值為1,因?yàn)榉诸l值為 TIMx_PSC 中的分頻值+1(畢竟分頻不可能為0),所以我們進(jìn)入的84MHz的頻率信號(hào)分頻后還是84MHz。

當(dāng) TIMx_CNT 的值增長到 TIMx_ARR 中的值后,就會(huì)發(fā)生重載,并觸發(fā)中斷信號(hào),相當(dāng)于使用 TIMx_ARR 中的值又進(jìn)行了一次分頻。因此產(chǎn)生這個(gè)中斷信號(hào)的頻率應(yīng)該為84MHz/(ARR+1)(需要加 1 是因?yàn)?CNT 是從0開始計(jì)數(shù)的)。我們上面設(shè)置的重載值為65535。

因此定時(shí)器觸發(fā)頻率為84000000/65536=1281.7Hz,相當(dāng)于0.78ms會(huì)觸發(fā)一次中斷信號(hào)。這個(gè)中斷信號(hào)我們還可以用來做一些比如LED燈定時(shí)器亮滅等操作,由于篇幅原因中斷相關(guān)知識(shí)這里就不過多的展開了。這里定時(shí)器中斷觸發(fā)時(shí)間也就是PWM信號(hào)周期。

占空比的計(jì)算
上文我們講到了PWM一大重要參數(shù)就是占空比,而我們?cè)O(shè)置占空比的重要方式就是設(shè)置比較寄存器的值。畢竟我們不能隨便重設(shè)重載值,這樣子PWM周期也會(huì)發(fā)生變化。那么比較值是起到怎樣的作用呢?下圖就可以解釋,下圖為遞增計(jì)數(shù)模式的示意圖,當(dāng)定時(shí)器以 PWM 模式工作時(shí),會(huì)自動(dòng)將 TIMx_CCRx 的值與 TIMx_CNT(計(jì)數(shù)寄存器)中的值做比較,當(dāng) TIMx_CNT 中的值小于 TIMx_CCRx 的值時(shí),PWM 輸出引腳輸出高電平,大于時(shí)則輸出低電平。

1.jpg

那么我們就可以知道占空比的計(jì)算公式為CCRX/ARR*100%,比如重載值為50000,比較寄存器值為25000,那么占空比為50%。

原理部分就到此為止下面就講一下在RT-Thread Studio中的操作。

代碼實(shí)踐
首先我們選擇使用PWM設(shè)備驅(qū)動(dòng)程序

1.jpg

然后我們需要在硬件中選擇使能PWM并且選擇相應(yīng)的定時(shí)器與通道,但是我們發(fā)現(xiàn)并沒有我們需要的timer5,這時(shí)候我們就需要修改Kconfig文件了。

1.jpg

我們?cè)赽oard/Kconfig中添加如下代碼,這里我們簡(jiǎn)單的修改其他PWM配置即可。

1.jpg

之后我們使用Env工具進(jìn)入工程所在目錄后輸入scons --pyconfig即可進(jìn)入編輯界面。

1.jpg

這里我們就可以看到我們?cè)贙config中添加的外設(shè),點(diǎn)擊使能,保存修改。

1.jpg

之后輸入scons --target=eclipse重新構(gòu)建工程,等號(hào)后面的參數(shù)取決于你使用的IDE,比如我原來使用的是Clion那么就輸入scons --target=cmake,RT-Thread Studio是基于eclipse的所以這里選擇scons --target=eclipse

回到RT-Thread Setting可以看到我們?cè)黾拥耐庠O(shè)了。

1.jpg

之后我們就可以在main函數(shù)中編寫代碼,實(shí)現(xiàn)呼吸燈的功能了。

這里就是簡(jiǎn)單的修改了官方的PWM例程代碼

/*

Copyright (c) 2006-2021, RT-Thread Development Team

SPDX-License-Identifier: Apache-2.0

Change Logs:
Date Author Notes
2018-11-06 SummerGift first version
2021-06-30 crazt modify for robomaster C board
/
#include
#include
#include
#define PWM_DEV_NAME "pwm5" /
PWM設(shè)備名稱 /
#define PWM_DEV_CHANNEL 1 /
PWM通道 */
struct rt_device_pwm pwm_dev; / PWM設(shè)備句柄 /
int main(void)
{
rt_uint32_t period, pulse, dir;
period = 500000; /
周期為0.5ms,單位為納秒ns /
dir = 1; /
PWM脈沖寬度值的增減方向 /
pulse = 0; /
PWM脈沖寬度值,單位為納秒ns /
/
查找設(shè)備 */
pwm_dev = (struct rt_device_pwm )rt_device_find(PWM_DEV_NAME);
if (pwm_dev == RT_NULL)
{
rt_kprintf("pwm sample run failed! can't find %s device!n", PWM_DEV_NAME);
return RT_ERROR;
}
/
設(shè)置PWM周期和脈沖寬度默認(rèn)值 /
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
/
使能設(shè)備 /
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
while (1)
{
rt_thread_mdelay(50);
if (dir)
{
pulse += 5000; /
從0值開始每次增加5000ns /
}
else
{
pulse -= 5000; /
從最大值開始每次減少5000ns /
}
if (pulse >= period/2) /
經(jīng)過測(cè)試發(fā)現(xiàn)占空比超過50%后對(duì)于亮度的影響較小因此就設(shè)置死區(qū) /
{
dir = 0;
}
if (0 == pulse)
{
dir = 1;
}
/
設(shè)置PWM周期和脈沖寬度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
}
return RT_EOK;
}

最終燒錄效果為藍(lán)燈進(jìn)行呼吸燈操作。

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

    關(guān)注

    22

    文章

    1592

    瀏覽量

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

    關(guān)注

    23

    文章

    3246

    瀏覽量

    114720
  • PWM波
    +關(guān)注

    關(guān)注

    0

    文章

    99

    瀏覽量

    16854
  • STM32F407
    +關(guān)注

    關(guān)注

    15

    文章

    187

    瀏覽量

    29437
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1285

    瀏覽量

    40085
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于RoboMasterCRT-Thread使用分享—PWM擴(kuò)展實(shí)驗(yàn)

    這次因?yàn)闆]有新增功能所以新建功能部分我就先略過了,大家可以參考一下上篇文章,其中我修改Kconfig,開啟PWM5 CH1/2/3的部分已經(jīng)提交PR了,各位之后導(dǎo)入工程時(shí)可以先看一下RT-Thread Setting中是否已經(jīng)顯示。
    的頭像 發(fā)表于 10-13 15:39 ?1270次閱讀
    基于<b class='flag-5'>RoboMasterC</b><b class='flag-5'>板</b>的<b class='flag-5'>RT-Thread</b>使用分享—<b class='flag-5'>PWM</b>擴(kuò)展實(shí)驗(yàn)

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發(fā)組(2015-03-31)。RT-Thread做為國內(nèi)有較大影響力的開源實(shí)時(shí)操作系統(tǒng),本文是RT-Thread實(shí)時(shí)操作系統(tǒng)的編程指南
    發(fā)表于 11-26 16:06 ?0次下載

    RT-Thread開發(fā),如何有效學(xué)習(xí)RT-Thread的五個(gè)步驟

    RT-Thread推出RT-Thread Inside戰(zhàn)略開放RT-Thread開發(fā)平臺(tái)授權(quán)合作,與硬件十萬個(gè)為什么合作首次推出第一款RT-Inside的開發(fā)
    的頭像 發(fā)表于 09-25 09:55 ?3.5w次閱讀
    <b class='flag-5'>RT-Thread</b>開發(fā),如何有效學(xué)習(xí)<b class='flag-5'>RT-Thread</b>的五個(gè)步驟

    Rt-Thread】STM32輸出PWM

    主要記錄了Rt-Thread 中STM32 輸出PWM配置過程,通過設(shè)置不同頻率PWM使蜂鳴器發(fā)出不同音調(diào)
    發(fā)表于 12-16 16:57 ?17次下載
    【<b class='flag-5'>Rt-Thread</b>】STM32輸出<b class='flag-5'>PWM</b>

    RT-Thread Studio驅(qū)動(dòng)SD卡

    總結(jié)前言硬件平臺(tái):RT-Thread ART-Pi STM32H750XBH6開發(fā) H750開發(fā)開發(fā)軟件:RT-Thread Studio參考博客:
    發(fā)表于 12-27 19:13 ?20次下載
    <b class='flag-5'>RT-Thread</b> Studio驅(qū)動(dòng)SD卡

    RT-Thread全球技術(shù)大會(huì):RT-Thread測(cè)試用例集合案例

    RT-Thread全球技術(shù)大會(huì):RT-Thread測(cè)試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:34 ?2096次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):<b class='flag-5'>RT-Thread</b>測(cè)試用例集合案例

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

    RT-Thread 簡(jiǎn)介 作為一名 RTOS 的初學(xué)者,也許你對(duì) RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會(huì)逐漸發(fā)現(xiàn) RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發(fā)表于 07-09 11:27 ?4546次閱讀
    <b class='flag-5'>RT-Thread</b>學(xué)習(xí)筆記 <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    基于RoboMasterC型開發(fā)RT-Thread使用分享(一)

    假期期間打算開一個(gè)坑,和大家分享下基于RoboMaster開發(fā)C型上RT-Thread使用,本系列文章計(jì)劃是給剛接觸STM32和RT-Thread的同學(xué)看的,講的會(huì)稍微基礎(chǔ)一點(diǎn)。 硬件與開發(fā)環(huán)境
    的頭像 發(fā)表于 01-05 12:10 ?2417次閱讀

    基于RoboMasterC型開發(fā)RT-Thread使用分享(二)

    的通過Kconfig+CubeMX配置出可以驅(qū)動(dòng)整個(gè)開發(fā)所有外設(shè)的工程的。在社區(qū)前輩的提醒后才知道通過基于芯片創(chuàng)建工程是沒有辦法Kconfig配置的。因此我在之后的教程中我會(huì)基于RT-Thread提供
    的頭像 發(fā)表于 01-06 03:05 ?779次閱讀

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

    RT-Thread文檔_RT-Thread 簡(jiǎn)介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡(jiǎn)介

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_PWM 設(shè)備

    RT-Thread文檔_PWM 設(shè)備
    發(fā)表于 02-22 18:35 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>PWM</b> 設(shè)備

    基于RT-Thread Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個(gè)賬號(hào)登陸,開啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?3932次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學(xué)習(xí)

    基于rt-thread的socket通信設(shè)計(jì)

    最近再研究 rt-thread 的通信 ,想設(shè)計(jì)出 eps8266(多個(gè)) rt-thread(作為中控) 服務(wù)器的通信框架,使用的開發(fā)是 潘多拉
    的頭像 發(fā)表于 10-13 15:02 ?1357次閱讀
    基于<b class='flag-5'>rt-thread</b>的socket通信設(shè)計(jì)
    主站蜘蛛池模板: 成人无码国产AV免费看| 被老师按在办公桌吸奶头| 国产学生无码中文视频一区| 日本一二三区视频在线| 97国产在线观看| 久久香蕉国产线看观看精品| 亚洲毛片网| 国产在线观看网址你懂得| 亚洲 欧美 国产在线视频| 国产电影尺度| 无人区乱码1区2区3区网站| 国产成人免费片在线观看| 三级全黄的视频| 国产99精品在线观看| 十分钟免费看完整视频| 国产成人无码AV麻豆| 無码一区中文字幕少妇熟女网站| 成人性生交大片免费看金瓶七仙女| 欧美性类s0x| 大陆女人内谢69XXXORG| 丝瓜视频在线免费| 国产亚洲精品免费视频| 亚洲日韩KKK444KKK聚色| 久久久久国产一级毛片高清片 | 曰产无码久久久久久精品| 久久毛片免费看一区二区三区| 69式国产真人免费视频| 欧美精品久久久久久久久大尺度 | 三级全黄的视频| 精品国产乱码久久久久久软件| 中文无码字慕在线观看| 热久久2018亚洲欧美| 国产品无码一区二区三区在线| 一级做a爰片久久毛片苍井优| 免费a毛片| 国产午夜电影在线观看不卡| 伊人天天躁夜夜躁狠狠| 青青伊人久久| 久久才是精品亚洲国产| 纯肉巨黄H爆粗口男男分卷阅读| 亚洲精品久久国产高清|