基于STM32的智能灯光亮度调节器【正点原子】(一)

这篇具有很好参考价值的文章主要介绍了基于STM32的智能灯光亮度调节器【正点原子】(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

系列文章目录

第一章 PWM调节

第二章 ADC采样

第三章 光敏传感器

第四章 智能灯光亮度调节器(终)


目录

前言

一、PWM是什么?

二、如何产生一个PWM信号?

总结


前言

本文实现的是一个智能灯光亮度调节器的设计,使用STM32F103ZE的单片机,可以手动调节灯光档位,也可以自动根据环境亮度进行切换灯光档位。这需要用到PWM调光、ADC采集、光敏传感器,本文将会将设计路线呈现出来。


提示:以下是本篇文章正文内容,下面案例可供参考

一、PWM是什么?

我们要调节板子上的LED灯光档位,需要用到PWM(Pulse Width Modulation),全称是脉冲宽度调制,使用PWM时,我们需要关注一下两个参数:
(1)PWM占空比

PWM信号的占空比指该PWM信号的一个周期中高电平所占时间的百分比,若信号始终是高电平,则该信号的占空比为100%,反之若信号始终是低电平,则该信号的占空比为0%,如下图所示,T是整个PWM周期,T1代表占空比:

基于STM32的智能灯光亮度调节器【正点原子】(一)

 (2)PWM频率

PWM信号频率有多快,决定了PWM信号走完一个周期的速度。

二、如何产生一个PWM信号?

我们了解完PWM大概是个什么东西后,就要学习如何产生它和使用它。通过STM32的单片机,我们有两个方式去产生PWM信号,第一种是使用普通IO输出PWM,第二种是使用定时器的PWM的IO口:

(1)普通IO口

我们可以翻看手册去看普通IO口的主要功能:(下图转载自其他博主),如果这个IO口的主要功能那一栏出现CHx的标志,则是可以输出PWM的端口,上面的红框中的普就是普通定时器。

基于STM32的智能灯光亮度调节器【正点原子】(一)

 (2)PWM端口

STM32的定时器除了TIM6、TIM7,其他的定时器都可以用来产生PWM,高级定时器TIM1与TIM8可同时产生7路的PWM,通用定时器则可以同时产生4路的PWM输出。

基于STM32的智能灯光亮度调节器【正点原子】(一)

 (3)普通IO产生PWM方法

我们使用的是定时器中断去实现的,PWM的产生,我们需要去确定两个参数:周期占空比,而如何确定周期呢,我们知道T=1/f,所以只要把频率确定下来,周期就知道啦。而我们确定了时间后,占空比就是这个这段时间中高电平所占的时间的百分比就是我们想要的占空比啦。

例如,我们现在要去产生一个1KHz的占空比为50%的PWM,我们知道了频率为1KHz,那么周期根据T=1/f,就可以知道T=1ms,那么一个周期就是1ms。那占空比为50%,说明在一个1ms的周期中高电平所占的时间为0.5ms。那我们使用定时器中断,每0.1ms产生一次中断,每次进入中断时计数,中断服务函数前五次中断给高电平就可以实现占空比50%。

(4)PWM口产生PWM

我们使用PWM口时需要先了解一下相关的定时器:ARR、PSC、CNT、CR1

自动重装载寄存器ARR:

基于STM32的智能灯光亮度调节器【正点原子】(一)

 该寄存器用于配置自动重装载值ARR

预分频寄存器PSC:

基于STM32的智能灯光亮度调节器【正点原子】(一)

该寄存器用于配置预分频系数

 计数器CNT:

基于STM32的智能灯光亮度调节器【正点原子】(一)

该寄存器用于配置计数值

 控制寄存器CR1:

基于STM32的智能灯光亮度调节器【正点原子】(一)

基于STM32的智能灯光亮度调节器【正点原子】(一)

基于STM32的智能灯光亮度调节器【正点原子】(一)

根据控制寄存器位4的设定,分为两种计数模式:

 基于STM32的智能灯光亮度调节器【正点原子】(一)

 基于STM32的智能灯光亮度调节器【正点原子】(一)

 了解完上面的寄存器后,我们开始学习产生PWM的过程:举例一种情况,定时器的重装载值为ARR,比较值为CCR,每次计数时,都会将CNT计数值与CCR进行比较,若计数值CNT小于CCR,则输出低电平,若计数值CNT大于CCR,则输出高电平,那么这时占空比就是可以通过调整CCR的值去改变,而PWM的频率就可以通过调整ARR与PSC去调整。我们的配置过程为:

①初始化TIMx,设置TIMx的ARRPSC。

②设置TIMx_CHx的PWM模式使能TIMx的CHx输出。

使能TIMx

④修改TIMx_CCRx来控制占空比。

timer.c:

//TIM3 PWM 部分初始化
//PWM 输出初始化
//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc)
{ 
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //①使能定时器 3 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|
RCC_APB2Periph_AFIO, ENABLE); //①使能 GPIO 和 AFIO 复用功能时钟
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //②重映射 TIM3_CH2->PB5 
//设置该引脚为复用输出功能,输出 TIM3 CH2 的 PWM 脉冲波形 GPIOB.5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //①初始化 GPIO
//初始化 TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //设置在自动重装载周期值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //③初始化 TIMx
//初始化 TIM3 Channel2 PWM 模式
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择 PWM 模式 2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性高
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //④初始化外设 TIM3 OC2
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能预装载寄存器
TIM_Cmd(TIM3, ENABLE); //⑤使能 TIM3
}

