HI3861學(xué)習(xí)筆記(13)——PWM接口使用

一限嫌、簡(jiǎn)介

1.1 PWM

脈沖寬度調(diào)制(PWM),是英文“Pulse Width Modulation”的縮寫(xiě),簡(jiǎn)稱脈寬調(diào)試哼蛆。 是利用微處理器的數(shù)字輸出來(lái)對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。廣泛應(yīng)用在從測(cè)量霞赫、通信到功率控制與變換的許多領(lǐng)域中腮介。


例如上圖中,圖b)是微處理輸出的數(shù)字信號(hào)端衰,實(shí)際上他接到電機(jī)等功率設(shè)備上時(shí)叠洗,效果相當(dāng)于圖a)。這就是PWM調(diào)制旅东。例如輸出占空比為50%灭抑,頻率為10Hz的脈沖,高電平為3.3V.則其輸出的模擬效果相當(dāng)于輸出一個(gè)1.65V的高電平抵代。脈沖調(diào)制有兩個(gè)重要的參數(shù)腾节,第一個(gè)就是輸出頻率,頻率越高荤牍,則模擬的效果越好案腺。第二個(gè)就是占空比。占空比就是改變輸出模擬效果的電壓大小康吵。占空比越大則模擬出的電壓越大劈榨。

1.2 GPIO復(fù)用功能

HI3861V100 芯片有 15 個(gè) GPIO,引腳分布如下:




其中 PWM 端口有 6 個(gè)涎才,每個(gè) GPIO 可復(fù)用成 PWM 的端口如下:

Pin 管腳名稱 復(fù)用信號(hào)
2 GPIO_00 PWM3_OUT
3 GPIO_01 PWM4_OUT
4 GPIO_02 PWM2_OUT
5 GPIO_03 PWM5_OUT
6 GPIO_04 PWM1_OUT
17 GPIO_05 PWM2_OUT
18 GPIO_06 PWM3_OUT
19 GPIO_07 PWM0_OUT
20 GPIO_08 PWM1_OUT
27 GPIO_09 PWM0_OUT
28 GPIO_10 PWM1_OUT
29 GPIO_11 PWM2_OUT
30 GPIO_12 PWM3_OUT
31 GPIO_13 PWM4_OUT
32 GPIO_14 PWM5_OUT

二鞋既、API說(shuō)明

以下 GPIO 接口位于 base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_gpio.h力九。

2.1 GpioInit

功能 初始化GPIO外設(shè)
函數(shù)定義 unsigned int GpioInit(void)
參數(shù) 無(wú)
返回 錯(cuò)誤碼

2.2 GpioSetDir

功能 設(shè)置GPIO輸出方向
函數(shù)定義 unsigned int GpioSetDir(WifiIotGpioIdx id, WifiIotGpioDir dir)
參數(shù) id:表示GPIO引腳號(hào)
dir:表示GPIO輸出方向
返回 錯(cuò)誤碼

以下擴(kuò)展 GPIO 接口位于 base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_gpio_ex.h

2.3 IoSetFunc

功能 設(shè)置GPIO引腳功能
函數(shù)定義 unsigned int IoSetFunc(WifiIotIoName id, unsigned char val)
參數(shù) id:表示GPIO引腳號(hào)
val:表示IO復(fù)用功能
返回 錯(cuò)誤碼

以下 PWM 接口位于 base\iot_hardware\interfaces\kits\wifiiot_lite\wifiiot_pwm.h邑闺。

業(yè)務(wù)BUILD.gn中包含路徑

include_dirs = [
        "http://utils/native/lite/include",
        "http://kernel/liteos_m/components/cmsis/2.0",
        "http://base/iot_hardware/interfaces/kits/wifiiot_lite",
    ]

2.5 PwmInit

功能 初始化PWM功能
函數(shù)定義 unsigned int PwmInit (WifiIotPwmPort port)
參數(shù) port:初始化PWM端口號(hào)
返回 錯(cuò)誤碼

2.6 PwmStart

功能 根據(jù)輸入?yún)?shù)輸出PWM信號(hào)
函數(shù)定義 unsigned int PwmStart(WifiIotPwmPort port, unsigned short duty, unsigned short freq)
參數(shù) port:PWM端口號(hào)
duty:占空比
freq:分頻倍數(shù)
返回 錯(cuò)誤碼

2.7 PwmStop

功能 關(guān)閉PWM輸出信號(hào)
函數(shù)定義 unsigned int PwmStop(WifiIotPwmPort port)
參數(shù) port:初始化PWM端口號(hào)
返回 錯(cuò)誤碼

