stm32f103呼吸灯(PWM脉冲宽度调制)

  • 一、PWM脉冲宽度调制
  • 二、硬件说明
  • 三、编程实现
    • 1、硬件相关宏定义
    • 2、GPIO初始化
    • 3、定义 PWM表
    • 4、定时器 PWM配置
    • 5、定时器中断服务函数
    • 6、计算拟合周期
  • 四、呼吸灯演示
    • 1、PWM输出波形
    • 2、呼吸灯

一、PWM脉冲宽度调制

1、使用脉冲占空比拟合不同波形的方式称为 PWM(脉冲宽度调制)控制技术——通过 对一系列脉冲的宽度进行调制,来等效地获得所需要波形(含形状和幅值)。PWM 控制 的基本原理为:冲量相等而开头不同的窄脉冲加在具有惯性的环节上时,其效果基本 相同。其中冲量指窄脉冲的面积;效果相同指环节输出响应波形基本相同。 例如:可以用一系列等幅不用一系列等幅不等宽的脉冲来代替一个正弦半波,见图

要改变等效输出正弦波幅值,按同一比例改变各脉冲宽度即可。 若把拟合的波形改成呼吸特性曲线,即可得到控制呼吸灯使用的 PWM 波形,要生成 拟合的 PWM波形,通常使用计算法和调制法,本文中使用计算法:根据拟合波形的频率、幅值和半周期脉冲数,准确计算 PWM 波各脉冲宽度和
间隔,据此控制开关器件的通断,就可得到所需 PWM 波形。在下边编程实现中会详细说明。
2、要改变PWM输出波形的宽度,就要改变比较寄存器 CCRx 的值,想要输出不通宽度来拟合正弦波,则需要CCRx的值呈现如下图的变化趋势,即要生成一张CCRx的数值表,按周期变化将表中元素的值赋给CCRx。

二、硬件说明

本文所使用硬件为野火的stm32f103指南者开发板,LED使用PB5引脚控制的红色LED

三、编程实现

利用野火提供的呼吸灯例程说明
资料
提取码:i2u1

1、硬件相关宏定义

bsp_breathing.h 文件



定义了三组LED的宏,通过修改代码中的 #define LIGHT_COLOR RED_LIGHT语句,可以切换使用红、绿、蓝三种颜色的呼吸灯。 在每组宏定义中,定义了定时器编号定时器时钟使能、红灯中PB5引脚重映射操作GPIO 端口引脚号通道对应的比较寄存器名以及中断通道中断服务函数名。 定时器的比较寄存器 CCRx 在控制呼吸灯的单个周期内需要切换为 PWM表中不同的数值,所以需要利用定时器中断。

2、GPIO初始化

bsp_breathing.c 文件

野火的库封装度比较高,所以使用的都是宏定义名,在上面的硬件配置中启用不同的宏,便会对应不同的管脚。其中由于红灯使用的引脚需要用到第二功能,本代码 使用宏 BRE_GPIO_REMAP_FUN ()进行了该引脚的功能重定义操作

3、定义 PWM表

PWM表则是一个周期内比较寄存器CCRx的变化值,即脉冲宽度的变化值。
bsp_breathing.c 文件

此表用以下python代码生成