mian.c:

int main(void)
{
    TIM3_PWM_Init(899,0);

    while(1)
    {
        ...
    }
}


总结

以上是PWM的学习与产生过程,后面的文章会说明如何使用PWM调节灯光档位,下面给一个正点原子的例程,是一个呼吸灯,可以烧录进自己的板子上看看,让自己更好的理解PWM的用处。

链接:https://pan.baidu.com/s/1UkNmRrqFlHx0dCuAHHDfRA?pwd=hxdg 
提取码:hxdg文章来源地址https://www.toymoban.com/news/detail-483957.html

到了这里,关于基于STM32的智能灯光亮度调节器【正点原子】(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python GUI编程利器:Tkinker中的微调节器和滑块(6)

    小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日目标 实现下面效果: 微调节器(Spinbox类) 微调节器可以通过箭头调整所需的数值。 创建微调节器对象语法格式: Spinbox(master,background,from_,to,value,increment,relief,command,t

    2024年02月12日
    浏览(39)
  • RT-Thread使用PWM实现灯亮度调节——STM32F407

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 RT-Thread使用PWM实现灯亮度调节——STM32F407ZG 作为新入门的嵌入式选手,最近在学习RT-Thread操作系统,鉴于自己健忘的记性,打算记录下来后面好回顾学习。 今天要总结的是RT-Thread使用PWM实现灯亮度调节

    2024年02月15日
    浏览(47)
  • 81、基于STM32单片机智能台灯 PWM调光坐姿矫正 灯光控制定时台灯设计

    毕设帮助、开题指导、技术解答(有偿)见文末。 目录 摘要 一、硬件方案 二、设计功能 三、实物图 四、原理图 五、PCB图  六、硬件框图 七、流程图 八、程序源码 九、资料包括 随着社会在不断进步,高科技含量决定着产品发展的新趋势和前景,智能化技术在电子产品领

    2024年02月02日
    浏览(56)
  • 毕业/课程设计——基于STM32的智能灯光控制系统(物联网、智能家居、手机APP控制、语音控制)

            文章 首先介绍本系统所包含的功能 ,主要包含六方面功能, 之后逐步分享开发过程 ,其流程如下:点亮灯带(三极管) → 调节灯光亮度(PWM)→为系统添加远程控制功能→为系统添加语音识别功能→添加超声波姿态监测功能→添加OLED显示功能         特别

    2024年02月03日
    浏览(65)
  • STM32——毕设远程室内灯光控制系统

    本毕设以STM32 F103C8T6为主控核心板智能灯光控制系统,开发的简单易行的智能灯光控制系统,由智能手机通过蓝牙或无线与单片机系统的蓝牙或无线模块进行通信控制单片机板子上的led进行开关,同时光敏传感器检测白天和黑夜,红外传感器检测有无人员进入,向单片机发出控制

    2023年04月08日
    浏览(42)
  • 健康的电脑亮度调节

    上班族每天都要对着电脑长时间办公,那么比较健康的电脑亮度是怎么调节呢? 桌面-右键-显示设置/属性-系统/外观-高级-项目选择(窗口)、颜色1(L)选择(其它)将色调改为:85。饱和度:123。亮度:205-添加到自定义颜色-在自定义颜色选定点确定-确定这样所有的

    2024年02月09日
    浏览(48)
  • 联想电脑无法调节屏幕亮度

    电脑用着用着突然无法调节屏幕亮度了,屏幕直接亮度拉满,眼睛都快看瞎了,然后想着用快捷键将屏幕亮度调低,发现根本没反应,打开设置,屏幕亮度的滑杆都找不到了,之前屏幕正常的时候调节屏幕亮度的滑杆是能看到的。作为联想的老用户,这个问题困扰了好几次,

    2024年02月12日
    浏览(90)
  • 电脑屏幕亮度怎么调节?台式电脑找不到屏幕亮度怎么办

    我们在使用电脑的时候,经常会觉得电脑屏幕的亮度太亮了或者是太暗了。这个时候通常就要去调节电脑屏幕亮度。电脑屏幕亮度怎么调节?台式电脑找不到屏幕亮度怎么办?下面小编给大家带来了调节电脑屏幕亮度的详细教程。   电脑太亮了或者太暗了,想要调节电脑屏幕

    2024年02月10日
    浏览(73)
  • ubuntu 命令调节显示器亮度

    HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 527mm x 297mm DP-4 connected 1920x1080+1920+0 (normal left inverted right x axis y axis) 527mm x 297mm

    2024年02月15日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包