91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——PWM

AIoT行業(yè)洞察 ? 2024-11-06 16:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

AiPi-Eyes-S1是安信可開源團(tuán)隊(duì)專門為Ai-M61-32S設(shè)計(jì)的一款開發(fā)板,支持WiFi6、BLE5.3。所搭載的Ai-M61-32S 模組具有豐富的外設(shè)接口,具體包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太網(wǎng) (EMAC)、SD/MMC(SDH)、SPI、UARTI2C、I2S、PWM、GPDAC、GPADC、ACOMP 和 GPIO 等。

AiPi-Eyes-S1集成了SPI屏幕接口,DVP攝像頭接口,外置ES8388音頻編解碼芯片以及預(yù)留TF卡座,并且引出USB接口,可接入U(xiǎn)SB攝像頭。

從零開始學(xué)習(xí)小安派:

1、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——初識(shí)小安派-Eyes-S1

2、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——安裝VMware與Ubuntu

3、入門篇:零基礎(chǔ)開發(fā)小安派-Eyes-S1——新建工程并燒錄調(diào)試

4、零基礎(chǔ)開發(fā)小安派-Eyes-S1入門篇——Win下SSH連接Linux

5、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——Samba共享文件夾

6、零基礎(chǔ)開發(fā)小安派-Eyes-S1【入門篇】——工程文件架構(gòu)

7、零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——GPIO 輸入輸出

8、零基礎(chǔ)開發(fā)小安派-Eyes-S1【外設(shè)篇】——GPIO中斷編程

PWM 是英文“Pulse Width Modulation”的縮寫,簡(jiǎn)稱脈寬調(diào)制。一般 IO 口輸出是高低電平,是數(shù)字信號(hào),電壓是以 1 或 0 的重復(fù)脈沖來模擬負(fù)載,我們可以通過對(duì)一個(gè)脈沖信號(hào)的高低電平時(shí)間控制來將數(shù)字信號(hào)模擬成模擬電壓信號(hào),這也是 PWM 最大的用處??偨Y(jié)下來就是,通過一個(gè)周期內(nèi)改變占空比的方式來改變輸出的有效電壓。下面普及幾個(gè) PWM 的概念。

PWM 頻率: 一秒鐘內(nèi),信號(hào)完整的從高電平到低電平的次數(shù)(完整的一個(gè)脈沖周期),單位是 Hz。1Hz 也就是一秒鐘一個(gè)脈沖周期,周期是 1000ms。

PWM 周期: 周期=1/頻率,也就是周期與頻率互為倒數(shù),單位一般是 ms,若頻率為 5Hz,周期也就是 1/5=0.2S=200ms。

PWM 占空比: 一個(gè)脈沖周期內(nèi),高電平的時(shí)間占整個(gè)周期時(shí)間的比例。單位是 %,高電平時(shí)間是 50ms,周期是 100ms。占空比就是 50/100*100%=50%。

了解小安派-Eyes-S1 的 PWM

小安派使用的 M61 模組是 BL618 芯片,基于 LHAL 庫(kù)只支持 PWM_V2,該 PWM 版本支持四個(gè) PWM 通道。

PWM V2 版本輸出有效極性。當(dāng)正向通道閾值位于設(shè)置的低閾值和高閾值之間,為有效極性,如果設(shè)置有效極性為高,則輸出高電平,反之輸出低電平。反向通道相反,閾值位于設(shè)置的低閾值和高閾值之外,為有效極性,如果設(shè)置有效極性為高,則輸出高電平,反之輸出低電平。

#define PWM_POLARITY_ACTIVE_LOW 0
#define PWM_POLARITY_ACTIVE_HIGH 1

1.struct bflb_pwm_v2_config_s

說明:pwm_v2 初始化配置結(jié)構(gòu)體

struct bflb_pwm_v2_config_s {
uint8_t clk_source;
uint16_t clk_div;
uint16_t period;
};

PWM 最終產(chǎn)生的頻率為 clk_source/clk_div/period

2.struct bflb_pwm_v2_channel_config_s

說明:pwm_v2 通道初始化配置結(jié)構(gòu)體

struct bflb_pwm_v2_channel_config_s {
uint8_t positive_polarity;
uint8_t negative_polarity;
uint8_t positive_stop_state;
uint8_t negative_stop_state;
uint8_t positive_brake_state;
uint8_t negative_brake_state;
uint8_t dead_time;
};

