- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于stm32的呼吸灯时间本科生毕业设计论文(设计)__
STM32课程设计 呼吸灯 仿真与实践 2012112020335 乔智慧 电子信息科学与技术 物理与电子科学学院 2015年6月03日
电工电子中心2015年6月绘制
STM32呼吸灯设计
一.任务解析
呼吸灯,指灯光设备的亮度随着时间由暗到亮逐渐增强,再由亮到暗逐渐衰减,很有节奏感地一起一伏,就像是在呼吸一样。本设计要求通过STM32,实现呼吸周期为3秒,即吸气时间(亮度上升时间)1.5秒,呼气时间(亮度衰减时间)1.5秒的呼吸灯。
二.方案论证
要使用数字器件控制灯光的强弱,我们很自然就想到PWM(脉冲宽度调制)技术。假如以LED作为灯光设备,且由控制器输出的PWM信号可以直接驱动LED,PWM信号中的低电平可点亮LED灯。由于视觉暂留效应,人眼可以看不到LED灯的闪烁现象,反映到人眼中的是亮度的差别,因此我们需要LED以较高的频率进行开关(亮灭)切换。因此,我们可以使用高频率的PWM信号,通过调制信号的占空比,控制LED灯的亮度。根据以上思路,提出如下两个方案。
方案一:用常见的数学函数来表示亮度随着实践逐渐变强再衰弱,把函数值赋值到数组中,用调制的方法,每个循环给闪烁的熄灭时间加一,灯就会慢慢变暗,在设置熄灭时间加到一定程度就开始减一,就会渐渐变亮了,如此循环。
方案二:把函数值赋值到数组中,对数组中的每一个值进行重复而快速的扫描,当遍历完PWM表中的元素时,再重头开始遍历PWM表。即以一定的时间长度为周期,LED灯亮的平均时间越长,亮度就越高,反之越暗。利用STM32定时器的PWM输出功能,实现呼吸灯。
经分析比较与初步测试,方案二更能很好地实现呼吸灯效果,因此选择方案二。
方案实施
STEP1 生成表示亮度的数学函数
亮度随着时间逐渐变强再衰减,可以用两种常见的数学函数表示,分别是半个周期的正弦函数与指数上升曲线基期对称得到的下降曲线。如图示:
正点原子STM32开发板上的LED灯是低电平点亮
因此,比较上述两个函数图像我们可以发现,下凹函数曲线灯光处于暗的状态更长,所以指数函数的曲线更符合我们呼吸灯的亮度变化要求。
STEP2 配置工程环境
在实验中我们用到了GPIO,RCC,TIM外设,还使用了中断,所以我们先要把以下库文件添加到工程:stm32f10x_gpio.c, stm32f10x_rcc.c, stm32f10x_tim.c,misc.c,新建pwm_output.c及pwm_output.h文件,并在stm32f10x_conf.h中把使用到的ST库的头文件注释去掉。代码如下:
#include stm32f10x_gpio.h
#include stm32f10x_rcc.h
#include stm32f10x_tim.h
#include misc.h
STEP3 main文件
本工程的main函数十分简单,仅仅调用了一个初始化呼吸灯的函数TIM3_Breathing_Init( ),代码如下:
int main(void)
{
TIM3_Breathing_Init();
while(1);
}
STEP4 配置定时器输出PWM
初始化呼吸灯的函数TIM3_Breathing_Init按步骤调用为GPIO初始化函数TIM3_GPIO_Config和定时器模式初始化函数TIM3_Mode_Config,代码如下:
void TIM3_Breathing_Init(void)
{
TIM3_GPIO_Config();
TIM3_Mode_Config();
}
STEP5 生成指数曲线PWM数据
要实现LED亮度随着指数曲线变化,我们需要使用占空比呈指数曲线变化的PWM信号,而这样的信号由定时器经过查表产生。这个表的数据存储在程序中的数组indexWave中,代码如下:
uint8_t indexWave[] = {1,1,2,2,3,4,6,8,10,14,19,25,33,44,59,80,
107,143,191,255,255,191,143,107,80,59,44,33,25,19,14,10,8,6,4,3,2,2,1,1};
把这个表中的数据画成图,如下图所示:
这个表有40个数字,从上图中可以看到这些数据呈指数上升再衰减,正好是呼吸灯的一个控制周期,数字的范围是0-255,即把LED的亮度分为0—255个等级。
假如我们把定时器的脉冲计数器TIMx_CNT上限设置为255,把这个表的数据一个一个的赋到定时器的比较寄存器TIMx_CCR中,那么在每个PWM周期中,当TIMx_CNT的计数值小于比较寄存器TIMx_CCR值时,就会在通道中输出低电平,点亮LED。而随着TIMx_CCR的值由LED亮度表得来,所以LED
您可能关注的文档
- 基于matlab的倒立摆pid控制系统设计大学本科毕业(论文)设计.doc
- 基于matlab的计算机控制系统仿真平台的设计大学本科毕业论文(设计)正文.doc
- 基于matlab的模拟信号的数字传输研究与仿真大学本科毕业论文(设计).doc
- 基于matlab的模拟信号的数字传输研究与仿真大学毕设论文.doc
- 基于matlab的凸轮轮廓线设计与运动仿真大学本科毕业(论文)设计.doc
- 基于matlab的智能多输入多输出智能解耦系统设计___论文仿真.doc
- 基于matlab的自动控制系统设计与校正___课程设计论文正文.doc
- 基于matlab对信号调制与解调的仿真大学本科毕业设计论文.doc
- 基于matlab对信号调制与解调的仿真大学毕设论文.doc
- 基于maya的苏醒的森林场景仿真ae大学本科毕业(论文)设计.doc
最近下载
- 学校--以老带新”实施方案.docx VIP
- 2022《贯彻执行中央八项规定、推进作风建设综述》专题PPT.ppt VIP
- -IATF 16949质量管理体系培训 .ppt VIP
- 医美整形线上平台留客升单策略.docx VIP
- 高中物理力学——动态平衡问题处理方法.pdf VIP
- 一种可实时监控的负压引流系统及其使用方法.pdf VIP
- 2022年新版《义务教育体育与健康课程标准》考试学习资料.docx VIP
- 2024-2025学年天津市南开区七年级(下)期末数学试卷.pdf VIP
- IATF16949质量管理体系模板或IATF16949质量管理手册.docx VIP
- 外研版八年级上册 Unit 1 单元测试卷答案及解析 新版 2025年新外研版八年级上册.docx
文档评论(0)