2219|6

337

帖子

2

TA的资源

纯净的硅(初级)

楼主
 

RVB2601评估板试用 2 PWM的使用,既三色小灯驱动 [复制链接]

  本帖最后由 我爱下载 于 2021-7-27 15:25 编辑

PWM信号的使用,既三色LED驱动显示

   1 概述

       RVB2601评估板包含RGB三基色LED一个,为了学习PWM信号的驱动,我们可以通过驱动三基色LED来完成。

    2 硬件接口描述

       

通过如上两个原理图对照可知。

序号

LED名称

GPIO(PWM)

1

LED_BLUE

PA7(CH7)

2

LED_GREEN

PA25(CH2)

3

LED_RED

PA4(CH4)

 

3 软件驱动设计    

      3.1 PWM的CSI接口

          驱动采用CSI接口实现。实际使用到CSI接口如下所示:

函数

说明

csi_pwm_init

初始化

csi_pwm_uninit

反初始化

csi_pwm_out_config

配置输出模式

csi_pwm_out_start

开始输出

csi_pwm_out_stop

停止输出

   PWM接口详细说明

  • csi_pwm_init

     csi_error_t csi_pwm_init(csi_pwm_t *pwm, uint32_t idx)

csi_pwm_t

成员

类型

说明

dev

csi_dev_t

csi设备统一句柄

callback

void (callback)(csi_pwm_t pwm, csi_pwm_event_t event, uint32_t ch, uint32_t time_us, void *arg)

用户回调函数

arg

void *

调函数参数(用户自定义)

priv

void *

设备私有变量

  • csi_pwm_uninit

        void csi_pwm_uninit(csi_pwm_t *pwm)

  • csi_pwm_out_config

      csi_error_t csi_pwm_out_config(csi_pwm_t *pwm, 

                                     uint32_t channel, 

                                     uint32_t period_us, 

                                     uint32_t pulse_width_us,

                                     csi_pwm_polarity_t polarity)

csi_pwm_polarity_t

类型

说明

PWM_POLARITY_HIGH

高电平

PWM_POLARITY_LOW

低电平

  • csi_pwm_out_start

     csi_error_t csi_pwm_out_start(csi_pwm_t *pwm, uint32_t channel)

  • csi_pwm_out_stop

     void csi_pwm_out_stop(csi_pwm_t *pwm, uint32_t channel)

   3.2 PIN的CSI接口

       测试中用到的PINCSI接口说明如下所示:

函数

说明

csi_pin_set_mux

设置PIN的复用功能

接口详细说明

  • csi_pin_set_mux

     csi_error_t csi_pin_set_mux(pin_name_t pin_name, pin_func_t pin_func)

4 软件测试代码 

    通过PWM接口完成三色灯亮度渐变调节驱动的测试程序。

    4.1 初始化

void led_pinmux_init()
{
    csi_error_t ret;
    csi_pin_set_mux(PA7, PA7_PWM_CH7);		//设置PIN的复用功能
    csi_pin_set_mux(PA25, PA25_PWM_CH2);	//设置PIN的复用功能
    csi_pin_set_mux(PA4, PA4_PWM_CH4);		//设置PIN的复用功能
    ret = csi_pwm_init(&r, 0);				//初始化pwm设备
    if (ret != CSI_OK) {
            printf("===%s, %d\n", __FUNCTION__, __LINE__);
            return ;
}
//配置pwm通道的输出模式
    ret = csi_pwm_out_config(&r, 7 / 2, 300, 100, PWM_POLARITY_HIGH);
    if (ret != CSI_OK) {
            printf("===%s, %d\n", __FUNCTION__, __LINE__);
            return ;
    }
//配置pwm通道的输出模式
    ret = csi_pwm_out_config(&r, 2 / 2, 300, 100, PWM_POLARITY_HIGH);
    if (ret != CSI_OK) {
            printf("===%s, %d\n", __FUNCTION__, __LINE__);
            return ;
    }
//配置pwm通道的输出模式
    ret = csi_pwm_out_config(&r, 4 / 2, 300, 100, PWM_POLARITY_HIGH);
    if (ret != CSI_OK) {
            printf("===%s, %d\n", __FUNCTION__, __LINE__);
            return ;
    }
}

   4.2 三色led亮度PWM控制

  • 点亮led
csi_pwm_out_stop(&r, 2 / 2);
csi_pwm_out_stop(&r, 7 / 2);
csi_pwm_out_stop(&r, 4 / 2);
  • 熄灭led
csi_pwm_out_start(&r, 7 / 2);
csi_pwm_out_start(&r, 2 / 2);
csi_pwm_out_start(&r, 4 / 2);
  • 亮度调节控制