3.bflb_pwm_v2_init

說明:初始化 pwm。使用之前需要選擇 gpio 為 pwm 功能。

void bflb_pwm_v2_init(struct bflb_device_s *dev, const struct bflb_pwm_v2_config_s *config);

4.bflb_pwm_v2_deinit

說明: 復(fù)位 pwm。

void bflb_pwm_v2_deinit(struct bflb_device_s *dev);

5.bflb_pwm_v2_start

說明: 啟動(dòng) pwm 輸出。

void bflb_pwm_v2_start(struct bflb_device_s *dev);

6.bflb_pwm_v2_stop

說明: 關(guān)閉 pwm 輸出。

void bflb_pwm_v2_stop(struct bflb_device_s *dev);

7.bflb_pwm_v2_set_period

說明: 修改 pwm 周期值,從而更改 pwm 輸出的頻率。

void bflb_pwm_v2_set_period(struct bflb_device_s *dev, uint16_t period);

8.bflb_pwm_v2_channel_init

說明: PWM 通道初始化。

void bflb_pwm_v2_channel_init(struct bflb_device_s *dev, uint8_t ch, struct bflb_pwm_v2_channel_config_s *config);

9.bflb_pwm_v2_channel_set_threshold

說明: 設(shè)置 PWM 占空比。

void bflb_pwm_v2_channel_set_threshold(struct bflb_device_s *dev, uint8_t ch, uint16_t low_threhold, uint16_t high_threhold);

PWM 占空比=(high_threhold - low_threhold)/period

10.bflb_pwm_v2_channel_positive_start

說明: PWM 正向通道使能輸出。

void bflb_pwm_v2_channel_positive_start(struct bflb_device_s *dev, uint8_t ch);

11.bflb_pwm_v2_channel_negative_start

說明: PWM 反向通道使能輸出。

void bflb_pwm_v2_channel_negative_start(struct bflb_device_s *dev, uint8_t ch);

12.bflb_pwm_v2_channel_positive_stop

說明: PWM 正向通道停止輸出。

void bflb_pwm_v2_channel_positive_stop(struct bflb_device_s *dev, uint8_t ch);

13.bflb_pwm_v2_channel_negative_stop

說明: PWM 反向通道停止輸出。

void bflb_pwm_v2_channel_negative_stop(struct bflb_device_s *dev, uint8_t ch);

14.bflb_pwm_v2_int_enable

說明: PWM 中斷使能和關(guān)閉。

void bflb_pwm_v2_int_enable(struct bflb_device_s *dev, uint32_t int_en, bool enable);

int_en 可以填入以下值,多個(gè)中斷可以使用 | 連接:

#define PWM_INTEN_CH0_L (1 << 0)
#define PWM_INTEN_CH0_H (1 << 1)
#define PWM_INTEN_CH1_L (1 << 2)
#define PWM_INTEN_CH1_H (1 << 3)
#define PWM_INTEN_CH2_L (1 << 4)
#define PWM_INTEN_CH2_H (1 << 5)
#define PWM_INTEN_CH3_L (1 << 6)
#define PWM_INTEN_CH3_H (1 << 7)
#define PWM_INTEN_PERIOD (1 << 8)
#define PWM_INTEN_BRAKE (1 << 9)
#define PWM_INTEN_REPT (1 << 10)

15.bflb_pwm_v2_get_intstatus

說明:獲取 PWM 中斷標(biāo)志。

uint32_t bflb_pwm_v2_get_intstatus(struct bflb_device_s *dev);

返回值如下:

#define PWM_INTSTS_CH0_L (1 << 0)
#define PWM_INTSTS_CH0_H (1 << 1)
#define PWM_INTSTS_CH1_L (1 << 2)
#define PWM_INTSTS_CH1_H (1 << 3)
#define PWM_INTSTS_CH2_L (1 << 4)
#define PWM_INTSTS_CH2_H (1 << 5)
#define PWM_INTSTS_CH3_L (1 << 6)
#define PWM_INTSTS_CH3_H (1 << 7)
#define PWM_INTSTS_PERIOD (1 << 8)
#define PWM_INTSTS_BRAKE (1 << 9)
#define PWM_INTSTS_REPT (1 << 10)

16.bflb_pwm_v2_int_clear

說明: 清除 PWM 中斷標(biāo)志。

void bflb_pwm_v2_int_clear(struct bflb_device_s *dev, uint32_t int_clear);

