基于STM32的LED多级调光器,采用PWM电压调节方法,利用STM32单片机集成有AD转换与PWM输出技术,通过对从控制始端(电位器)采集到的电位数据进行AD转换,并对数据进行处理得到PWM输出的占空比,从而能够对LED负载进行调节,完成调光。以STM32F103ZET6为核心的单片机开发板,对LED灯的1000级亮暗调节,实验结果显示LED的亮暗变化均匀,电压变化与文中所建立的线性处理模型一致。
引 言
LED的驱动方法有很多,可用单片机(如8051单片机)[1]产生脉冲宽度调制来驱动LED,PWM是脉宽调制的简称[2-4],其控制简单灵活,方便使用,凭借其低速运行平稳,动态性能优良[5]等特点,在电机的调速、功率调节等方面得到了非常广泛的应用。STM32F103系列是STM32系列高端单片机的一种系列,集成AD转换与PWM输出功能,可直接进行AD数据的采集和PWM波的输出。
PWM输出原理
STM32的PWM输出机制
PWM既脉冲宽度调制,是一种高低电平以一定周期变化的占空比可调的方波信号[6-8],PWM的波形图如图1所示。PWM调制的输入电压与负载的平均电压之间的关系[9]如式(2)。
图 1 PWM方波信号图 Fig.1 PWM square wave signal diagram
由图1所示的PWM波形图可得PWM波形的分段函数为:
式中,Tp:PWM的周期;Ts:PWM高电平时间;UH:PWM高电平电压值;UL:PWM低电平电压值;k:PWM的谐波次数。
电压变化关系表示为:
式中Ua:负载两端平均电压;α:PWM输出的占空比,0≤α≤1。
实验使用STM32F103ZET6单片机,该类型的单片机共有8个定时器,其中定时器6和定时器7不能用来产生PWM输出,定时器1和定时器8可最多产生7路PWM输出,其它的每个通用定时器可最多产生4路PWM输出,故最多可以产生30路PWM输出,实验使用定时器3。
在STM32F103系列单片机固件库函数中,TIM_Period为定时器的自动重装寄存器值,是PWM的周期值,TIM_SetCompare是用于选定使用哪个定时器和设置PWM占空比的函数,可推算出STM32的PWM输出电压变化关系。
在STM32的PWM配置函数里,Ts和Tp是通过设置非负整数值来完成的,假设T为单片机计数脉冲基本周期,n为TIM_SetCompare装载值,m为PWM一个周期值,m和n都是非负整数,则有:
由式(4)可以看出,在STM32的代码编写里,负载两端的电压平均值Ua与TIM_SetCompare装载值n和TIM_Period的PWM的一个周期值m有关,而在程序设计中,m可预先设置好,m就是调光器的级数,装载值n则需要对从电位器得到的AD数据值进行处理后方能得到,对AD数据的处理有多种方式,于是可得到装载值n与AD数据之间的映射关系。
线性处理模型
由式(4)分析可知,装载值n与AD数据之间有映射关系,即从电位器得到的AD数据与最终的PWM输出存在映射关系,实验建立线性映射关系,对AD数据进行算数平均值处理,可得:
式中k:比例系数;kr:算数平均值比例系数(与N有关);N:从电位器采样的AD数据个数;xi:从电位器采样的AD数据值;p:AD转换器的数据二进制位数。
由式(4)和式(5)可得负载两端的电压变化与算数平均值处理的AD数据之间的关系:
根据所建立的线性处理模型,实验设置调光器的调光级m=1000,由式(4)、式(5)和式(6)可得线性处理模型的电压变化关系为:
硬件设计
调光器整体结构
PWM调光器的整体结构包括旋转电位器、双电源:电源1和电源2、LED驱动电路、LED负载和STM32F103ZET6单片机组成,如图2所示。
旋转电位器是旋转变阻装置,通过旋动电位器使其电阻值发生改变,从而电位器两端的电位差也会发生变化,单片机从电位器采集其电位值,并转换为AD数据进行处理,实验进行的是线性处理,装载值为n,将n传递给TIM_SetCompare函数,从而得到AD数据所对应的占空比,使LED驱动电路端接收到一定占空比的PWM输出。实验使用的电位器有三个引脚,实验装置将电位器的电压输出端连接到了GPIOA1引脚上,STM32单片机的ADC1、ADC2和ADC3均能够完成对GPIOA1端的AD转换,如表1所示。电位器的输出电压的理论取值范围在0 V到3.3 V之间,LED灯的亮度变化随着电位器输出端的电位值的变化而变化。
图 2 PWM调光器整体结构 Fig.2 PWM dimmer overall structure
电源1为旋转电位器和STM32单片机的供电电源,为直流3.3 V恒压电源,故电位器的点位值范围即为0 V~3.3V。电源2为LED驱动电路的电源,为恒压电源,其电器特性根据LED负载的特性进行配置。
表 1 STM32F103ZET6的ADC与转换通道
Table 1 STM32F103ZET6 ADC and conversion channels
转换通道 |
ADC1 |
ADC2 |
ADC3 |
通道0 |
PA0 |
PA0 |
PA0 |
通道1 |
PA1 |
PA1 |
PA1 |
通道2 |
PA2 |
PA2 |
PA2 |
通道3 |
PA3 |
PA3 |
PA3 |
通道4 |
PA4 |
PA4 |
PF6 |
通道5 |
PA5 |
PA5 |
PF7 |
通道6 |
PA6 |
PA6 |
PF8 |
通道7 |
PA7 |
PA7 |
PF9 |
通道8 |
PB0 |
PB0 |
PF10 |
通道9 |
PB1 |
PB1 |
|
通道10 |
PC0 |
PC0 |
PC0 |
通道11 |
PC1 |
PC1 |
PC1 |
通道12 |
PC2 |
PC2 |
PC2 |
通道13 |
PC3 |
PC3 |
PC3 |
通道14 |
PC4 |
PC4 |
|
通道15 |
PC5 |
PC5 |
LED驱动电路
LED驱动电路如图3所示。驱动电路主要由固态继电器与电源接口组成。
图 3 LED驱动电路 Fig. 3 LED drive circuit
固态继电器受PWM波的控制,当PWM Input端为低电平时,PC817光电耦合器导通,NPN型C9014三极管基集1端为高电位,三极管导通,固态继电器闭合,LED负载通电。当PWM Input端为高电平时,LED负载为断路状态,光电耦合器将前端与负载隔离开来。在LED负载高电压端引出ADC连接线,用于STM32采集LED负载两端的电压值。LED驱动电源根据LED负载特性进行选取,为恒压源。实验采用低功率0805贴片LED,故其驱动电源可选用STM32单片机的3.3 V直流电源,事实上对于该种类型的LED可通过限流电阻直接与单片机的GPIO引脚连接,式(5)和式(6)的线性处理模型同样适用。
STM32F103ZET6单片机
STM32F103ZET6是STM32系列单片机中的一种,对于LQFP和BGA的封装均有144只引脚,内部集成了512 K字节的FLASH闪存存储器,标准工作电压范围为2.0 V ~3.6 V,其部分性能参数如表2所示。STM32F103ZET6单片机内部集成了AD转换与PWM输出功能,可通过GPIO引脚采集电位器的电位值,并对从电位器采集到的数据进行线性或非线性处理,如式(6)和式(7)的处理,可得PWM输出的占空比,通过得到的占空比,可进行相应的PWM输出。
表 2 STM32F103ZET6部分性能参数
Table 2 Performance parameters of STM32F103ZET6
名称 |
参数 |
单片机 |
STM32F103ZET6 |
主频(MHz) |
72 |
内核 |
ARM Cortex-M3 |
通用IO个数 |
112 |
定时器个数 |
8 |
Flash(KB) |
512 |
SRAM(KB) |
64 |
LED是利用PN结或类似结构把电能转化成光能的器件[10, 11],在很宽的工作电压电流范围内,发光二极管的发光亮度与工作电压大小成线性关系,LED灯是比较节能的发光装置,在现代社会里的应用非常广泛。实验装置将LED灯与GPIOC的引脚GPIO_Pin_7通过470欧姆的限流电阻相连,所以将PWM输出到GPIOC的GPIO_Pin_7引脚即可获得对LED的亮暗调节。在编程时将TIM3的定时通道2(TIM_CH2)与GPIOC_Pin_7完全重映像。定时器TIM3的引脚映像表如表2所示。
表 3 TIM3的定时通道与映像引脚
Table 3 TIM3 timing channels and mapping pins
定时通道 |
无重映像 |
部分重映像 |
完全重映像 |
TIM_CH1 |
GPIOA6 |
GPIOB4 |
GPIOC6 |
TIM_CH2 |
GPIOA7 |
GPIOB5 |
GPIOC7 |
TIM_CH3 |
GPIOB0 |
GPIOC8 |
|
TIM_CH4 |
GPIOB1 |
GPIOC9 |
软件设计与实验
PWM调光器软件设计
PWM调光器的软件程序流程包括:装置初始化(系统时钟初始化、PWM配置初始化、ADC配置初始化),采集电位器AD数据,对采集的AD数据的线性处理过程和根据处理后得到的占空比进行PWM输出,如图4所示。
图 4 LED调光器程序流程图 Fig.4 LED dimmer program flow chart
调光器装置实验
STM32F103ZET6开发板的标准电压为3.3 V,所以高电压UH ≈ 3.3 V,LED负载两端电压的变化范围在0 V~3.3 V之间。设置LED调光级为m=1000,从电位器采样的AD数据个数N=100,AD转换的数据二进制位数为p=12,比例系数分别取k=0.5,1,2,进行三种不同比例系数线性处理模型的调光实验。
根据式(5)和式(6)可知线性处理模型的结果以LED负载两端的电压值来体现,可通过误差值的大小来判断线性处理模型的正确性,误差较小则表明实验结果与理论模型具有相同的变化趋势,定义相对误差(取值范围一般在5%以内):
式中UC:实验测得LED负载端的电压值。
实验测得数据如表4所示,当比例系数k=0.5,1和2时,电位器控制电压的理论值分别为0~3.3 V,0~3.3 V和0~1.5 V,LED负载端的电压理论值范围分别为0~1.5 V,0~3.3 V,0~3.3 V。
实验结果表明随着电位器的调节,LED负载端的电压值也在发生变化,这说明LED受到STM32单片机的控制,STM32单片机也随着电位器的调节而有不同占空比的PWM输出。在调光级为1000时,LED的亮暗变化均匀,通过误差分析,得出相对误差值均在5%以内,实验结果验证了式(5)和式(6)建立的线性处理模型。当调光级m的值比较小时,LED的亮度并不明显,此时LED受到占空比较小的PWM控制,LED两端的电压值也较小。
表 4 LED调光器实验数据
Table 4 Experimental data of LED dimmer
比例 |
元器件 |
电位(V) |
||||
k=0.5 |
电位器 |
0.444 |
1.679 |
2.200 |
3.205 |
|
LED |
0.215 |
0.800 |
1.050 |
1.524 |
||
相对误差(%) |
3.153 |
4.705 |
4.545 |
4.899 |
||
k=1 |
电位器 |
0.102 |
1.061 |
2.290 |
3.145 |
|
LED |
0.106 |
1.10 |
2.182 |
2.998 |
||
相对误差(%) |
3.774 |
3.545 |
4.950 |
4.903 |
||
k=2 |
电位器 |
0.065 |
0.304 |
0.891 |
1.403 |
|
LED |
0.125 |
0.587 |
1.698 |
2.668 |
||
相对误差(%) |
3.846 |
3.454 |
4.714 |
4.918 |
结 论
STM32单片机的应用广泛,基于STM32的PWM调光器,将电位器与LED相对地隔离开来,通过建立装载值n与从电位器端采集的AD数据之间的映射模型,得到LED调光器的调光级只与PWM的一个周期值m有关。在设置的调光级m=1000的实验结果中,验证了所建立的线性处理模型,LED的亮暗变化均匀,相对误差也较小。
参考文献
[1] 贾冬颖, 王巍. 基于STC单片机LED智能照明系统的设计 [J]. 照明工程学报, 2010, (02): 71-73+80.
[2] 邹中华, 吴陈, 曾庆军. 基于S3C2410的直流电机PWM调速系统 [J]. 微计算机信息, 2008, 24(4-2): 130-131.
[3] 何国荣, 纪娜. 基于PWM技术的LED补光灯R/B配比算法研究 [J]. 信息技术, 2015, (05): 147-150.
[4] 曹阳. 基于触摸按键和PWM驱动配色的汽车氛围灯 [J]. 电子技术, 2015, (12): 1-3.
[5] 杨学存, 杨战社, 孔令红. 基于ARM的嵌入式直流电机PWM调速系统设计 [J]. 煤矿机械, 2012, 33(04): 255-257.
[6] 洪俊峰, 卜文强, 张榕鑫, 等. 基于STM32 PWM的正弦信号发生器设计 [J]. 合肥工业大学学报(自然科学版), 2014, 37(02): 188-191+224.
[7] 王琼, 吴惠, 夏光, 等. 基于PWM控制模式的高速开关阀开关特性分析及优化 [J]. 合肥工业大学学报(自然科学版), 2016, (09): 1199-1204.
[8] 王子权. 基于STM32的PWM调光器 [J]. 电气自动化, 2018, 40(06): 98-100+115.
[9] 李素娟, 蒋维安. 直流电机PWM调速系统中控制电压非线性研究 [J]. 现代电子技术, 2010, (22): 196-198+202.
[10] 李杨帅. 基于PWM的无级调光LED驱动电路设计 [D]: 长安大学, 2015.
[11] 程伊炳, 金尚忠. 基于多路输出的高效LED驱动器的分析和仿真 [J]. 照明工程学报, 2013, (02): 66-70.