void  ft_led_slow_change(void)
{
    csi_error_t ret;
    if (g_led_refresh) {
        if (g_ctr == 0)
        {
			ret = csi_pwm_out_config(&r, 7 / 2, 300, led_pwm_count, PWM_POLARITY_HIGH);
			if (ret != CSI_OK) {
					printf("===%s, %d\n", __FUNCTION__, __LINE__);
					return ;
			}
			if(led_change_flag == 0)
			{
				if(led_pwm_count == 0)
				{
					csi_pwm_out_start(&r, 7 / 2);
					csi_pwm_out_stop(&r, 2 / 2);
					csi_pwm_out_stop(&r, 4 / 2);
				
				}
				
				led_pwm_count += 10;
				if(led_pwm_count >= 300)
				{
					led_change_flag = 1;
				}
			}
			else
			{
				if(led_pwm_count > 10)
				{
					led_pwm_count -= 10;
				}
				else
				{
					led_pwm_count = 0;
					led_change_flag = 0;
					g_ctr++;
					if (g_ctr == 3) {
							g_ctr = 0;
					}
				}
			}


        }
        else if (g_ctr == 1)
        {
				//25
			ret = csi_pwm_out_config(&r, 2 / 2, 300, led_pwm_count, PWM_POLARITY_HIGH);
			if (ret != CSI_OK) {
					printf("===%s, %d\n", __FUNCTION__, __LINE__);
					return ;
			}
			if(led_change_flag == 0)
			{
				if(led_pwm_count == 0)
				{
					csi_pwm_out_start(&r, 2 / 2);
					csi_pwm_out_stop(&r, 7 / 2);
					csi_pwm_out_stop(&r, 4 / 2);

				}
				led_pwm_count += 10;
				if(led_pwm_count >= 300)
				{
					led_change_flag = 1;
				}
			}
			else
			{
				if(led_pwm_count > 10)
				{
					led_pwm_count -= 10;
				}
				else
				{
					led_pwm_count = 0;
					led_change_flag = 0;
					g_ctr++;
					if (g_ctr == 3) {
							g_ctr = 0;
					}
				}
			}
        }
        else //2
        {
				//4
			ret = csi_pwm_out_config(&r, 4 / 2, 300, led_pwm_count, PWM_POLARITY_HIGH);
			if (ret != CSI_OK) {
					printf("===%s, %d\n", __FUNCTION__, __LINE__);
					return ;
			}
			if(led_change_flag == 0)
			{
				if(led_pwm_count == 0)
				{
					csi_pwm_out_start(&r, 4 / 2);
					csi_pwm_out_stop(&r, 7 / 2);
					csi_pwm_out_stop(&r, 2 / 2);
				}
				led_pwm_count += 10;
				if(led_pwm_count >= 300)
				{
					led_change_flag = 1;
				}
			}
			else
			{
				if(led_pwm_count > 10)
				{
					led_pwm_count -= 10;
				}
				else
				{
					led_pwm_count = 0;
					led_change_flag = 0;
					g_ctr++;
					if (g_ctr == 3) {
							g_ctr = 0;
					}
				}
			}
        }
    }

}

 

5 演示视频 

 

最新回复

什么是反初始化呢   详情 回复 发表于 2022-3-21 21:47
点赞 关注
 
 

回复
举报

2万

帖子

74

TA的资源

管理员

沙发
 

期待后续

加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

板凳
 

视频刷不出来

点评

后面是个GIF的动画,我这里可以看到,是不是网络问题  详情 回复 发表于 2021-7-28 07:59
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

337

帖子

2

TA的资源

纯净的硅(初级)

4
 

后面是个GIF的动画,我这里可以看到,是不是网络问题

点评

公司网络可以,晚上回去再试试。  详情 回复 发表于 2021-7-28 17:31
 
 
 

回复

7608

帖子

2

TA的资源

五彩晶圆(高级)

5
 
我爱下载 发表于 2021-7-28 07:59 后面是个GIF的动画,我这里可以看到,是不是网络问题

公司网络可以,晚上回去再试试。

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

151

帖子

0

TA的资源

一粒金砂(中级)

6
 

什么是反初始化呢

点评

例如,你将一个GPIO初始化为OUT_PP的方式,如果你不是用了,那么GPIO应该重新被初始化为复位后的默认状态,或者你认为的默认状态,这就是反初始化了。  详情 回复 发表于 2022-3-23 08:15
 
 
 

回复

337

帖子

2

TA的资源

纯净的硅(初级)

7
 

例如,你将一个GPIO初始化为OUT_PP的方式,如果你不是用了,那么GPIO应该重新被初始化为复位后的默认状态,或者你认为的默认状态,这就是反初始化了。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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