历史上的今天
今天是:2024年09月28日(星期六)
2021年09月28日 | 基于STM32的PWM呼吸灯系统设计
2021-09-28 来源:eefocus
一、简述
记--使用定时器4输出PWM来实现呼吸灯效果。
在人眼辨识能力范围内,调节LED亮的时间,达到LED灯的亮度不同。例:给低电平LED就亮,如果一个脉冲中全是低电平那么LED最亮,如果一个脉冲一半是高电平,一半是低电平,那么LED就显得有点暗,这样调整脉冲中的高低电平的比例就可以达到LED的亮度调节。
二、效果
LED1逐渐由暗变亮,接着由亮变暗。

三、工程结构

四、源文件
#include "stm32f4xx.h"
#include "led.h"
#include "pwm.h"
//粗延时
void delay_ms(int ms)
{
int i,j;
for(i=0; i } //主函数 int main(void) { int i; //中断优先级分组 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); LED_Init();//初始化LED Pwm_Init();//设置定时器4输出PWM while(1)//呼吸灯 { //从暗到亮 for(i=1; i<499; i++)//定时器4重装载值为499 { TIM_SetCompare1(TIM14,i);//根据i的值设置比较值,调整占空比 delay_ms(20);//根据实际情况进行调整,方便观察效果 } //从亮到暗 for(i=499; i>0; i--) { TIM_SetCompare1(TIM14,i); delay_ms(20); } } return 0; } #ifndef __PWM_H_ #define __PWM_H_ #include "stm32f4xx.h" void Pwm_Init(void); #endif #include "pwm.h" void Pwm_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; TIM_OCInitTypeDef TIM_OCInitStruct; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; //1、使能定时器14时钟: RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); //初始化GPIOF组时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //2、初始化PF10引脚 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; //引脚10 LED1 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF; //复用 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //速度 GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //推挽 GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉 GPIO_Init(GPIOF,&GPIO_InitStruct); //3、引脚功能映射 GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); //4、初始化定时器,配置ARR,PSC。 TIM_TimeBaseInitStruct.TIM_Prescaler = 84-1; //分频系统 84MHZ/84 = 1MHZ 每秒数1000 000数 1us数一个数 TIM_TimeBaseInitStruct.TIM_Period = 500-1; //重装值 500数,用时500us TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; //向上计数 TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; //分频因子 TIM_TimeBaseInit(TIM14,&TIM_TimeBaseInitStruct); TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //PWM1模式 TIM_OCInitStruct.TIM_OutputState= TIM_OutputState_Enable;//输出使能 TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low; //极性低 TIM_OC1Init(TIM14,&TIM_OCInitStruct); //5、使能预装载寄存器: TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable); //6、使能自动重装载的预装载寄存器允许位 TIM_ARRPreloadConfig(TIM14,ENABLE); //7、使能定时器。 TIM_Cmd(TIM14,ENABLE); } 5.1 LED亮度调节实现 5.2 相关概念 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。 5.3 设置定时器4输出PWM TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //PWM1模式五、总结
频率 :时钟速度 1GHZ = 1000MHZ = 1000 000 KHZ =1 000 000 000 HZ (如12MHz:1秒12 000 000个脉冲)
占空比:占空比是指在一个脉冲循环内,通电时间(有效电平)相对于一个脉冲总时间所占的比例。(可以简单理解为该高、低电平的占脉冲总时间的比例)
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //输出使能
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low; //极性低,设置低电平为有效状态
TIM_TimeBaseInitStruct.TIM_Period = 500-1; //重装值 500,用时500us
TIM_SetCompare1(TIM14,i);//根据i的值设置比较值,调整占空比
史海拾趣
|
麻烦大家看看下面这个电路图,输入的正弦波信号在经过电容后在运放LM324的2脚上,会被叠加一个400mV的直流电压,不知道这个自流电压是哪儿来的,… 查看全部问答> |
|
从2006年3月,大功率LED露出头角,LED的战火被点燃,国内最初的预计,2008年LED会替代大部分家庭照明.2010年达到大量普及.现在反过来看,国内预计并没有实现.相比之下,国外的进度就比较严谨一些,设计规划比较长线.纵观现在做LED的厂商,做得大的都将主力 ...… 查看全部问答> |
|
下图是一个相敏检波的基本方框图 小弟就是不明白 图中积分器也就是低通滤波器的截止频率有什么技术要求 我在具体实验中发现截止频率的选择好像很随意 不知道是不是这样。 望大侠们指点指点,谢谢!!!… 查看全部问答> |
|
我拿到了qy-9315工控板,就是:wince5.0的,里面有sdk,还有内核镜像等, 我不知道如何搭建整个平台,就是:在这个pc机上模拟运行,调式wince程序。 谢谢!… 查看全部问答> |
|
很简单的一个才程序,编译没错,运行是错误:CXX0030: Error: expression cannot be evaluated #include typedef enum { &n ...… 查看全部问答> |
|
小弟去年装的Orcad16.2,当时已经成功破解之后,PSpice能做直流、交流、瞬态分析、还有温度分析,但是不能做参数分析和monte-carlo分析。求大侠慷慨救助,赏小弟一个完全破解的方法。… 查看全部问答> |




