Debian12下Ai-M61-32S使用PWM点亮RGB呼吸灯

[复制链接]
查看414 | 回复7 | 2024-5-24 23:48:56 | 显示全部楼层 |阅读模式
本帖最后由 st780206 于 2024-5-25 11:35 编辑

环境还是参考 Ubuntu22下Ai-M61-32S开发环境搭建 搭建开发环境


开发参考了 【Ai-M61-32S-Kit】【教程】PWM点呼吸灯

1.根据参考,找到关于PWM的样例程序
目录是aithinker_Ai-M6X_SDK/examples/peripherals/pwm_v2/pwm_basic
直接编译烧录后,两个独立的led灯会亮。RGB灯没有反应,不符合我们的预期。

打开main.c 准备修改

Ai-M61-32S板子 记录https://docs.ai-thinker.com/ai_m61中的Ai-M61-32S开发板原理图里设置的RGB端口号

屏幕截图 2024-05-24 213352.png 分别是 15 12 14


查看main.c中有 board_pwm_gpio_init(),这个函数应该是pwm初始化的
找到此函数所在的文件 使用命令 grep board_pwm_gpio_init -r /home/aipi/AiPi-Open-Kits/ --include=*.c --include=*.h
屏幕截图 2024-05-24 222221.png 找到好几个这个函数实现,
打开Makefile文件 屏幕截图 2024-05-24 222357.png BOARD ?= bl616dk,所以打开bl616dk/board.c文件

找到board_pwm_gpio_init()函数定义
屏幕截图 2024-05-24 222940.png 函数中没有RGB灯用到的端口。注释掉函数中的所有端口,加入RGB用到的12 端口。



    bflb_gpio_init(gpio, GPIO_PIN_12, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLDOWN | GPIO_SMT_EN | GPIO_DRV_1);
    bflb_gpio_init(gpio, GPIO_PIN_14, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLDOWN | GPIO_SMT_EN | GPIO_DRV_1);
    bflb_gpio_init(gpio, GPIO_PIN_15, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
编译烧录后,开发板上的RGB灯会长亮。


编辑main.c
可以根据需要修改struct bflb_pwm_v2_config_s cfg
屏幕截图 2024-05-24 231029.png


                               
登录/注册后可看大图


修改main.c

    bflb_pwm_v2_init(pwm, &cfg);
    bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0, 1 , 2); /* duty = (500-100)/1000 = 40% */
    bflb_pwm_v2_channel_positive_start(pwm, PWM_CH0);
    bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH2, 1 , 2); /* duty = (500-100)/1000 = 40% */
    bflb_pwm_v2_channel_positive_start(pwm, PWM_CH2);
    bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH3, 1 , 2); /* duty = (500-100)/1000 = 40% */
    bflb_pwm_v2_channel_positive_start(pwm, PWM_CH3);


    while (1) {

                if (flag  ) {
                               starti++;
                     } else {
                               starti--;
                     }

        if(starti>=999 || starti <= 2){
            flag = !flag;
        }

            bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH0, 1 , starti); /* duty = (500-100)/1000 = 40% */
            bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH2, 1 , starti); /* duty = (500-100)/1000 = 40% */
            bflb_pwm_v2_channel_set_threshold(pwm, PWM_CH3, 1 , starti); /* duty = (500-100)/1000 = 40% */
        //printf("pwm basic running\r\n");
        //bflb_mtimer_delay_ms(2000);
        bflb_mtimer_delay_ms(5);
    }

编译烧写,RGB灯会呼吸闪烁,但绿色灯会比另两个颜色亮的多,有时间调一调。









回复

使用道具 举报

WangChong | 2024-5-26 00:07:42 | 显示全部楼层
期待做些更高级的应用
回复 支持 反对

使用道具 举报

WT_0213 | 2024-5-26 10:43:41 | 显示全部楼层
厉害
回复

使用道具 举报

iiv | 2024-5-26 23:00:54 | 显示全部楼层
回复

使用道具 举报

爱笑 | 2024-5-27 09:34:18 | 显示全部楼层
不错不错!
用心做好保姆工作
回复

使用道具 举报

qhsj | 2024-5-27 10:13:16 | 显示全部楼层
赞呐
回复

使用道具 举报

sansui | 2024-7-4 14:05:16 | 显示全部楼层
完成任务了
回复 支持 反对

使用道具 举报

楚华 | 2024-7-29 09:42:22 | 显示全部楼层
棒棒的
回复

使用道具 举报

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

本版积分规则