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)不再提示

安信可VC-01/02二次開發(fā)篇: PWM輸出

AIoT行業(yè)洞察 ? 來源:AIoT行業(yè)洞察 ? 作者:AIoT行業(yè)洞察 ? 2025-08-27 16:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

wKgZO2iuvICAUfsJAADZnR7ctsE862.jpg


安信可離線語(yǔ)音VC-01/02:硬件規(guī)格書、開發(fā)資料、燒錄工具、應(yīng)用開發(fā)

安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【基礎(chǔ)認(rèn)知篇】
安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【快速上手篇】
安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【中級(jí)入門篇】
安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【高級(jí)進(jìn)階篇】
安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】虛擬開發(fā)環(huán)境搭建和分享
安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】事件和GPIO控制
安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】PWM輸出
安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】串口輸出
安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】SDK音頻替換失敗記錄過程
安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】自定義音頻播放控制

安信可離線語(yǔ)音模組 VC-01、VC-02 系列教程 【二次開發(fā)篇】PWM輸出

簡(jiǎn)介

上一篇文章中我們對(duì)SDK的GPIO輸出進(jìn)行了控制, 我們將在本章節(jié)對(duì)PWM的輸出進(jìn)行控制(如果沒有看過上一篇文章的,建議先去看對(duì)組件和設(shè)計(jì)的庫(kù)函數(shù)的介紹),本篇SDK文件還是使用的上一章節(jié)的SDK(如無特殊說明,SDK不變)。

默認(rèn)PWM DEMO輸出現(xiàn)象

首先,在user_config.h 文件中開啟對(duì)PWMLED的宏, 使其用戶代碼默認(rèn)燒錄USER_DEMO_PWM_LED的例程。

wKgZO2iuvIGAJHK5AAEfoHzIO58145.jpg

根據(jù)對(duì)應(yīng)的hb_pwm_led.c 得知, 其線程啟動(dòng)后,主要是控制PWM_NUM_1_A27進(jìn)行輸出。

#define PWM_LED_GPIO_NUM  PWM_NUM_1_A27   // "MOSI" on HB-M demo board

首先對(duì)默認(rèn)的Demo進(jìn)行編譯,并且下載到VC-02中。

示波器連接到開發(fā)板背部的GPIOA27上, 那么此時(shí)示波器的波形如下所示:

wKgZO2iuvIGAXAVHAAFYOeI3cew186.jpg


占空比緩慢變化

wKgZO2iuvIKAMuAuAAFbmQ6EB9o713.jpg

此時(shí)默認(rèn)的出廠PWM demo已經(jīng)測(cè)試完畢。

如果想控制對(duì)應(yīng)的PWM輸出,可以參考user_pwm.h 中的函數(shù)定義。函數(shù)聲明如下所示:

#ifndef USER_INC_USER_PWM_H_
#define USER_INC_USER_PWM_H_
#ifdef __cplusplus
  extern "C" {
#endif
#include "unione.h"
/** @ingroup uni_pwm_def
* PWM管腳號(hào)
*/
typedef enum {
  PWM_NUM_1_A27 = 0,
  PWM_NUM_1_B0,
  PWM_NUM_1_B2,      ///< PWM 1 only 1 pin work a time
  PWM_NUM_2_A28,     ///< used for PA enable, don't use it on HB-M demo board
  PWM_NUM_2_B1,
  PWM_NUM_2_B3,      ///< PWM 2 only 1 pin work a time
  PWM_NUM_MAX
}USER_PWM_NUM;
/** @addtogroup uni_pwm_inf
@{*/
/**
*@brief PWM初始化
*@param num PWM管腳號(hào)
*@param hz 頻率
*@param is_high_duty a TRUE :占空比用高電平持續(xù)時(shí)間計(jì)算; a FALSE :占空比用低電平持續(xù)時(shí)間計(jì)算
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_init(USER_PWM_NUM num, uni_u32 hz, uni_bool is_high_duty);
/**
*@brief PWM反初始化
*@param num PWM管腳號(hào)
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_final(USER_PWM_NUM num);
/**
*@brief 開使PWM輸出
*@param num PWM管腳號(hào)
*@param duty 占空比
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_start(USER_PWM_NUM num, uni_u8 duty);
/**
*@brief 停止PWM輸出
*@param num PWM管腳號(hào)
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_stop(USER_PWM_NUM num);
/**
*@brief 暫停PWM輸出
*@param num PWM管腳號(hào)
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_pause(USER_PWM_NUM num);
/**
*@brief 恢復(fù)PWM輸出
*@param num PWM管腳號(hào)
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_resume(USER_PWM_NUM num);
/**
*@brief PWM占空比切換
*@param num PWM管腳號(hào)
*@param duty 占空比
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_change_duty(USER_PWM_NUM num, uni_u8 duty);
/**
*@brief PWM占空比增加
*@param num PWM管腳號(hào)
*@param ch_duty 增加的占空比
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_duty_inc(USER_PWM_NUM num, uni_u8 ch_duty);
/**
*@brief PWM占空比減小
*@param num PWM管腳號(hào)
*@param ch_duty 減小的占空比
*@retval 0  操作成功
*@retval -1 操作失敗
*/
int user_pwm_duty_dec(USER_PWM_NUM num, uni_u8 ch_duty);
/** @}*/
#ifdef __cplusplus
}
#endif
#endif

