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

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

3天内不再提示

PWM驱动LED实现呼吸灯效果

华仔的编程随笔 来源:华仔stm32 作者:华仔stm32 2023-04-24 15:29 次阅读

目的

利用pwm实现呼吸为灯效果

实验环境

TBK-RD8T3x开发板

TBK-RD8T3x开发板.png

实现原理

RD8T37单片机最多提供 14 路 PWM,这 14路 PWM 分为两类:多功能 PWM:共8路,只有一组,即 PWM0,输出信号口为: PWM0 0~07。

我们只需要修改PWM0的占空比就可以实现LED灯的亮度。

实现步骤

1、在keil工程加入rd8_pwm.c

image.png

2、根据数据手册与原理图,我这里选用P42为PWM输出:

image.png

image.png

3、初始化PWM0通道5

/*****************************************************
*函数名称: SC_PWM0_Init
*函数功能: PWM0初始化函数
*入口参数:void
*出口参数:void 
*****************************************************/
void SC_PWM0_Init(void)
{
	/*PWM0独立模式*/PWM_Init(PWM0_PRESSEL_FHRC_D1,255);
	/*PWM00 独立模式*/PWM_IndependentModeConfigEX(PWM05,0, PWM_OUTPUTSTATE_ENABLE);
	/*PWM0*/PWM_Aligned_Mode_Select(PWM0_Edge_Aligned_Mode);
	/*PWM0*/PWM_FaultDetectionConfigEX(PWM0_Type,DISABLE);
	/*PWM0*/PWM_FaultDetectionModeConfigEX(PWM0_Type,PWM0_Immediate_Mode,PWM0_FaultDetectionVoltage_Low,PWM0_WaveFilteringTime_0us);
	/*PWM0中断使能*/PWM_ITConfigEX(PWM0_Type,DISABLE,LOW);
	/*PWM0开关*/PWM_CmdEX(PWM0_Type,ENABLE);
	/*PWM0_Init write here*/	
}

4、动态修改占空比的函数为:

PWM_IndependentModeConfig(PWM05,pwm_num);

5、为了达到非阻塞式的动态修改占空比,以达到实现呼吸灯的效果,我附了main.c的代码如下:

#include "rd8.h"
#include "rd8_pwm.h"

uint8_t sta;

uint32_t count = 0;


void LED_Init(void)
{
	P3CON |= 0x1E; //P3 0b0001 1110 输出
	P4CON |= 0x0F; //P4 0b0000 1111
}

void Timer0Iint(void)
{
	TMOD |= 0x01;  // 配置定时器0为 16位定时器,  TH0、TL0全用 
	TH0 =(65536-1000)/256;   //1000us定时,即1毫秒溢出产生中断
	TL0 =(65536-1000)%256;  //1000us定时,即1毫秒溢出产生中断
	ET0 = 1;									//开启定时器0中断
	EA = 1;										//开启全局中断
	TR0 = 1;									//定时器0开始计数;
}

/*****************************************************
*函数名称: SC_PWM0_Init
*函数功能: PWM0初始化函数
*入口参数:void
*出口参数:void 
*****************************************************/
void SC_PWM0_Init(void)
{
	/*PWM0独立模式*/PWM_Init(PWM0_PRESSEL_FHRC_D1,255);
	/*PWM00 独立模式*/PWM_IndependentModeConfigEX(PWM05,0, PWM_OUTPUTSTATE_ENABLE);
	/*PWM0*/PWM_Aligned_Mode_Select(PWM0_Edge_Aligned_Mode);
	/*PWM0*/PWM_FaultDetectionConfigEX(PWM0_Type,DISABLE);
	/*PWM0*/PWM_FaultDetectionModeConfigEX(PWM0_Type,PWM0_Immediate_Mode,PWM0_FaultDetectionVoltage_Low,PWM0_WaveFilteringTime_0us);
	/*PWM0中断使能*/PWM_ITConfigEX(PWM0_Type,DISABLE,LOW);
	/*PWM0开关*/PWM_CmdEX(PWM0_Type,ENABLE);
	/*PWM0_Init write here*/	
}


void main(void)
{
	//LED_Init();
	uint8_t pwm_num;
	uint8_t f;
	SC_PWM0_Init();
	Timer0Iint();
	
	f=0;
	pwm_num = 0;
	while(1)
	{
		if(sta ==1)
		{
			sta = 0;
			if(f ==0)
			{
				pwm_num++;
				PWM_IndependentModeConfig(PWM05,pwm_num);
			}
			else if (f ==1)
			{
				pwm_num--;
				PWM_IndependentModeConfig(PWM05,pwm_num);
			}
			
			if(pwm_num == 255)
			{
				f = 1;
			}
			else if(pwm_num == 0)
			{
				f = 0;
			}
				
		}
		
	}
}

void Timer0() interrupt 1
{
	//每次产生中断后初始化定时器初值, 1ms秒产生1次中断
	TH0=(65536-1000)/256;
	TL0=(65536-1000)%256;
	count ++;
	if(count == 10)
	{
		sta =1;
		count = 0;
	}
	
}

实现效果

审核编辑 黄宇

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

    关注

    240

    文章

    23128

    浏览量

    658248
  • PWM
    PWM
    +关注

    关注

    114

    文章

    5140

    浏览量

    213358
  • 呼吸灯
    +关注

    关注

    10

    文章

    110

    浏览量

    42703
收藏 人收藏

    评论

    相关推荐

    单片机来控制LED实现呼吸效果

    如题控制LED实现呼吸效果,是什么原理呢?哪位大神做过。分享下经验呀
    发表于 03-14 17:37

    PWM实现呼吸效果

    ){ analogWrite(11,a); delay(8);//当前亮度的维持的时间,单位毫秒 }delay(800);//完成一个循环后等待的时间,单位毫秒}很简单很简单的几句代码就能实现呼吸~然后,我们将程序下载到Ard
    发表于 07-20 15:03

    基于CPLD/FPGA的呼吸效果实现_呼吸源码_明德扬资料

    特效呼吸1功能概述顾名思义,特效呼吸是指在电路控制之下,LED灯光完成由灭到亮、由亮到灭的逐渐变化,感觉像是在
    发表于 08-02 18:03

    使用PWM控制LED实现呼吸效果

    , then set pwm value to highpwm_r elsepwm_r endend那么如何实现呼吸效果呢?我们知道
    发表于 01-06 17:43

    使用PWM控制LED实现呼吸效果

    本文主要讲解使用PWM控制LED实现呼吸效果
    发表于 01-26 07:36

    用渐变的PWM信号实现LED呼吸的方法

    项目描述:用渐变的PWM信号实现LED呼吸LED由暗逐渐变亮,再由亮逐渐变暗循环。C语言代
    发表于 11-18 07:21

    如何用LED实现呼吸的功能

    一、概述玩过单片机的基本都做过用LED实现呼吸的功能,但是只要认真观察,会发现LED的亮度变
    发表于 01-21 08:09

    PWM实现呼吸的应用

    stm32实现PWM最简单方法前言一、PWM概念二、PWM应用输出比较功能框图三、PWM呼吸
    发表于 01-21 13:18

    如何通过定时器产生PWM波控制LED实现呼吸效果

    如何通过定时器产生PWM波控制LED实现呼吸效果
    发表于 01-25 07:22

    请问一下STM32 PWM是如何去实现呼吸设计的

    STM32 PWM实现呼吸使用STM32F103ZET6 定时器4 CH2通道产生PWM波,在GPIOD,GPIO_PIN13引脚
    发表于 02-21 07:30

    【Banana PI Leaf S3开发板试用体验】PWM 调节LED呼吸效果

    在BPI-Leaf-S3开发板上要实现呼吸效果非常容易,只需几个简单的函数调用即可。由于开发板上配置的是全彩LED
    发表于 10-19 12:28

    使用PWM控制LED实现呼吸效果

    本文主要讲解使用PWM控制LED实现呼吸效果
    的头像 发表于 02-08 17:50 1.3w次阅读
    使用<b class='flag-5'>PWM</b>控制<b class='flag-5'>LED</b><b class='flag-5'>实现</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>的<b class='flag-5'>效果</b>

    【ZYNQ Ultrascale+ MPSOC FPGA教程】第十章 PWM呼吸实验

    本文主要讲解使用PWM控制LED实现呼吸效果
    发表于 01-26 08:27 1次下载
    【ZYNQ Ultrascale+ MPSOC FPGA教程】第十章 <b class='flag-5'>PWM</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>实验

    STM32 使用PWM实现呼吸

    STM32 PWM实现呼吸使用STM32F103ZET6 定时器4 CH2通道产生PWM波,在GPIOD,GPIO_PIN13引脚
    发表于 12-24 19:41 55次下载
    STM32 使用<b class='flag-5'>PWM</b><b class='flag-5'>实现</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b>

    STM32G0开发笔记:用PWM实现LED呼吸效果

    使用Platformio平台的libopencm3开发框架来开发STM32G0,下面使用PWM实现LED呼吸
    的头像 发表于 01-16 15:15 2203次阅读
    STM32G0开发笔记:用<b class='flag-5'>PWM</b>来<b class='flag-5'>实现</b><b class='flag-5'>LED</b><b class='flag-5'>呼吸</b><b class='flag-5'>灯</b><b class='flag-5'>效果</b>