int_clear 可以填入以下參數(shù):

#define PWM_INTCLR_CH0_L (1 << 0)
#define PWM_INTCLR_CH0_H (1 << 1)
#define PWM_INTCLR_CH1_L (1 << 2)
#define PWM_INTCLR_CH1_H (1 << 3)
#define PWM_INTCLR_CH2_L (1 << 4)
#define PWM_INTCLR_CH2_H (1 << 5)
#define PWM_INTCLR_CH3_L (1 << 6)
#define PWM_INTCLR_CH3_H (1 << 7)
#define PWM_INTCLR_PERIOD (1 << 8)
#define PWM_INTCLR_BRAKE (1 << 9)
#define PWM_INTCLR_REPT (1 << 10)

17.bflb_pwm_v2_feature_control

說明: PWM 其他特性相關(guān)控制,一般不常用。

int bflb_pwm_v2_feature_control(struct bflb_device_s *dev, int cmd, size_t arg);

cmd 可以填入以下參數(shù):

#define PWM_CMD_SET_TRIG_ADC_SRC (0x01)
#define PWM_CMD_SET_EXT_BRAKE_POLARITY (0x02)
#define PWM_CMD_SET_EXT_BRAKE_ENABLE (0x03)
#define PWM_CMD_SET_SW_BRAKE_ENABLE (0x04)
#define PWM_CMD_SET_STOP_ON_REPT (0x05)
#define PWM_CMD_SET_REPT_COUNT (0x06)

示例:PWM 實(shí)現(xiàn)呼吸燈

呼吸燈是 PWM 最常見的例子,非常的簡(jiǎn)單,首先將頻率調(diào)好,人眼識(shí)別的頻率大于 50Hz 時(shí),由于識(shí)別不了這么高的閃爍頻率,看起來就像常亮一樣。總結(jié)起來就是:

頻率很高時(shí),看不到閃爍,占空比越大,LED 越亮;頻率很低時(shí),可看到閃爍,占空比越大,LED 越亮。

所以我們只需要調(diào)好頻率,在改變占空比的情況下就可以看到 LED 燈亮度變化過程。在一個(gè) while 函數(shù)里實(shí)現(xiàn)即可。

Main

#include "bflb_mtimer.h" //mtimer定時(shí)器頭文件
#include "bflb_pwm_v2.h" //pwm_v2頭文件
#include "bflb_clock.h" //系統(tǒng)時(shí)鐘頭文件
#include "board.h" //開發(fā)板頭文件,包裝的庫(kù)
#include "bflb_gpio.h" //gpio頭文件
struct bflb_device_s *pwm; //創(chuàng)建LHAL外設(shè)庫(kù)結(jié)構(gòu)體,名稱為pwm
void my_pwm_gpio_init() //編寫一個(gè)選擇pwm輸出的gpio口初始化函數(shù)
{
struct bflb_device_s *gpio;
gpio = bflb_device_get_by_name("gpio");
bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
//選擇IO0作為pwm輸出,
}
int main(void)
{
int i; //臨時(shí)變量i,作為改變占空比的變量
board_init(); //板子初始化
my_pwm_gpio_init(); //調(diào)用函數(shù),里面設(shè)置好了pwm輸出的gpio口
pwm = bflb_device_get_by_name("pwm_v2_0"); //給外設(shè)接口賦名pwm_v2_0
/* period = .XCLK / .clk_div / .period = 40MHz / 40 / 1000 = 1KHz */
struct bflb_pwm_v2_config_s cfg = {
.clk_source = BFLB_SYSTEM_XCLK,
.clk_div = 40,
.period = 1000,
}; //設(shè)置PWM的頻率,選擇時(shí)鐘,分頻,和周期。根據(jù)上面的公式算出最終的頻率。
/*初始化PWM輸出*/
bflb_pwm_v2_init(pwm, &cfg);
bflb_pwm_v2_start(pwm); //將設(shè)置好的頻率開啟pwm輸出
while (1) {
//藍(lán)燈呼吸亮滅
bflb_pwm_v2_channel_positive_start(pwm, PWM_CH0); //那么問題來了,如何知道IO口對(duì)應(yīng)的PWM通道,后面會(huì)解答,IO0是通道0
for(i=150;i>0;i--)
{
bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0, i, 150); //改變占空比,變量i會(huì)不斷變化

bflb_mtimer_delay_ms(10);
}
for(i=1;i<150;i++)
{
bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0, i, 150);
bflb_mtimer_delay_ms(10);
}
bflb_pwm_v2_channel_positive_stop(pwm, PWM_CH0);
}
}