三跌前、使用GPIO的PWM功能實(shí)現(xiàn)呼吸燈的效果

編譯時(shí)在業(yè)務(wù)BUILD.gn中包含路徑

include_dirs = [
        "http://utils/native/lite/include",
        "http://kernel/liteos_m/components/cmsis/2.0",
        "http://base/iot_hardware/interfaces/kits/wifiiot_lite",
    ]

使用板載的LED來(lái)驗(yàn)證GPIO的PWM功能,在BearPi-HM_Nano開(kāi)發(fā)板上LED的連接電路圖如下圖所示陡舅,LED的控制引腳與主控芯片的GPIO_2連接抵乓,所以需要編寫(xiě)軟件去控制GPIO_2輸出PWM波實(shí)現(xiàn)呼吸燈的效果。


#include <stdio.h>

#include <unistd.h>

#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wifiiot_pwm.h"
#include "wifiiot_gpio.h"
#include "wifiiot_gpio_ex.h"

#define PWM_TASK_STACK_SIZE 512
#define PWM_TASK_PRIO 25

static void PWMTask(void)
{
    unsigned int i;

    //初始化GPIO
    GpioInit();

    //設(shè)置GPIO_2引腳復(fù)用功能為PWM
    IoSetFunc(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_IO_FUNC_GPIO_2_PWM2_OUT);

    //設(shè)置GPIO_2引腳為輸出模式
    GpioSetDir(WIFI_IOT_IO_NAME_GPIO_2, WIFI_IOT_GPIO_DIR_OUT);

    //初始化PWM2端口
    PwmInit(WIFI_IOT_PWM_PORT_PWM2);

    while (1)
    {
        for (i = 0; i < 40000; i += 100)
        {
            //輸出不同占空比的PWM波
            PwmStart(WIFI_IOT_PWM_PORT_PWM2, i, 40000);

            usleep(10);
        }
        i = 0;
    }
}

static void PWMExampleEntry(void)
{
    osThreadAttr_t attr;

    attr.name = "PWMTask";
    attr.attr_bits = 0U;
    attr.cb_mem = NULL;
    attr.cb_size = 0U;
    attr.stack_mem = NULL;
    attr.stack_size = 512;
    attr.priority = 25;

    if (osThreadNew((osThreadFunc_t)PWMTask, NULL, &attr) == NULL)
    {
        printf("Falied to create PWMTask!\n");
    }
}

APP_FEATURE_INIT(PWMExampleEntry);

? 由 Leung 寫(xiě)于 2021 年 10 月 9 日

? 參考:【鴻蒙2.0設(shè)備開(kāi)發(fā)教程】小熊派HarmonyOS 鴻蒙·季 開(kāi)發(fā)教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末靶衍,一起剝皮案震驚了整個(gè)濱河市灾炭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颅眶,老刑警劉巖蜈出,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異涛酗,居然都是意外死亡铡原,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)商叹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)燕刻,“玉大人,你說(shuō)我怎么就攤上這事剖笙÷严矗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵弥咪,是天一觀的道長(zhǎng)过蹂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)酪夷,這世上最難降的妖魔是什么榴啸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮晚岭,結(jié)果婚禮上鸥印,老公的妹妹穿的比我還像新娘。我一直安慰自己坦报,他們只是感情好库说,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著片择,像睡著了一般潜的。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上字管,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天啰挪,我揣著相機(jī)與錄音信不,去河邊找鬼。 笑死亡呵,一個(gè)胖子當(dāng)著我的面吹牛抽活,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锰什,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼下硕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了汁胆?” 一聲冷哼從身側(cè)響起梭姓,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嫩码,沒(méi)想到半個(gè)月后誉尖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谢谦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年释牺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了萝衩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片回挽。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖猩谊,靈堂內(nèi)的尸體忽然破棺而出千劈,到底是詐尸還是另有隱情,我是刑警寧澤牌捷,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布墙牌,位于F島的核電站,受9級(jí)特大地震影響暗甥,放射性物質(zhì)發(fā)生泄漏喜滨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一撤防、第九天 我趴在偏房一處隱蔽的房頂上張望虽风。 院中可真熱鬧,春花似錦寄月、人聲如沸辜膝。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)厂抖。三九已至,卻和暖如春克懊,著一層夾襖步出監(jiān)牢的瞬間忱辅,已是汗流浹背七蜘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留墙懂,地道東北人崔梗。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像垒在,于是被迫代替她去往敵國(guó)和親蒜魄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容