自定義控制命令

嘗試使用喚醒命令 “你好小美” 來啟動(dòng)PWM進(jìn)程, 使用 “打開臺(tái)燈” 命令來刪除這個(gè)進(jìn)程,從而控制PWM進(jìn)行輸出。

由于官方的SDK寫的非常規(guī)范, 所以建議凡是個(gè)人相關(guān)的代碼都可以寫在example目錄下。

1、首先在example 目錄下創(chuàng)建hb_user_pwm_testing.c 文件,代碼如下所示:

#include "user_gpio.h"
#include "user_pwm_led.h"
#include "user_event.h"
#include "user_player.h"
#include "user_config.h"
#define PWM_LED_GPIO_NUM  PWM_NUM_1_A27   // "MOSI" on HB-M demo board
static uni_pthread_t g_pwm_thread_id = 0;
static bool g_pwm_thread_running = false;
// Thread function to update LED brightness levels
static void _pwm_led_process(void *args) {
  LED_BRIGHT_LEVEL level = BRIGHT_LEVEL_0;
  g_pwm_thread_running = true;
  while (g_pwm_thread_running) {
    user_pwm_led_set_brightness(PWM_LED_GPIO_NUM, level);
    level += 1;
    if (level >= BRIGHT_LEVEL_MAX) {
      level = BRIGHT_LEVEL_0;
    }
    // uni_sleep(1); // Optional: slow down effect
  }
}
// Create PWM LED thread
static Result _create_pwm_led_thread(void) {
  if (g_pwm_thread_running) {
    return E_OK;
  }
  thread_param param;
  uni_memset(?m, 0, sizeof(param));
  param.stack_size = STACK_SMALL_SIZE;
  param.priority = OS_PRIORITY_LOW;
  uni_strncpy(param.task_name, "pwm_led", sizeof(param.task_name) - 1);
  if (0 != uni_pthread_create(&g_pwm_thread_id, ?m, _pwm_led_process, NULL)) {
    return E_FAILED;
  }
  uni_pthread_detach(g_pwm_thread_id);  // Auto cleanup
  return E_OK;
}
// Stop PWM thread
static void _stop_pwm_led_thread(void) {
  if (!g_pwm_thread_running) {
    return;
  }
  g_pwm_thread_running = false;
  // Destroy thread if supported (may be platform-specific)
  if (g_pwm_thread_id != 0) {
    uni_pthread_destroy(g_pwm_thread_id);  // Hard stop
    g_pwm_thread_id = 0;
  }
  user_pwm_led_set_brightness(PWM_LED_GPIO_NUM, BRIGHT_LEVEL_0);  // Turn off LED
}
// Callback on voice command
static void _on_wakeup_cmd_cb(USER_EVENT_TYPE event, user_event_context_t *context) {
  if (context == NULL) return;
  event_goto_awakend_t *awake = &context->goto_awakend;
  if (strcmp(awake->cmd, "wakeup_uni") == 0) {
    _create_pwm_led_thread();
    user_player_reply_list_random(awake->reply_files);
  }
}
static void _custom_setting_cb(USER_EVENT_TYPE event,
                               user_event_context_t *context) {
  event_custom_setting_t *setting = NULL;
  if (context) {
    setting = &context->custom_setting;
    if (strcmp(setting->cmd, "TurnOn") == 0) {
       _stop_pwm_led_thread();
       user_player_reply_list_random(setting->reply_files);
    }
  }
}
// Register event callback
static void _register_event_callback(void) {
  user_event_subscribe_event(USER_GOTO_AWAKENED, _on_wakeup_cmd_cb);
  user_event_subscribe_event(USER_CUSTOM_SETTING, _custom_setting_cb);
}
// Main entry
int hb_user_pwm_testing(void) {
  if (0 != user_pwm_led_init(PWM_LED_GPIO_NUM)) {
    return -1;
  }
  _register_event_callback();
  return 0;
}