確定 IO 對(duì)應(yīng) PWM 通道

確定 IO 對(duì)應(yīng) PWM 通道

查看 BL616/618 的芯片數(shù)據(jù)手冊(cè):

bl616_bl618_ds_zh_cn_1.4.pdf (http://ai-thinker.com)

呼吸燈效果

動(dòng)圖封面

聲明:本文內(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)投訴
  • 開源硬件
    +關(guān)注

    關(guān)注

    8

    文章

    232

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    小安立式桌擺外殼設(shè)計(jì)制作

    小安-Eyes-R2,但是一直沒什么時(shí)間好好的研究一下。近期學(xué)習(xí)了一下相關(guān)例程,感覺用的很難受,大概是因?yàn)槠聊慌啪€比較短且板子和屏幕不好固定,以及燒錄兩個(gè)按鍵必須要倆手按,于是考慮做外殼固定一下。 ?
    的頭像 發(fā)表于 09-09 17:20 ?832次閱讀
    <b class='flag-5'>小安</b><b class='flag-5'>派</b>立式桌擺外殼設(shè)計(jì)制作

    【開源硬件】小安AiPi-Eyes-R2詳細(xì)測(cè)評(píng)+DIY天氣時(shí)鐘

    接口-130W像素 1 顯示器-4.0寸-RGB接口40寸-像素480x480 1 咪頭-2pin-1.25mm間距-交叉絞線100mm 2 具體開箱流程照片如下: 環(huán)境搭建 因?yàn)橹肮P者已經(jīng)用過Windows開發(fā)
    的頭像 發(fā)表于 08-12 16:23 ?793次閱讀
    【開源硬件】<b class='flag-5'>小安</b><b class='flag-5'>派</b>AiPi-<b class='flag-5'>Eyes</b>-R2詳細(xì)測(cè)評(píng)+DIY天氣時(shí)鐘

    上手體驗(yàn)安信可小安AI開發(fā)板,如何接入Home Assistant?

    以下作品由安信可社區(qū)用戶 無垠的廣袤 制作 感謝安信可社區(qū)的支持,免費(fèi)領(lǐng)到了安信可的最新產(chǎn)品 小安AI - AiPi-PalChatV1 語(yǔ)音開發(fā)板。 原貼地址: 【AiPi-PalChatV
    的頭像 發(fā)表于 07-08 10:34 ?4707次閱讀
    上手體驗(yàn)安信可<b class='flag-5'>小安</b><b class='flag-5'>派</b>AI<b class='flag-5'>開發(fā)</b>板,如何接入Home Assistant?

    【教程】零基礎(chǔ)!手把手教你使用STM32F4進(jìn)行E22-400T22S編程通信

    通過本文帶大家零基礎(chǔ)使用STM32F407VET6單片機(jī)進(jìn)行E22-400T22S模塊編程并進(jìn)行簡(jiǎn)單的通信,當(dāng)然如果學(xué)會(huì)了,也可以舉一反三應(yīng)用于E22、E220、E32所有模塊上。一STM32環(huán)境
    的頭像 發(fā)表于 07-03 19:32 ?1485次閱讀
    【教程】<b class='flag-5'>零基</b>礎(chǔ)!手把手教你使用STM32F4進(jìn)行E22-400T22<b class='flag-5'>S</b>編程通信

    零基礎(chǔ)學(xué)習(xí)LuatOS編程:快速上手開發(fā)實(shí)戰(zhàn)教程!

    無論你是剛接觸物聯(lián)網(wǎng)編程的新手,還是希望拓展技能的技術(shù)愛好者,本教程將為零基礎(chǔ)的讀者提供一條清晰的LuatOS學(xué)習(xí)路徑。從安裝開發(fā)工具到編寫第一個(gè)程序,我們將通過實(shí)例講解核心概念,助你快速實(shí)現(xiàn)從理論
    的頭像 發(fā)表于 06-13 17:27 ?618次閱讀
    <b class='flag-5'>零基</b>礎(chǔ)學(xué)習(xí)LuatOS編程:快速上手<b class='flag-5'>開發(fā)</b>實(shí)戰(zhàn)教程!

    死角玩轉(zhuǎn)STM32——中級(jí)

    本文共4冊(cè),由于資料內(nèi)存過大,分開上傳,有需要的朋友可以去主頁(yè)搜索下載哦~ 《死角玩轉(zhuǎn) STM32》系列教程由初級(jí)、中級(jí)、高級(jí)、系統(tǒng)
    發(fā)表于 05-21 13:56

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+讀《零基礎(chǔ)開發(fā)AI Agent》掌握扣子平臺(tái)開發(fā)智能體方法

    收到發(fā)燒友網(wǎng)站寄來的《零基礎(chǔ)開發(fā)AI Agent》這本書已經(jīng)有好些天了,這段時(shí)間有幸拜讀了一下全書,掌握了一個(gè)開發(fā)智能體的方法。 該書充分從零基礎(chǔ)入手,先闡述了Agent是什么,它的基
    發(fā)表于 05-14 19:51

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+ 入門學(xué)習(xí)

    很高興又有機(jī)會(huì)學(xué)習(xí)ai技術(shù),這次試讀的是「零基礎(chǔ)開發(fā)AI Agent」,作者葉濤、管鍇、張心雨。 大模型的普及是近三年來的一件大事,萬(wàn)物皆可大模型已成為趨勢(shì)。作為大模型開發(fā)應(yīng)用中重要組成部分,提示詞
    發(fā)表于 05-02 09:26

    【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+初品Agent

    期待中的《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體》終于寄到了,該書由葉濤、 管鍇、張心雨完成,并由電子工業(yè)出版社出版發(fā)行。 全書分為三個(gè)部分,即入門、工具及實(shí)踐
    發(fā)表于 04-22 11:51

    請(qǐng)求贈(zèng)閱《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體》

    博主好!致敬葉濤 管鍇 張心雨三位AI具身智能-智能體方面的專家、導(dǎo)師! 《零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體》一不懂編程的多數(shù)大眾也可以開發(fā)Agent,這意義深遠(yuǎn),功德無量
    發(fā)表于 04-10 12:16

    功德+1,用小安-Eyes-S1做一個(gè)電子木魚

    2024積德累功,心想事成!接下來看看如何用小安-Eyes-S1做一個(gè)電子木魚。01GUI-Guider頁(yè)面設(shè)計(jì)先新建一個(gè)工程。直接進(jìn)入U(xiǎn)I設(shè)計(jì)界面,這里用到了兩個(gè)
    的頭像 發(fā)表于 04-09 18:38 ?981次閱讀
    功德+<b class='flag-5'>1</b>,用<b class='flag-5'>小安</b><b class='flag-5'>派</b>-<b class='flag-5'>Eyes-S1</b>做一個(gè)電子木魚

    基于小凌RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制PWM外設(shè)

    1、案例簡(jiǎn)介 本案例是在小凌-RK2206開發(fā)板上使用IoT庫(kù)PWM接口,進(jìn)行PWM編程開發(fā)。
    發(fā)表于 04-09 09:37

    基于小凌RK2206開發(fā)板:OpenHarmony如何使用IoT接口控制PWM外設(shè)

    1、案例簡(jiǎn)介本案例是在小凌-RK2206開發(fā)板上使用IoT庫(kù)PWM接口,進(jìn)行PWM編程開發(fā)。例
    的頭像 發(fā)表于 04-09 08:59 ?2634次閱讀
    基于小凌<b class='flag-5'>派</b>RK2206<b class='flag-5'>開發(fā)</b>板:OpenHarmony如何使用IoT接口控制<b class='flag-5'>PWM</b><b class='flag-5'>外設(shè)</b>

    零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體》

    零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體》是一本為普通人量身打造的AI開發(fā)指南。它不僅深入淺出地講解了Agent的概念和發(fā)展,還通過詳細(xì)的工具介紹和實(shí)戰(zhàn)案例,幫助讀者快速掌握
    發(fā)表于 03-18 12:03

    名單公布!【書籍評(píng)測(cè)活動(dòng)NO.59】零基礎(chǔ)開發(fā)AI Agent——手把手教你用扣子做智能體

    以上圖文并茂。 4、試讀報(bào)告發(fā)表在電子發(fā)燒友論壇>>社區(qū)活動(dòng)專版標(biāo)題名稱必須包含【「零基礎(chǔ)開發(fā)AI Agent」閱讀體驗(yàn)】+自擬標(biāo)題 注意事項(xiàng) 1、活動(dòng)期間如有作弊
    發(fā)表于 03-10 16:29