STM32控制器多级LED调光原理与实验
基于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.