我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1414|回复: 10

[产品新知] 利用STM32定时器实现呼吸灯

[复制链接]
  • TA的每日心情

    2024-10-6 20:55
  • 签到天数: 1 天

    [LV.1]初来乍到

    479

    主题

    247

    回帖

    1392

    积分

    二级逆天

    积分
    1392

    终身成就奖特殊贡献奖

    发表于 2021-12-15 09:03:43 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    [paragraph]利用STM32定时器产生PWM信号;

    利用PWM信号实现呼吸灯。
    什么是PWM信号呢?
    PWM,英文名Pulse Width Modulation。
    PWM信号是一种脉宽调制信号,广范用于LED和电机控制等场合。
    PWM信号其实类似于方波,只有0和1两种状态。
    PWM信号可以调节占空比。
    不同占空比可以使LED产生不同的亮度。
    占空比就是指在一个周期内, 信号处于高电平的时间占据整个信号周期的百分比, 例如上图中所示脉冲的占空比就是25%。
    PWM波可以由GPIO口产生,通过GPIO口输出高电平,延时,输出低电平,延时来产生PWM波。
    还可以使用定时器,利用比较寄存器形成PWM。
    本实验就是利用PWM信号这一特性控制LED产生不同亮度,从而实现呼吸灯的效果。
    PWM信号应用场景
    我们经常见到的就是交流调光电路,高电平占多一点,也就是占空比大一点亮度就亮一点,占空比小一点亮度就没有那么亮,前提是PWM的频率要大于我们人眼识别频率,要不然会出现闪烁现象。
    除了在调光电路应用,还有在直流斩波电路、蜂鸣器驱动、电机驱动、逆变电路、加湿机雾化量等都会有应用。
    PWM信号如何输出呢?

    STM32单片机就是标识如下形式:TIMx_CHy这样的形式,下图中所示的PWM引脚即占用TIM1的通道1。
    2)但是如果IC内部没有PWM功能模块,或者要求不是很高的话可以利用I/O口结合定时器输出PWM信号,因为PWM信号其实就是一高一低的一系列电平组合在一起。具体方法是给I/O加一个定时器,输出的PWM信号频率与你的定时器一致,用定时器中断来计数,但是这种方法一般不采用,除非对于精度、频率等要求不是很高可以这样实现。
    LED使用的引脚:
    原理图
    由上面的原理图可知,当LED1和LED2引脚为高电平的时候,LED灭;当引脚为低电平的时候,LED亮。
    一个周期内低电平占比越来越少,高电平占空比越来越高,LED越来越暗。
    具体实现
    1. LED引脚PB8、PB9初始化
    注意 GPIO_Mode 要设置为:GPIO_Mode_AF_PP
    voidLED_Init(void) { GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOB,&GPIO_InitStructure); }
    2. TIM4_CH3和TIM4_CH4初始化
    voidLed_PWM_Init(u16arr,u16psc) { TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_OCInitTypeDefTIM_OCInitStructure; NVIC_InitTypeDefNVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); LED_Init(); TIM_DeInit(TIM4); /*TimeBaseconfiguration*/ TIM_TimeBaseStructure.TIM_Period=arr; TIM_TimeBaseStructure.TIM_Prescaler=psc; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseStructure.TIM_ClockDivision=0; TIM_TimeBaseStructure.TIM_RepetitionCounter=0; TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse=0; TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC3Init(TIM4,&TIM_OCInitStructure); TIM_OC4Init(TIM4,&TIM_OCInitStructure); TIM_CtrlPWMOutputs(TIM4,ENABLE); TIM_OC3PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_OC4PreloadConfig(TIM4,TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM4,ENABLE); TIM_Cmd(TIM4,ENABLE); }
    其中参数arr为重载值,psc为TIMx时钟频率的预分频系数。
    设置定时器的周期:
    PWM的周期一般要设置到50Hz以上,否则,我们会看到明显的视觉闪烁。
    设置定时器的周期需要改变ARR和PSC两个寄存器的值来控制输出PWM的周期。
    在STM32的库函数中,
    TIM_TimeBaseStructure.TIM_Period即设置的ARR寄存器,溢出计数值,(如有中断)达到这个值就中断,对应参数arr;
    TIM_TimeBaseStructure.TIM_Prescaler即设置的PSC寄存器,对应预分频系数参数psc。
    TIM_TimeBaseStructure.TIM_Period=arr; TIM_TimeBaseStructure.TIM_Prescaler=psc; TIM_TimeBaseStructure.TIM_ClockDivision=0; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
    应用
    Led_PWM_Init(899,0);
    psc为0,表示初始化PWM对应的定时器不分频,仍旧为72MHz,arr为899,代表PWM的频率为:72000/(899+1)=80KHz。周期等于频率的倒数,即1/80KHz=12.5us。
    while(1) { //呼吸灯 if(dir) led0pwmval++; else led0pwmval--; if(led0pwmval>900) dir=0; if(led0pwmval==0) dir=1; TIM_SetCompare3(TIM4,led0pwmval);//CH3绿色 TIM_SetCompare4(TIM4,led0pwmval);//CH4红色 delay_ms(1); }
    其中代码:
    TIM_SetCompare3(TIM4,led0pwmval);//CH3绿色 TIM_SetCompare4(TIM4,led0pwmval);//CH4红色
    就是调节定时器TIM4的通道3和通道4的占空比,当计数时间达到led0pwmval时电平翻转,比如默认0-arr都为高电平,如TIM_SetCompare的值为arr/2,就是0-arr/2 为低电平,arr/2-arr为高电平,占空比 50%。
    TIM_SetCompare设置的值就是设置的CCRx。由上面的图可知,CCRx/ARR就是占空比,由于占空比不能大于1,CCRx的值肯定不能大于ARR了。
    比如我们执行如下代码:
    TIM_SetCompare3(TIM4,450);//CH3绿色 TIM_SetCompare4(TIM4,450);//CH4红色
    示波器中可以看到如下效果:

    从上我们可以看到:
    脉冲频率是:80KHz
    周期是:12.50us
    占空比:50% (450/(899+1))
    跟上面的我们设置的值是一致的。
    实现的效果
    视频中的板子就是2020.06每月活动智能风扇使用的板子。
    由核心板+底板的形式组成,待月底全部功能实现并验证没有问题之后,开源原理图和PCB图给大家下载自行搭建测试。
    本文的PWM控制LED实现呼吸灯的原理,其实就是我们控制风扇转速的原理,有了本节课的知识,我们就可以控制风扇的转速了。
    回复

    使用道具 举报

    头像被屏蔽
  • TA的每日心情
    开心
    2024-5-27 16:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    16

    主题

    4215

    回帖

    1249

    积分

    禁止发言

    积分
    1249

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2021-12-15 09:08:36 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-9-29 16:48
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    22

    主题

    582

    回帖

    849

    积分

    二级逆天

    积分
    849

    终身成就奖

    发表于 2021-12-15 09:16:49 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    167

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

    发表于 2021-12-15 09:18:00 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    昨天 15:07
  • 签到天数: 152 天

    [LV.7]常住居民III

    82

    主题

    1万

    回帖

    1万

    积分

    三级逆天

    积分
    10353

    社区居民社区劳模原创先锋奖终身成就奖特殊贡献奖优秀斑竹奖

    QQ
    发表于 2021-12-15 10:39:15 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2024-6-1 15:35
  • 签到天数: 1 天

    [LV.1]初来乍到

    67

    主题

    2330

    回帖

    3210

    积分

    二级逆天

    积分
    3210

    终身成就奖金点子奖特殊贡献奖原创先锋奖

    发表于 2022-2-6 08:33:24 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:53
  • 签到天数: 53 天

    [LV.5]常住居民I

    4

    主题

    2259

    回帖

    1875

    积分

    二级逆天

    积分
    1875

    终身成就奖特殊贡献奖优秀斑竹奖

    QQ
    发表于 2022-2-6 11:23:34 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    3 分钟前
  • 签到天数: 165 天

    [LV.7]常住居民III

    7

    主题

    5274

    回帖

    4515

    积分

    二级逆天

    积分
    4515

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2022-2-6 12:46:15 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 159 天

    [LV.7]常住居民III

    3

    主题

    7147

    回帖

    1万

    积分

    PADS20220105初级班

    积分
    10866

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    发表于 2022-2-7 22:06:03 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    44

    回帖

    0

    积分

    一级逆天

    积分
    0

    终身成就奖

    发表于 2022-2-8 08:56:55 | 显示全部楼层
    回复

    使用道具 举报

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

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表