上述代碼的主要功能是定義兩個(gè)用戶事件 :

第一個(gè)為自定義設(shè)置的事件。

另一個(gè)則是喚醒事件 (上一篇文章中有介紹)。在識(shí)別到 “你好小美” 和 “打開燈光” 的時(shí)候控制對(duì)應(yīng)的PWM行為。 如果當(dāng)前PWM輸出的線程沒有被創(chuàng)建, 那么當(dāng)識(shí)別到“你好小美”的時(shí)候?qū)?dòng)線程。當(dāng)識(shí)別到“打開燈光”的時(shí)候則根據(jù)上述創(chuàng)建線程時(shí)的線程號(hào)刪除線程。

2、添加編譯支持在

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/build/user/src/examples下的subdir.mk添加對(duì)當(dāng)前編譯文件的引用。

wKgZPGiuvIKAF3VQAADeahHReB8051.jpg

3、 修改/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/inc/user_config.h文件, 增加對(duì)應(yīng)的demo宏支持。

wKgZPGiuvIOANRKzAADujy2lv0E029.jpg

4、修改

/home/vc02/Downloads/uni_hb_m_solution/unione_lite_app_hb_m/user/src/user_main.c ,增加對(duì)上述自定義宏的支持。

wKgZPGiuvISALKSLAADRJEUFmaw369.jpg

wKgZO2iuvISAI098AADg37c4RYc176.jpg

5、編譯并且燒錄固件。

wKgZPGiuvIWAFPriAADE9OwCBng620.jpg

實(shí)驗(yàn)現(xiàn)象

默認(rèn)上電波形如下(不清楚為什么會(huì)有毛刺)

wKgZO2iuvIWAOW16AAFak7M-fT4671.jpg

使用“你好小美” 喚醒,波形如下:

wKgZPGiuvIWAHtEyAAFaQVKi7O0215.jpg

wKgZPGiuvIaAJJ4ZAAFtHvsGndg375.jpg

使用“你好小美”喚醒 + “打開燈光” 關(guān)閉PWM,輸出如下:

wKgZPGiuvIaADTszAAFdxVhedBE839.jpg

附件

uni_app_release_update.zip(882.62 KB, 下載次數(shù): 0)

總結(jié)

在上文中主要結(jié)合IO和PWM的example進(jìn)行了二次開發(fā)。其實(shí)可以發(fā)現(xiàn),無論什么自定義功能,都是首先找到對(duì)應(yīng)的庫(kù)函數(shù)或者example進(jìn)行引用。

在明白原理之后定義創(chuàng)建自己的.c 文件,然再將當(dāng)前文件添加到編譯的上下文中,在對(duì)應(yīng)的h文件中開啟對(duì)自定義C文件的宏定義,即可完成自定義的功能的二次開發(fā)。

