0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【英飞凌开发板模块评测任务大挑战】PWM外设使用

冬至子 ? 来源:chejia12 ? 作者:chejia12 ? 2023-08-11 16:57 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

2.PWM驱动

2.1进入工程目录,启动 Env 控制台

1.jpg

2.2pwm 驱动使能

1.jpg

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

1.jpg

2.4测试驱动代码

驱动涉及的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);
}
}
//导出函数到命令行
MSH_CMD_EXPORT(pwm_sample, channel7 sample);
//-----------------------------pwm测试代码 ---------------结束------------------

2.6 pwm驱动框架学习

1.jpg

实现pwm控制函数

在控制函数内部根据命令的类型,编写对应的外设控制函数

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) //设置周期
#define PWM_CMD_SET_PULSE (RT_DEVICE_CTRL_BASE(PWM) + 7) //设置占空比
#define PWM_CMD_SET_DEAD_TIME (RT_DEVICE_CTRL_BASE(PWM) + 8) //设置死去时间
#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)
实现各个控制函数

/*

  1. rt_pwm_enable pwm使能函数,打开pwm输出
    2. rt_pwm_disable 关闭pwm输出
    3. rt_pwm_set 设置pwm频率和占空比函数
    4. rt_pwm_set_period 设置pwm周期
    5. rt_pwm_set_pulse 设置占空比
    6. rt_pwm_set_dead_time 设置pwm死区时间
    7. rt_pwm_set_phase 设置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);

填充注册前的各个配置结构体的参数

通道
频率
占空比
死区时间
相位调整
互补输出使能
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 死区时间设置 /
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驱动

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); ```
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    114

    文章

    17168

    浏览量

    184950
  • CMD命令
    +关注

    关注

    0

    文章

    28

    浏览量

    8579
  • MCU控制
    +关注

    关注

    0

    文章

    48

    浏览量

    6980
  • PWM驱动
    +关注

    关注

    0

    文章

    28

    浏览量

    1453
  • RTThread
    +关注

    关注

    8

    文章

    132

    浏览量

    41843
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于小凌派RK2206开发板:OpenHarmony如何使用IoT接口控制PWM外设

    1、案例简介本案例是在小凌派-RK2206开发板上使用IoT库PWM接口,进行PWM编程开发。例程将创建一个任务,每隔5秒将
    的头像 发表于 04-09 08:59 ?1180次阅读
    基于小凌派RK2206<b class='flag-5'>开发板</b>:OpenHarmony如何使用IoT接口控制<b class='flag-5'>PWM</b><b class='flag-5'>外设</b>

    01 Studio K230开发板开箱评测

    Studio K230开发板开箱评测
    的头像 发表于 06-28 14:26 ?1358次阅读
    01 Studio K230<b class='flag-5'>开发板</b>开箱<b class='flag-5'>评测</b>

    英飞凌PSoC? 62开发板 -LCD ILI9341 8080 DEMO

    英飞凌开发板
    rx_ted
    发布于 :2024年03月07日 21:08:39

    英飞凌电机控制开发板XMC4500 Relax Lite Kit

    日前,英飞凌社区邀请工程师对英飞凌推广的XMC4000开发板做了评测,从产品特性、、板载资源、上电使用、基于DAVE3的开发等各个方面,全面
    发表于 12-12 09:44

    Nuvoton M487开发板的USCI外设评测

    映射了外设,就选择了USCI1来作为设备。我选择映射的引脚是 PB.1和PB.2,查询原理图时钟和数据输出引脚分别是开发板的Arduino接口的A5和D0,直接使用即可。4. 打开USCI设备打开
    发表于 04-21 16:09

    新唐 NuMaker-M2354模块评测任务挑战

    评测任务挑战活动,让开发者小伙伴们互相协作,对开发板的每个模块功能进行
    的头像 发表于 11-16 16:42 ?1626次阅读

    N32L40XCL-STB 开发板模块评测任务挑战

    评测任务挑战活动,让开发者小伙伴们互相协作,对开发板的每个模块功能进行
    的头像 发表于 03-28 03:25 ?1180次阅读

    英飞凌开发板模块评测任务挑战

    ?RT-Thread 官方特联合合作伙伴发起开发板评测任务挑战活动,让开发者小伙伴们互相协作,对开发板
    的头像 发表于 04-11 09:05 ?1222次阅读

    基于STM32F4开发板的激光测距模块串口通信(三)

    在我们使用外设时怎样将外设的数据返回给开发板呢? 今天以STM32F4开发板为例,讲解激光测距模块如何通过串口通信将数据发送给
    发表于 05-17 09:50 ?7次下载
    基于STM32F4<b class='flag-5'>开发板</b>的激光测距<b class='flag-5'>模块</b>串口通信(三)

    RA6M3 HMI Board 评测挑战,完成任务赢免单!

    评测任务挑战活动,让开发者小伙伴们互相协作,对开发板的每个模块功能进行
    的头像 发表于 05-31 04:05 ?1376次阅读
    RA6M3 HMI Board <b class='flag-5'>评测</b>大<b class='flag-5'>挑战</b>,完成<b class='flag-5'>任务</b>赢免单!

    N32L40XCL-STB开发板模块评测任务挑战之UART

    本文主要对通过RT-Thread Studio对国民技术开发板N32L40XCL-STB 进行UART外设配置,实现开发板串口功能。
    的头像 发表于 08-09 15:25 ?1239次阅读
    N32L40XCL-STB<b class='flag-5'>开发板</b><b class='flag-5'>模块</b><b class='flag-5'>评测</b><b class='flag-5'>任务</b>大<b class='flag-5'>挑战</b>之UART

    英飞凌开发板模块评测任务挑战-SPI驱动测试

    使用PSoC? 62 with CAPSENSE? evaluation kit开发板适配的RTT SPI驱动,做显示测试。
    发表于 08-10 15:44 ?951次阅读
    <b class='flag-5'>英飞凌</b><b class='flag-5'>开发板</b><b class='flag-5'>模块</b><b class='flag-5'>评测</b><b class='flag-5'>任务</b>大<b class='flag-5'>挑战</b>-SPI驱动测试

    英飞凌开发板模块评测任务挑战】mdk开发板环境搭建

    在rtt源码内部生成英飞凌芯片的独立的工程
    的头像 发表于 10-27 12:39 ?1234次阅读
    【<b class='flag-5'>英飞凌</b><b class='flag-5'>开发板</b><b class='flag-5'>模块</b><b class='flag-5'>评测</b><b class='flag-5'>任务</b>大<b class='flag-5'>挑战</b>】mdk<b class='flag-5'>开发板</b>环境搭建

    英飞凌开发板模块评测任务挑战开发初体验

    主控芯片型号为 CY8C624ALQALQI-S2D42
    的头像 发表于 11-13 12:38 ?1232次阅读
    【<b class='flag-5'>英飞凌</b><b class='flag-5'>开发板</b><b class='flag-5'>模块</b><b class='flag-5'>评测</b><b class='flag-5'>任务</b>大<b class='flag-5'>挑战</b>】<b class='flag-5'>开发</b>初体验

    【新品】远距离图传数传模块开发板、蓝牙模块开发板、无线模块开发板

    新品上市图传数传模块开发板蓝牙模块开发板国产无线模块开发板部分型号参与送样文末了解详情↓↓↓EW
    的头像 发表于 06-12 19:33 ?416次阅读
    【新品】远距离图传数传<b class='flag-5'>模块</b><b class='flag-5'>开发板</b>、蓝牙<b class='flag-5'>模块</b><b class='flag-5'>开发板</b>、无线<b class='flag-5'>模块</b><b class='flag-5'>开发板</b>