ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:25.25KB ,
资源ID:669557      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/669557.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(STM8S003F3通过PWM波实现三基色呼吸灯.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

STM8S003F3通过PWM波实现三基色呼吸灯.docx

1、STM8S003F3通过PWM波实现三基色呼吸灯前段时间使用 STM8S003F3 实现了一个三基色灯的各种效果,故写一篇文章作 为一个记录。1 综述我们知道,要是的 LED 灯亮直接通电即可。而要改变灯的亮度,我们有两种方 法:改变电流和 PWM 调光。我们首先想到的就是改变它的驱动电流,因为 LED 的亮度是几乎和它的电流直 接成正比关系。 然而用调正向电流的方法来调节亮度会产生一个问题: 在调亮度 的同时也会改变它的光谱和色温,这样就会会产生色偏。因为目前白光 LED 都 是用蓝光 LED 加黄色荧光粉而产生, 当正向电流减小时, 蓝光 LED 亮度增加而 黄色荧光粉的厚度并没有按比例减

2、薄, 从而使其光谱的主波长增长。 这个问题对 于一般的照明是没有问题的, 因为色温的变化量毕竟不是很大。 但是对电源来说 当电流过小时会产生闪烁, 除非电源的恒流范围很宽, 完全可以从 0 到最大。这 样才没有问题。简而言之,电流调光有色温变化和电源电流过小产生闪烁的问题。 曾经做过一个项目, 用于某设备上需要非常非常平稳的调光, 显然电流调光是无 法实现。同时像本文介绍的三基色调光有颜色要求的显然也不行。 因此我们使用 PWM 调光。既然 PWM 调光可以避免上面的两个问题, 为什么不直接都用 PWM 调光呢因为 我们毕竟是做产品,要考虑成本问题。 使用 PWM 调光至少需要一颗能支持 PW

3、M 的芯片(当然还有外围电路, 但是电流调光也是有电路的。 我们也应该知道 PWM 信号也可以由脉冲发生器提供) ,另外它需要编写程序。 所以只有在需要的场合 才使用 PWM 调光(使用 PWM 调光需要注意的问题是频率不能太低或者太高, 推荐 150-400Hz 之间。)。 PWM 的优点如下: PWM调光就不会产生色偏,因为它总是工作在 0或者最大两种状态。 PWM的占空比很好控制,而且精度高对电源没有影响,因为不会改变电源的工作条件,只是给电源开或者关。2PWM 波调光的原理脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的的技术, 广 泛应用在从测量、通信到功率控制与变换

4、及 LED 照明等许多领域中。通过以数 字方式控制模拟电路, 可以大幅度降低系统的成本和功耗。 此外,许多微控制器 和 DSP 已经在芯片上包含了 PWM 控制器,这使数字控制的实现变得更加容易 了。简言之, PWM 是一种对模拟信号电平进行数字编码的方法。通过高分辨率 计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。 PWM 信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全 有(ON),要么完全无(OFF)。电压或电流源是以一种通(ON)或断(OFF)的重复脉 冲序列被加到模拟负载上去的。 通的时候即是直流供电被加到负载上的时候, 断 的时候即是供电被断

5、开的时候。 只要带宽足够, 任何模拟值都可以使用 PWM 进 行编码。占空比( DutyCycleorDutyRatio ) 首先我们需要了解占空比,占空比的解释可以归纳为如下几种: 在一串理想的脉冲序列中 (如方波) ,正脉冲的持续时间与脉冲总周期的比值。 例如:脉冲宽度1卩信号周期4ys的脉冲序列占空比为。在一段连续工作时间内脉冲占用的时间与总时间的比值。 在周期型的现象中,现象发生的时间与总时间的比。 通俗一点讲就是电路释放能量的有效时间与总释放时间的比。调光比然后我们需要了解调光比,调光比则是按下面的方法计算( Foper:工作频率;Fpwm:调光频率;):调光比率=Foper/Fpw

6、m,(其实也就是调光的最低有效占空比)比如Foper=100KHZ; Fpwm=200Hz,则调光比为:100K/200=500;这个指标在很 多驱动芯片的规格书里会说明的。调光 调光原理 若一个占空比为 10%的 PWM 输出,即 10%的时间通, 90%的时间断; 若一个占空比为 50%的 PWM 输出,即 50%的时间通, 50%的时间断; 若一个占空比为 90%的 PWM 输出,即 90%的时间通, 10%的时间断;我们知道,人眼是有视觉暂留的,打个比方,人眼只能识别 1us(这个比方没有任何科学依据,仅仅为了便于理解)内光子的数量从而判断亮暗,如果 1us接收了 1000个光子,那么

7、我们就会认为是一个亮度,至于这1000个光子是在1us什 么时候收到, 是没有任何影响的, 也就是说, 在的时候收到和的时候收到是没有 区别的,我们需要关心的只是数量。 这就是为什么我们进行 PWM 调光的时候不 能太慢(视觉暂留可以分辨) 也不能太快(太快就没有区别了, 就一直是最亮的) 。 这样就好理解了,占空比是 10%,就相当于给它加了一个的电压(因为 10%通 电时间里电流产生的效果和加在周内的时候是一样的) 。所以我们就可以通过占 空比来条件亮度。如果在50ms中,LED在这段时间中得到9V供电。如果在下一个50ms中将开 关断开,灯泡得到的供电将为0V。如果在1秒钟内将此过程重复

8、10次,灯泡将 会点亮并象连接到了一个电池(9V的50%)上一样。这种情况下,占空比为50%, 调制频率为10Hz( T=1/f=1/10=)。大多数负载(无论是电感性负载还是电容性负 载)需要的调制频率高于10Hz。设想一下如果灯泡先接通5秒再断开5秒,然后 再接通、再断开。占空比仍然是50%,但灯泡在头5秒钟内将点亮,在下一 个 5 秒钟内将熄灭。 要让灯泡取得电压的供电效果, 通断循环周期与负载对开关状态变化的响应时间相比必须足够短。要想取得调光灯 (但保持点亮 )的效果,必须提高调制频率。在其他 PWM 应用场合也有同样的要求。 通常调制频率为 1kHz 到 200kHz 之间。通过上

9、面的介绍, 我们就知道了 PWM 调光的原理, 那么我们来看看我们这个项 目的原理。三基色呼吸灯原理需求说明:我们需要设置一个灯,它具有常亮、长暗、快闪、慢闪、呼吸 5 钟效 果,并且要求这几种状态是可以变化的。灯的颜色可以变化。需求分析:灯的颜色可以变化 确定使用三基色灯。 状态可以切换, 我们使用 串口调节灯的状态和灯的颜色 (通过串口给单片机发送数据, 然后将参数传给灯 控制函数)。我们使用 PWM 调节灯的亮度,通过改变捕获 /比较寄存器的值来 改变占空比从而改变亮度。数学建模:三个灯和一个灯的控制是一样的, 由于我们使用的是 PWM 波调光所 以灯只有两种状态: 断和通。我们分析 5

10、 种状态可以抽象成数学模型: 暗、上升、 亮、下降 4 钟状态(长暗就是一直暗,常亮就是一直亮,快闪就是 100%占空比而且频率比较快,慢闪就是 100%占空比而且频率比较慢、呼吸就是占空比最低 为 10%然后以 10%逐渐上升) 。然后我们确定需要输入的变量: Value_LED_Red(红色灯的亮度)、Value_LED_Green (绿色灯的亮度)、Value_LED_Blue (蓝 灯的亮度)、Value_ChangeOnce(上升或下降的速度)、 HoldTime_Min (在低 电平状态的持续时间)、HoldTime_Max (在高电平状态的持续时间)。3 实现过程下面是TSSOP

11、20封装的管脚图。首先,我们要确定硬件管脚,但是事实上,因为我用的最多的就是 TIM2 和 TIM4, 因此我选用的 TIM2_1(PC5,Red)、 TIM2_2( PD3,Green)、 TIM2_3( PD2, Blue),但是发现除了绿色以外都无法用 PWM波控制,但是能用10控制亮暗, 后来查资料发现TIM2_1和TIM2_3早使用的时候必须给存储器地址分布重映 射,也就是我们需要使用管脚的复用功能!我们通过看数据手册发现,使用 TIM2只有一个管脚是复用功能,因此选择 TIM2。但是我因为电路限制,所以 还是用的上面所说的管脚(注意,TIM2_3有复用和不复用两种,我用的是复用)

12、这也没有什么影响,我们可以学习一下管脚的复用功能。使用复用功能我们首先看数据手册中关于管脚的描述(第一行是 TSSOP20封装的管脚编号,第二行是UFQFPN20封装的管脚b)从上面的图中我们可以看到,需要使用 15、19管脚复用功能就需要设置 AFR0和 AFR1 使用复用功能就是设置 AFR ( Alternatefunctionremappingbits,候补功能映射位)一一我们继续看芯片资料其中OPT2【选项字节(Optionbyte)编程】和NOPT2需要是相反的(可能是出于校验考虑),我们从数据手册中可以知道:应用程序可直接向目标地址进行写操作。所以我们直接对这两个地址进行写操作,

13、那么数值是多少呢我们继续看数据手册,如下图所示从上图中我们可以看到,我们将 AFR1设置为1,将AFR0设置成1。代码如下:cpp1.2. *Fu nctio n:FLASHnit3. *Calls:void4. *CalledBy:5. *ln put:void6. *OUTPUT:void7. *Return:void8. *DESCRIPTION:1.设置管脚复用功能(AFR0要设置为1AFR1要设置为1)9. 每一次只能操作一个字节10. *Others:nothingA A */13. volatile unsigned char flash_NOPT20x4804;14. #def

14、ineFLASH_EOP0X04改参数,启用复用功能15. 和NOPT2要相反A Q */依据计数器的计数方向)以确定是否符合 TIM1_CCR蒋TIM1_CNT或者TIM1_CNTC TIM1_CCRi (我们在TIM1_CR1中设置为向上计数、边沿对齐模式)。b. 根据TIM1_CR1寄存器中CMS位域的状态,定时器能够产生边沿对齐的 PWM 信号或中央对齐的PWM信号。我们查看数据手册发现(可以参见 向上计数模式):我们为了调光的均匀,将使得 TIM2_ARR=255,根据上图,我们可以知道,最 亮为255,最暗为就是PWM波的频率(因为TIM1和TIMX的PWM功能是相 同资料互用的,

15、因此上图为TIM1的资料)。初始化PWM波的亮度根据上面的内容我们知道占空比(也就是亮度)是 TIM2_CCR决定的,我们初始化为零:TIM2-CCR1H=0;TIM2-CCR1L=0;计数器使能、捕获比较寄存器使能关于这两个使能我们可以自己查询 数据手册,需要提一点的是TIMx_CCER1 控制比较/捕获寄存器1和比较/捕获寄存器2。TIMx_CCER2控制比较/捕获寄存 器3。产生PWM波的初始化程序具体代码如下:cpp1 /*2. *Fu nctio n:TIM2_I nitPwmCtrl3. *Calls:void4. *CalledBy:5. *ln put:void6. *OUTPUT:void7. *Return:void8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1