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

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

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

【英飛凌開發(fā)板模塊評測任務(wù)大挑戰(zhàn)】PWM外設(shè)使用

冬至子 ? 來源:chejia12 ? 作者:chejia12 ? 2023-08-11 16:57 ? 次閱讀

2.PWM驅(qū)動

2.1進入工程目錄,啟動 Env 控制臺

1.jpg

2.2pwm 驅(qū)動使能

1.jpg

2.3保存配置,自動生成mdk5的工程

1.jpg

2.4測試驅(qū)動代碼

驅(qū)動涉及的io口

1.jpg

在menuconfig中配置生成的宏

1.jpg

KConfig

1.jpg

2.5測試代碼
//-----------------------------pwm測試代碼 ---------------開始------------------
#define PWM_DEV_NAME "pwm0"
#define PWM_DEV_CHANNEL 0
struct rt_device_pwm *pwm_dev;
static int pwm_sample(int argc, char *argv[])
{
rt_uint32_t period, pulse, dir;
period = 1 * 1000 * 1000;
dir = 1;
pulse = 0;
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;
}
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
rt_kprintf("Now PWM[%s] Channel[%d] Period[%d] Pulse[%d]n", PWM_DEV_NAME, PWM_DEV_CHANNEL, period, pulse);
while (1)
{
rt_thread_mdelay(50);
if (dir)
{
pulse += 100000;
}
else
{
pulse -= 100000;
}
if (pulse >= period)
{
dir = 0;
}
if (0 == pulse)
{
dir = 1;
}
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
}
}
//導(dǎo)出函數(shù)到命令行
MSH_CMD_EXPORT(pwm_sample, channel7 sample);
//-----------------------------pwm測試代碼 ---------------結(jié)束------------------

2.6 pwm驅(qū)動框架學習

1.jpg

實現(xiàn)pwm控制函數(shù)

在控制函數(shù)內(nèi)部根據(jù)命令的類型,編寫對應(yīng)的外設(shè)控制函數(shù)

rt_err_t (control)(struct rt_device_pwm device, int cmd, void *arg);

命令的類型有

#define PWM_CMD_ENABLE (RT_DEVICE_CTRL_BASE(PWM) + 0)
#define PWM_CMD_DISABLE (RT_DEVICE_CTRL_BASE(PWM) + 1)
#define PWM_CMD_SET (RT_DEVICE_CTRL_BASE(PWM) + 2)
#define PWM_CMD_GET (RT_DEVICE_CTRL_BASE(PWM) + 3)
#define PWMN_CMD_ENABLE (RT_DEVICE_CTRL_BASE(PWM) + 4) //互補輸出打開
#define PWMN_CMD_DISABLE (RT_DEVICE_CTRL_BASE(PWM) + 5)
#define PWM_CMD_SET_PERIOD (RT_DEVICE_CTRL_BASE(PWM) + 6) //設(shè)置周期
#define PWM_CMD_SET_PULSE (RT_DEVICE_CTRL_BASE(PWM) + 7) //設(shè)置占空比
#define PWM_CMD_SET_DEAD_TIME (RT_DEVICE_CTRL_BASE(PWM) + 8) //設(shè)置死去時間
#define PWM_CMD_SET_PHASE (RT_DEVICE_CTRL_BASE(PWM) + 9)
#define PWM_CMD_ENABLE_IRQ (RT_DEVICE_CTRL_BASE(PWM) + 10)
#define PWM_CMD_DISABLE_IRQ (RT_DEVICE_CTRL_BASE(PWM) + 11)
實現(xiàn)各個控制函數(shù)

/*

  1. rt_pwm_enable pwm使能函數(shù),打開pwm輸出
    2. rt_pwm_disable 關(guān)閉pwm輸出
    3. rt_pwm_set 設(shè)置pwm頻率和占空比函數(shù)
    4. rt_pwm_set_period 設(shè)置pwm周期
    5. rt_pwm_set_pulse 設(shè)置占空比
    6. rt_pwm_set_dead_time 設(shè)置pwm死區(qū)時間
    7. rt_pwm_set_phase 設(shè)置pwm的輸出相位
    */
    rt_err_t rt_pwm_enable(struct rt_device_pwm device, int channel);
    rt_err_t rt_pwm_disable(struct rt_device_pwm device, int channel);
    rt_err_t rt_pwm_set(struct rt_device_pwm device, int channel, rt_uint32_t period, rt_uint32_t pulse);
    rt_err_t rt_pwm_set_period(struct rt_device_pwm device, int channel, rt_uint32_t period);
    rt_err_t rt_pwm_set_pulse(struct rt_device_pwm device, int channel, rt_uint32_t pulse);
    rt_err_t rt_pwm_set_dead_time(struct rt_device_pwm device, int channel, rt_uint32_t dead_time);
    rt_err_t rt_pwm_set_phase(struct rt_device_pwm *device, int channel, rt_uint32_t phase);

填充注冊前的各個配置結(jié)構(gòu)體的參數(shù)

通道
頻率
占空比
死區(qū)時間
相位調(diào)整
互補輸出使能
struct rt_pwm_configuration
{
rt_uint32_t channel; / 0 ~ n or 0 ~ -n, which depends on specific MCU requirements這取決于特定的MCU要求 /
rt_uint32_t period; / unit:ns 1ns4.29s:1Ghz0.23h 頻率 /
rt_uint32_t pulse; / unit:ns (pulse<=period)占空比 /
rt_uint32_t dead_time; / unit:ns 死區(qū)時間設(shè)置 /
rt_uint32_t phase; /unit: degree, 0~360, which is the phase of pwm output,其為pwm輸出的相位, /
/*

RT_TRUE : 互補輸出
RT_FALSE : 正常輸出.
*/
rt_bool_t complementary;
};
注冊pwm驅(qū)動

rt_err_t rt_device_pwm_register(

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

    關(guān)注

    112

    文章

    15885

    瀏覽量

    175365
  • CMD命令
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    8228
  • MCU控制
    +關(guān)注

    關(guān)注

    0

    文章

    48

    瀏覽量

    6704
  • PWM驅(qū)動
    +關(guān)注

    關(guān)注

    0

    文章

    28

    瀏覽量

    1166
  • RTThread
    +關(guān)注

    關(guān)注

    7

    文章

    132

    瀏覽量

    40684
收藏 人收藏

    評論

    相關(guān)推薦

    英飛凌PSoC? 62開發(fā)板 -LCD ILI9341 8080 DEMO

    英飛凌開發(fā)板
    rx_ted
    發(fā)布于 :2024年03月07日 21:08:39

    英飛凌電機控制開發(fā)板XMC4500 Relax Lite Kit

    日前,英飛凌社區(qū)邀請工程師對英飛凌推廣的XMC4000開發(fā)板做了評測,從產(chǎn)品特性、、板載資源、上電使用、基于DAVE3的開發(fā)等各個方面,全面
    發(fā)表于 12-12 09:44

    Nuvoton M487開發(fā)板的USCI外設(shè)評測

    映射了外設(shè),就選擇了USCI1來作為設(shè)備。我選擇映射的引腳是 PB.1和PB.2,查詢原理圖時鐘和數(shù)據(jù)輸出引腳分別是開發(fā)板的Arduino接口的A5和D0,直接使用即可。4. 打開USCI設(shè)備打開
    發(fā)表于 04-21 16:09

    NuMaker-M2354開發(fā)板外設(shè)模塊評測

    menuconfig配置更換為國內(nèi)的cn.ntp.org.cn服務(wù)器之后就不會有類似的失敗提示信息了。一般開發(fā)板上電約30秒左右,板載wifi模塊就能完成聯(lián)網(wǎng)并通過NTP工具實現(xiàn)網(wǎng)絡(luò)自動授時。外設(shè)性能指標測試
    發(fā)表于 10-28 15:25

    新唐 NuMaker-M2354模塊評測任務(wù)挑戰(zhàn)

    評測任務(wù)挑戰(zhàn)活動,讓開發(fā)者小伙伴們互相協(xié)作,對開發(fā)板的每個模塊功能進行
    的頭像 發(fā)表于 11-16 16:42 ?1254次閱讀

    RT-Thread聯(lián)合新唐科技發(fā)起開發(fā)板評測任務(wù)挑戰(zhàn)活動

    開發(fā)板開發(fā)者進行學習、產(chǎn)品原型開發(fā)、芯片評估不可缺少的,如何在有限的時間內(nèi)讓小伙伴充分利用好開發(fā)板?并且讓小伙伴更好的學習掌握RT-Thread呢?
    的頭像 發(fā)表于 02-17 13:43 ?1301次閱讀

    開發(fā)板評測】Renesas RA6M4開發(fā)板之CAN

    一、開箱 心心念念的開發(fā)板終于到了,外包裝很簡潔。打開后,除開發(fā)板外,還有《評估快速入門》和《基礎(chǔ)知識》兩本書,通過書中的內(nèi)容可以快速上手CPK-RA6M4開發(fā)板,贊?。。。?二、功
    的頭像 發(fā)表于 12-20 12:10 ?1298次閱讀

    N32L40XCL-STB 開發(fā)板模塊評測任務(wù)挑戰(zhàn)

    評測任務(wù)挑戰(zhàn)活動,讓開發(fā)者小伙伴們互相協(xié)作,對開發(fā)板的每個模塊功能進行
    的頭像 發(fā)表于 03-28 03:25 ?768次閱讀

    英飛凌開發(fā)板模塊評測任務(wù)挑戰(zhàn)

    ?RT-Thread 官方特聯(lián)合合作伙伴發(fā)起開發(fā)板評測任務(wù)挑戰(zhàn)活動,讓開發(fā)者小伙伴們互相協(xié)作,對開發(fā)板
    的頭像 發(fā)表于 04-11 09:05 ?769次閱讀

    基于STM32F4開發(fā)板的激光測距模塊串口通信(三)

    在我們使用外設(shè)時怎樣將外設(shè)的數(shù)據(jù)返回給開發(fā)板呢? 今天以STM32F4開發(fā)板為例,講解激光測距模塊如何通過串口通信將數(shù)據(jù)發(fā)送給
    發(fā)表于 05-17 09:50 ?6次下載
    基于STM32F4<b class='flag-5'>開發(fā)板</b>的激光測距<b class='flag-5'>模塊</b>串口通信(三)

    RA6M3 HMI Board 評測挑戰(zhàn),完成任務(wù)贏免單!

    評測任務(wù)挑戰(zhàn)活動,讓開發(fā)者小伙伴們互相協(xié)作,對開發(fā)板的每個模塊功能進行
    的頭像 發(fā)表于 05-31 04:05 ?927次閱讀
    RA6M3 HMI Board <b class='flag-5'>評測</b>大<b class='flag-5'>挑戰(zhàn)</b>,完成<b class='flag-5'>任務(wù)</b>贏免單!

    N32L40XCL-STB開發(fā)板模塊評測任務(wù)挑戰(zhàn)之UART

    本文主要對通過RT-Thread Studio對國民技術(shù)開發(fā)板N32L40XCL-STB 進行UART外設(shè)配置,實現(xiàn)開發(fā)板串口功能。
    的頭像 發(fā)表于 08-09 15:25 ?676次閱讀
    N32L40XCL-STB<b class='flag-5'>開發(fā)板</b><b class='flag-5'>模塊</b><b class='flag-5'>評測</b><b class='flag-5'>任務(wù)</b>大<b class='flag-5'>挑戰(zhàn)</b>之UART

    英飛凌開發(fā)板模塊評測任務(wù)挑戰(zhàn)-SPI驅(qū)動測試

    使用PSoC? 62 with CAPSENSE? evaluation kit開發(fā)板適配的RTT SPI驅(qū)動,做顯示測試。
    發(fā)表于 08-10 15:44 ?599次閱讀
    <b class='flag-5'>英飛凌</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>模塊</b><b class='flag-5'>評測</b><b class='flag-5'>任務(wù)</b>大<b class='flag-5'>挑戰(zhàn)</b>-SPI驅(qū)動測試

    英飛凌開發(fā)板模塊評測任務(wù)挑戰(zhàn)】mdk開發(fā)板環(huán)境搭建

    在rtt源碼內(nèi)部生成英飛凌芯片的獨立的工程
    的頭像 發(fā)表于 10-27 12:39 ?728次閱讀
    【<b class='flag-5'>英飛凌</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>模塊</b><b class='flag-5'>評測</b><b class='flag-5'>任務(wù)</b>大<b class='flag-5'>挑戰(zhàn)</b>】mdk<b class='flag-5'>開發(fā)板</b>環(huán)境搭建

    英飛凌開發(fā)板模塊評測任務(wù)挑戰(zhàn)開發(fā)初體驗

    主控芯片型號為 CY8C624ALQALQI-S2D42
    的頭像 發(fā)表于 11-13 12:38 ?604次閱讀
    【<b class='flag-5'>英飛凌</b><b class='flag-5'>開發(fā)板</b><b class='flag-5'>模塊</b><b class='flag-5'>評測</b><b class='flag-5'>任務(wù)</b>大<b class='flag-5'>挑戰(zhàn)</b>】<b class='flag-5'>開發(fā)</b>初體驗