历史上的今天
今天是:2024年09月28日(星期六)
2021年09月28日 | stm32f103呼吸灯(PWM脉冲宽度调制)
2021-09-28 来源:eefocus
一、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−
史海拾趣
|
ATM监控专业评标标准!!! 资质审查1. 数字录像设备和微型摄像机同时获得公安部安全防范报警系统产品质量监督检验测试中心出具的型式检验报告。 依据标准: A. 公安部关于贯彻实施《安全技术防范产品管理办法》有关问题的补充通知第二条 B. 《 ...… 查看全部问答> |
|
使用是HHARM2410的开发板。NFS服务器配置操作是正确的,PC与开发板之间相互能ping通,但是开发板正常启动后mount 不了PC机。我已经关了防火墙。我主机IP为192.168.2.222。/etc/exports文件设置的是(rw)。在minnicon里执行mount 192.168.2.222:/ /m ...… 查看全部问答> |
|
16位的80186微处理器与8位NVRAM之间地址线互连的一个问题 16位80186与8位NVRAM之间互连只能以地址线A1对其A0,CPU本身的A0与NVRAM不连接。 有谁知道为什么。… 查看全部问答> |
|
单位要设计了 一电压过零检测电路 需要从几毫伏 到几伏之间 频率小于1khz 的 电压中检测出零点 ,一直很迷茫 我的设计大致步骤如下 希望各位大侠帮帮我信号 经AGC放大到5伏   ...… 查看全部问答> |
|
verilog中,一个always中如果含有好几个case语句,那么这些case语句是并发执行,还是顺序执行呢??如下 always begin case(a) ………… case(b) ………… case(c) ………… end … 查看全部问答> |
|
MSP430G2553串口连接12864显示,只用连接三个引脚,大大节省资源 #include <msp430g2553.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longunsigned char a[]={\"波天神终于把12864学会了!\"};#define SID BIT1#define SCLK BIT2#define CS BIT3#define ...… 查看全部问答> |