#! python3
#coding=utf-8"""
Python版本:3.x
外部库:matplotlib1.5.3、numpy1.11.2运行结果:
命令行中会打印计算得的各点数据,
在当前目录下会生成py_index_wave.c文件,包含上述数据,
并且会弹出描绘曲线的对话框。
"""import matplotlib.pyplot as plt
import numpy as np
import math#修改本变量可以更改点数,如16、32、64等
POINT_NUM = 110#指数曲线最大为2的MAX_POWER次方
MAX_POWER = 10# POINT_NUM 个点
x1 = np.linspace(0,MAX_POWER,POINT_NUM/2)#f = 2^(x)
up =[]
for i in x1:temp = round(2**i)#得到升序列up.append( temp )x2 = np.linspace(MAX_POWER,2*MAX_POWER,POINT_NUM/2)#f = 2^(2*MAX_POWER-x)
down=[]
for i in x2:temp = round(2**(MAX_POWER*2-i))#得到降序列down.append( temp )line = list(x1)+list(x2)
val = list(up)+list(down)print(line)
print("*"*80)
print(list(map(int,val)))#写入序列到文件
with open("py_index_Wave.c",'w',encoding= 'gb2312') as f:print(list(map(int,val)),file= f)#绘图
plt.plot(line,val,"-o")
plt.show()

该 python脚本生成 PWM表数据的原理,实质是按照如下函数曲线进行采样:
若 0<= x <=10:
y = 2^x
若 10< x <=20:
y = 2^(20−

stm32f103呼吸灯(PWM脉冲宽度调制)相关推荐

  1. 拓展模块使用教程和心得(四):PWM脉冲宽度调制及普通有刷马达和空心杯电机(测试平台:STC8A8K,STM32F103)

    成就更好的自己 这次内容是给未来的新专栏(控制算法)打一个小基础,而且是为了完善上一期拓展模块教程三:步进电机的内容(https://blog.csdn.net/qq_36098477/article ...

  2. 微雪树莓派PICO笔记——3.PWM(脉冲宽度调制)

    文章目录 什么是PWM PWM的应用 RP2040 PWM框架图 PWM流程图 PWM内部框架图 [MicroPython]machine.PWM类函数详解 代码实现 什么是PWM 脉冲宽度调制 (P ...

  3. 嵌入式STM32入门之定时器控制LED闪烁与产生PWM脉冲宽度调制信号

    定时器控制LED闪烁与产生PWM脉冲宽度调制信号 一.前言 二.定时器基本介绍 (一)STM32定时器 (二)通用定时器主要功能 (三)计数器模式 (四)定时器工作原理 三.实验(1)初识定时器 (一 ...

  4. 蓝桥杯模块学习9——PWM脉冲宽度调制(深夜学习——单片机)

    一.什么是PWM脉冲宽度调制: 对PWM简单理解(佛科院--深夜学习)_佛科院深夜学习的博客-CSDN博客 二.脉冲宽度调制实验: 1.代码思路: (1)我们可以利用定时器规定周期为10ms(100H ...

  5. 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考

    提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...

  6. PWM脉冲宽度调制,实现呼吸灯_领航者开发板

    1.脉冲宽度调制(Pulse Width Modulation,PWM) 仅从本次实验(呼吸灯)的角度进行解释:通过不断调节信号的占空比来改变LED灯的亮度,如占空比逐渐递增会使得LED逐渐变亮,占空 ...

  7. 脉冲宽度调制 matlab,关于PWM脉冲宽度调制的点滴总结

    基本原理 PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式: 所以根据面积等效法则,可以通过对改 ...

  8. PWM脉冲宽度调制技术控制LED亮度

    1.PWM控制 PWM控制--脉冲宽度调制技术,通过对一系列脉冲的宽度进行调制,来等效地获得所需要的波形.PWM是一种对模拟信号电平进行数字编码的方法.通过高分辨率计数器的使用,方波的占空比被调制用来 ...

  9. PWM脉冲宽度调制(一)

    一.PWM模式 脉冲宽度调制模式可以产生一个由TIMx_ARR寄存器确定频率.由TIMx_CCRx寄存器确定占空比的信号. PWM本质是一个定时器,ARR寄存器中填充一个最大值,计数器从0计数至ARR ...

  10. PWM脉冲宽度调制——它是什么?

    脉冲宽度调制 (PWM) 的良好定义就在名称本身.为了更好地理解 PWM 是什么,让我们首先看一些基本术语. 微控制器是基于二进制信号的智能数字元件.二进制信号的最佳表示是方波(高低电平).下图解释了 ...

最新文章

  1. BCG、阿里、百度联合发布中国互联网经济白皮书2.0,解读“中国互联网新篇章:迈向产业融合”...
  2. python如何安装scrapy库_python2安装scrapy库报错解决方案
  3. php邮件通知,邮件通知设置
  4. 【Socket网络编程】1.bind()和 INADDR_ANY 解析
  5. angular4创建html,Angular 4 Http服务
  6. 如何 打包整合linux系统文件夹 用于刷机包等等, 其中包括打包 句号开头 . 开头的文件, 排除系统文件 等...
  7. linux服务 运维案例,linux运维实战练习案例-2015年12月20日-12月31日
  8. lazada铺货模式的选品_lazada小白的运营难点→铺货与精细化运营的优劣势详解
  9. Replace Parameter with Methods(以函数取代参数)
  10. python framebuffer_Linux中LCD设备驱动
  11. hibernate查询出的实体,set值后,自动更新到数据库
  12. java project mybatis,Java使用Mybatis
  13. 来一杯java_初级java笔试题
  14. java的架构有哪些,java架构有哪些?
  15. TestNG在接口测试中的应用
  16. JUCE学习笔记08-合成器(一)振荡器与包络发生器
  17. MPEG-TS封装格式
  18. i7服务器cpu型号推荐,Intel七款主流CPU,推荐指南(建议收藏)
  19. 配置虚拟机(VMware Workstation)静态 IP 地址
  20. Node中间件和路由器

热门文章

  1. ORA-01830: date format picture ends before converting entire input string
  2. web 页面实现页面右下角弹窗功能
  3. ES6 学习内容记录
  4. zigbee应用实践
  5. 网络逻辑漏洞、SQLMAP、Nmap及其它命令的使用方法
  6. java replaceLast
  7. 学习js的第十三天【事件的绑定方式,执行方式】
  8. win7抓取计算机窗口存于位图文件,电脑按printscreen截屏后 图片会保存在哪里?-win7截图,win7电脑自带的截图快捷键...
  9. win10 2016 长期服务版激活
  10. 冥王星P的编曲日志《我们就这样溺死在漩涡里》