历史上的今天

今天是:2024年09月28日(星期六)

2021年09月28日 | stm32f103呼吸灯(PWM脉冲宽度调制)

发布者:fuehrd努力的 来源: eefocus关键字:stm32f103  呼吸灯 手机看文章 扫描二维码
随时随地手机看文章

一、PWM脉冲宽度调制

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

在这里插入图片描述

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


2、要改变PWM输出波形的宽度,就要改变比较寄存器 CCRx 的值,想要输出不通宽度来拟合正弦波,则需要CCRx的值呈现如下图的变化趋势,即要生成一张CCRx的数值表,按周期变化将表中元素的值赋给CCRx。

在这里插入图片描述

二、硬件说明

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


三、编程实现

利用野火提供的呼吸灯例程说明


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  呼吸灯 引用地址:stm32f103呼吸灯(PWM脉冲宽度调制)

上一篇:STM32F103入门 | 12.PWM实现呼吸灯
下一篇:基于STM32的PWM呼吸灯系统设计

推荐阅读

据外媒报道,特斯拉为旗下车型配置了雷达及超声波传感器技术,但仍坚持利用摄像头打造计算机视觉系统,向神经元网络系统输入数据,从而赋予其“视觉”能力及识别能力。特斯拉黑客verygreen和TMC用户DamianXVI联手,从Ebay购得Autopilot Hardware 2.5车载计算机后,再度发布了Autopilot开发者版本的界面视频。从其发布的视频中,我们可以了解到特斯拉Auto...
美国加利福尼亚州卡马里奥市,2019年9月,高性能模拟和混合信号半导体产品及先进算法领先供应商Semtech公司(纳斯达克股票代码:SMTC)宣布:法国物联网(IoT)领先的智慧农业应用供应商itk已基于Semtech的LoRa®器件开发了一种全新的牛群健康监测解决方案。据悉,这种名为FarmLife®的智慧农业服务及其支持LoRa的传感器,可检测牛的发情情况、促进营养改...
在 iOS 14 中,苹果终于为 iPhone 或 iPad 用户开放第三方邮件和浏览器 App 作为系统默认的权限,因此 iOS 14 可能是有史以来苹果最为开放的一代大版本升级。但是,也有部分企业持不同见解,例如 Facebook。据外媒 The Information 报道,Facebook 近日再次公开批评苹果。他们的高管宣称,苹果未开放第三方默认消息 App 的更改权限是不...
据国外媒体报道,苹果分析师郭明錤在一份研究报告中表示,苹果计划从2022年第三季度开始量产重新设计的MacBook Air,该产品将配备速度更快的苹果硅芯片。  今年8月份,郭明錤曾发布报告称,苹果公司正在研发一款配有mini LED显示屏的MacBook Air,这款设备将在2022年年中推出,而京东方将成为MacBook Air的mini LED显示屏的新供应商。  当时,郭...

史海拾趣

问答坊 | AI 解惑

用AD7874做交流功率测量

我用AD7874做交流功率测量,想让功率稳定到小数后面的第3位,但是AD7874是12位的AD,跳动一个LSB就0.00488V了,所以小数后面第3位不跳动,但不知到怎样解决,请各位高手献策,在下先谢谢了!…

查看全部问答∨

两位专家在线:电源领域相关问题,可在此提问

涉及到电源的问题,请在这里提出。 quanzx与rockyltp在这里期待你的讨论。 quanzx:常在坛子里晃荡的网友可能发现,quanzx是像是一位非常热心的大哥,乐于                 帮助大家,特别是 ...…

查看全部问答∨

本地生成的hive文件和导进板子的hive文件是一样的吗?

我开始感觉应该是一样的,只是把default.hv的名字改成system.hv。 后来发现大小都不一样。 谁研究过类似的问题啊。。…

查看全部问答∨

谁有做好的LQFP-48的封装呢?

谁有做好的LQFP-48的封装呢? 就是vs1103b这个元件的封装。48脚,4面分别有12个脚。 有的话,给我传一份,感谢~…

查看全部问答∨

关于挂起唤醒的问题

s3c2440挂起后怎样唤醒,挂起后跟踪有执行到CPUPowerOff(),挂起前也用 s2440IOP->rGPFDAT = 0x1  |(0xf<<4); s2440IOP->rGPFCON = 0x5502; s2440IOP->rGPFUP  = 0xf7;    s2440IOP->rEXTINT0 = 0x222 ...…

查看全部问答∨

ST-linkIII容易坏SN74LVC2T45DCUT好像该IC没什么必要?

我又坏了一个STLinkIII,经分析,又坏了SN74LVC2T45DCUT,(主芯片倒是很扎实,STM32好东东)。但经过分析(电路见附图),74lvc2t45  5脚接地的话传输方向是 B To A ,即目标板到STM32 。但这有必要吗?STM32 输入口只要串上限流电 ...…

查看全部问答∨

c语言-转移语句(continue/break/goto )

goto: goto 语句的作用是跳转到一条你指定的语句,然后从那条语句开始往下执行。goto 语句的用法很简单,首先在你想要跳往的语句前面加个标签和冒号:         to: printf("go to here\\n"); 注意,标签的命 ...…

查看全部问答∨

MSP430 数字io

1.   数字IO 1.1.    Io分布 Figure 3  io分布图 从图上可以看出,msp430f149具有6组io,每个io均有两种功能。另外P1,P2两组io可以设置为外部中断与其对应了两个中断向量的入口。 1.2.    I ...…

查看全部问答∨

FPGA的AS下载问题

各位大侠大家好,最近弄fpga,突然我的AS下载口不好使了呢,jtag调试与下载.jic文件都可以,AS十针下载口与fpga和epcs16(配置芯片)的引脚连接,我刚刚用万用表测试了一遍,连接也都没问题,不知道大家有没有遇到相同问题的朋友,AS也像jtag口那么 ...…

查看全部问答∨

谁能告诉我这是为什么?TI教堂依旧无法登陆

IE浏览器,操作步骤如下,求指点。。。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved