2194|3

341

帖子

0

资源

一粒金砂(高级)

[新版中科蓝讯AB32VG1 RISC-V开发板] - 8:PWM [复制链接]

本帖最后由 MianQi 于 2021-9-16 11:00 编辑

参考的例程是这个 - 七、中科蓝讯AB32VG1上的PWM实践(https://docs.qq.com/doc/DTVVWWXpLRVl6cER2?_t=1626260921919

这里的介绍不够清楚 —— 哪三路是PWM,哪三路是LPWM:

AB32VG1开发板提供六路PWM输出,分别对应的引脚为PA2,PE4,PA6,PE0,PE1,PB0,其中,PE1,PE4,PA2 用跳线帽连接可使用全彩 LED 模块。在这六路PWM中,有三路为基本PWM,由定时器产生,则另外三路为LPWM,由专门的pwm外设产生,其中三路LPWM是互斥的。”

还得从这里去查:

无标题.png

 

查的结果:

LPWM0-G1 ---> PE4

LPWM1-G1 ---> PE5

LPWM2-G1 ---> PE6

LPWM3-G1 ---> PE7

跟上述的文字介绍对不上,不知道怎么回事。于是接着找“TMR3”,找到的跟G1有关的只有:TMR4CAP_G1/IR_G8。干脆设第一个,到时候用LED试算了:

无标题-1.png

没有想到的是,要先勾选右边的“Value”,左边的下拉列表才会出来,那就选择:Timer5 PWM2 (PE1)

无标题-3.png


回复

341

帖子

0

资源

一粒金砂(高级)

本帖最后由 MianQi 于 2021-9-16 13:19 编辑

将示例代码上传以后,并没有看到PWM的效果:

#include <rtthread.h>
#include "board.h"

/**********************************************************************************/
/********************************  PWM_DEV_NAME ***********************************/
/*** timer3 pwm  *** timer4 pwm *** timer5 pwm ***  lpwm0 *** lpwm1 *** lpwm2 ***/
/*** t3pwm       *** t4pwm      *** t5pwm      ***  lpwm0 *** lpwm1 *** lpwm2 ***/
/**********************************************************************************/
#define PWM_DEV_NAME        "t5pwm"  /* PWM设备名称 */
#define PWM_DEV_CHANNEL     1       /* PWM通道 */
struct rt_device_pwm *pwm_dev;      /* PWM设备句柄 */
ALIGN(RT_ALIGN_SIZE)
static uint8_t PWM_Thread_Stack[1024];
static void PWM_Thread_Entry(void *para);
static struct rt_thread pwm_thread;
rt_uint32_t period, pulse;
void Pwm_Init(void){
    period = 1000000;    /* 周期 = 1M/period kHz */
    pulse = 0;          /* PWM脉冲宽度值(0 - period) */
    pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
    RT_ASSERT(pwm_dev != RT_NULL);
    /* 设置PWM周期和脉冲宽度 */
    rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse);
    /* 使能设备 */
    rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
}

static void PWM_Thread_Entry(void *para){
    Pwm_Init();
    while(1){
        /*使RGB灯红灯闪烁*/
        for (int var = 0; var < period; var += 10000) {
            rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, var);
            rt_thread_mdelay(1000);
        }
    }
}

int Pwm_Thread_Init(void){

    rt_thread_init(&pwm_thread, "pwm_thread", PWM_Thread_Entry, RT_NULL,
            &PWM_Thread_Stack[0], sizeof(PWM_Thread_Stack), 10, 10);

    rt_thread_startup(&pwm_thread);
    return 0;
}
INIT_APP_EXPORT(Pwm_Thread_Init);

而且,看不懂这两行注释:

    period = 1000000;    /* 周期 = 1M/period kHz */
    pulse = 0;          /* PWM脉冲宽度值(0 - period) */

 

用跳线逐个测试6个写有PWM的管脚,只有PE1有信号输出,但是实物照跟配置文件中的说明却对不上:

无标题-5.png

 

经过一番查证发现,要将这个宏定义改为“2”,LED才会闪:

#define PWM_DEV_CHANNEL     2       /* PWM通道 */

 

想要效果明显一点,这个for语句中的参数应作如下调整:

        /*使RGB灯红灯闪烁*/
        for (int var = 0; var < period; var += 100) {
            rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, var);
            rt_thread_mdelay(1000);
        }

 

演示视频:


 

 

赞赏

1

查看全部赞赏


回复

5390

帖子

18

资源

五彩晶圆(中级)

谢谢分享!期待后续!

个人签名

默认摸鱼


回复

2023

帖子

3

资源

版主

感觉这个IDE配置挺方便的!


回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/7 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表