實(shí)際上這個(gè)SDK的完整度非常高, 代碼也非常規(guī)范!相信通過這幾篇文章你能很快上手安信可的離線語(yǔ)音產(chǎ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)投訴
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    116

    文章

    5869

    瀏覽量

    225595
  • 安信可
    +關(guān)注

    關(guān)注

    0

    文章

    226

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    宇樹人形機(jī)器人的配置,核心代碼,調(diào)試方法,二次開發(fā)接口

    宇樹人形機(jī)器人的配置,核心代碼,調(diào)試方法,二次開發(fā)接口
    的頭像 發(fā)表于 12-10 09:05 ?3448次閱讀

    先楫芯片賦能HPM生態(tài)靈巧手二次開發(fā),工業(yè)控制/實(shí)驗(yàn)室原型速落地

    手動(dòng)作精準(zhǔn)度,更有HPMSDK提供FreeRTOS/ROS等豐富中間件,從底層驅(qū)動(dòng)到應(yīng)用層開發(fā)全流程覆蓋,配合100萬空載開合測(cè)試驗(yàn)證的穩(wěn)定硬件,讓二次開發(fā)既高效又可靠
    的頭像 發(fā)表于 12-02 10:01 ?559次閱讀
    先楫芯片賦能HPM生態(tài)靈巧手<b class='flag-5'>二次開發(fā)</b>,工業(yè)控制/實(shí)驗(yàn)室原型速落地

    小智AI語(yǔ)音模組實(shí)測(cè):實(shí)現(xiàn)語(yǔ)音控制關(guān)燈

    ,完整復(fù)現(xiàn)一智能語(yǔ)音產(chǎn)品的測(cè)試流程。 No01、開箱與硬件初探 很幸運(yùn)收到送測(cè)試的Ai-WV01
    的頭像 發(fā)表于 11-19 16:09 ?1074次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>小智AI語(yǔ)音模組實(shí)測(cè):實(shí)現(xiàn)語(yǔ)音控制關(guān)燈

    將蜂鳥E203的內(nèi)核移植到fpga之后該怎么進(jìn)行二次開發(fā)呢?

    你們好!請(qǐng)問一下我將蜂鳥E203的內(nèi)核移植到fpga之后該怎么進(jìn)行二次開發(fā)呢?比如我想點(diǎn)亮板子上的led?驅(qū)動(dòng)攝像頭進(jìn)行圖像識(shí)別?這些該如何進(jìn)行呢?蜂鳥有類似freedom studio這樣的嵌入式開發(fā)平臺(tái)嗎?
    發(fā)表于 11-10 07:09

    直播回顧 | 掌握車載通信核心技術(shù),虹科CAN總線實(shí)戰(zhàn):PCAN二次開發(fā)技術(shù)直播助您輕松拿捏總線開發(fā)“創(chuàng)新引擎

    ?1CAN總線二次開發(fā):構(gòu)建智能汽車“神經(jīng)網(wǎng)絡(luò)”的核心能力在“軟件定義汽車”的時(shí)代,整車電子電氣架構(gòu)正從分布走向集中,車載網(wǎng)絡(luò)的數(shù)據(jù)量和復(fù)雜度呈指數(shù)級(jí)增長(zhǎng)?;赑CAN等專業(yè)工具的二次開發(fā)能力
    的頭像 發(fā)表于 10-09 17:33 ?599次閱讀
    直播回顧 | 掌握車載通信核心技術(shù),虹科CAN總線實(shí)戰(zhàn):PCAN<b class='flag-5'>二次開發(fā)</b>技術(shù)直播助您輕松拿捏總線<b class='flag-5'>開發(fā)</b>“創(chuàng)新引擎

    【離線語(yǔ)音】VC-01/02二次開發(fā):自定義音頻播放控制

    系列教程 【二次開發(fā)】虛擬開發(fā)環(huán)境搭建和分享 離線語(yǔ)音模組
    的頭像 發(fā)表于 09-25 16:34 ?864次閱讀
    【離線語(yǔ)音】<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>VC-01</b>/<b class='flag-5'>02</b><b class='flag-5'>二次開發(fā)</b><b class='flag-5'>篇</b>:自定義音頻播放控制

    如何使用SDK進(jìn)行自定義音頻播放功能

    在上一文章離線語(yǔ)音模組 VC-01、VC-02 系列教程 【
    的頭像 發(fā)表于 09-25 15:52 ?3698次閱讀
    如何使用SDK進(jìn)行自定義音頻播放功能

    SDK音頻替換失敗記錄過程

    離線語(yǔ)音模組 VC-01、VC-02 系列教程 【中級(jí)入門】中根據(jù)設(shè)置的不同回復(fù)詞和命
    的頭像 發(fā)表于 09-25 15:50 ?2030次閱讀
    SDK音頻替換失敗記錄過程

    VC-01/02二次開發(fā): 事件和GPIO控制

    系列教程 【二次開發(fā)】虛擬開發(fā)環(huán)境搭建和分享 離線語(yǔ)音模組
    的頭像 發(fā)表于 08-19 14:02 ?1085次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>VC-01</b>/<b class='flag-5'>02</b><b class='flag-5'>二次開發(fā)</b><b class='flag-5'>篇</b>: 事件和GPIO控制

    【離線語(yǔ)音】VC-01/02教程:中級(jí)入門

    系列教程 【二次開發(fā)】虛擬開發(fā)環(huán)境搭建和分享 離線語(yǔ)音模組
    的頭像 發(fā)表于 07-31 09:33 ?846次閱讀
    【離線語(yǔ)音】<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b><b class='flag-5'>VC-01</b>/<b class='flag-5'>02</b>教程:中級(jí)入門<b class='flag-5'>篇</b>

    云MES系統(tǒng)源碼,支持 SaaS 多租戶,支持二次開發(fā)

    萬界星空科技MES生產(chǎn)制造執(zhí)行系統(tǒng)源碼,有演示,多個(gè)項(xiàng)目應(yīng)用案例,成熟穩(wěn)定。支持二次開發(fā),商業(yè)授權(quán)后商用。
    的頭像 發(fā)表于 05-07 11:14 ?789次閱讀
    云MES系統(tǒng)源碼,支持 SaaS 多租戶,支持<b class='flag-5'>二次開發(fā)</b>

    因?yàn)镾DP-H1無法進(jìn)行二次開發(fā),想用SDP-K1連接AD7779評(píng)估板,接口是否匹配?

    因?yàn)镾DP-H1無法進(jìn)行二次開發(fā),想用SDP-K1連接AD7779評(píng)估板,接口是否匹配?
    發(fā)表于 04-24 07:51

    如何用藍(lán)牙模塊遠(yuǎn)程控制家中的設(shè)備?

    ,支持二次開發(fā),本工程通過Keil二次進(jìn)行了開發(fā)。 模組特點(diǎn) 支持協(xié)議:藍(lán)牙5.2 發(fā)射功率:10dBm 接收電流:9.4mA 發(fā)送電流:
    的頭像 發(fā)表于 04-22 17:47 ?715次閱讀
    如何用<b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>藍(lán)牙模塊遠(yuǎn)程控制家中的設(shè)備?

    語(yǔ)音開放平臺(tái)的使用——VC系列SDK的獲取

    離線語(yǔ)音開放平臺(tái)提供了開發(fā)量接近于零的SDK生成功能,對(duì)于功能簡(jiǎn)單的控制及串口輸出,甚至可以直接生成固件進(jìn)行燒錄測(cè)試。
    的頭像 發(fā)表于 04-12 11:24 ?896次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>語(yǔ)音開放平臺(tái)的使用——<b class='flag-5'>VC</b>系列SDK的獲取

    離線語(yǔ)音開發(fā)板:二次開發(fā)語(yǔ)音控制LED燈

    前言 經(jīng)過前面的學(xué)習(xí),相信大家已經(jīng)了解離線語(yǔ)音開發(fā)環(huán)境的搭建流程。甚至已經(jīng)編譯過固件,并進(jìn)行了測(cè)試。本文將從產(chǎn)品創(chuàng)建開始講起,一步一步實(shí)現(xiàn)語(yǔ)音控制LED的功能。 語(yǔ)音開放平臺(tái):
    的頭像 發(fā)表于 03-19 10:53 ?1013次閱讀
    <b class='flag-5'>安</b><b class='flag-5'>信</b><b class='flag-5'>可</b>離線語(yǔ)音<b class='flag-5'>開發(fā)</b>板:<b class='flag-5'>二次開發(fā)</b>語(yǔ)音控制LED燈