【手拉手 带你准备电赛】使用定时器中断更改PWM占空比
目录
关于PWM占空比存在的问题及分析
相关问题的解决方案
具体程序设计
注意事项
关于PWM占空比存在的问题及分析
在之前发布的有关占空比的文章中,我们看到输出信号的占空比只能在主函数中的while循环中更改。
程序信号模拟图如下所示:
这样更改占空比,存在的问题非常明显——占空比的改变并不规律。产生这种问题的原因是:我们改变占空比是通过下面这一条程序语句实现的。但是这条语句在主函数中的while循环中,也就是说,这条语句的运行时间是不确定的,所以没有办法准确的定位到每个周期,改变每个周期的占空比。
//改变占空比函数
//led0pwmval表示高电平开始的数值
TIM_SetCompare1(TIM1,led0pwmval);
相关问题的解决方案
通过我们的分析可得,上述问题产生的原因在于我们没有办法准确的定位到每个周期,并作出相应的更改。为解决这一问题,我们使用了定时器。
我们利用定时器进行计时,这样就可以精确定位到每个周期,为对每个周期的占空比进行更改提供了前提。然后我们在中断服务函数中编写程序,更改占空比,这样就达到了有规律的更改每个周期的占空比的效果。在主函数中的while循环就可以更改为空循环,其功能仅为使主函数一直运行下去。
具体程序设计
具体的程序设计如下:
1.由于我们使用的是TIM1,所以我们对其进行使能
TIM_ITConfig(TIM1,TIM1_UP_IRQn,ENABLE);
2.然后我们进行中断的初始化
//初始化
NVICStruct.NVIC_IRQChannel=TIM1_UP_IRQn;
NVICStruct.NVIC_IRQChannelCmd=ENABLE;
NVICStruct.NVIC_IRQChannelPreemptionPriority=3;
NVICStruct.NVIC_IRQChannelSubPriority=2;
NVIC_Init(&NVICStruct);
3.最后我们编写中断服务函数即可
void TIM1_UP_IRQHandler(void)
{if(TIM_GetITStatus(TIM1,TIM1_UP_IRQn) != RESET){TIM_ClearITPendingBit(TIM1,TIM1_UP_IRQn);if(direction)p=p+100;else p=p-100;if(p>1000)direction=0;if(p==0)direction=1; TIM_SetCompare2(TIM1, p);}}
修改后的模拟图就是下图了,从图中我们可以看出,我们的占空比在均匀的变化。已经达到了我们的目标实验效果。
注意事项
1.在我们的中断服务函数中的变量需要使用全局变量,这样才能保证我们每次进入中断服务函数是,变量取值的连续性。
2.在我们进行中断相关函数的编写时,有关的变量名、函数名需要去相关的文件中寻找,不要自己写(不然就会像我一样,一个问题一下午,错的醉生梦死,改完名字之后痛心疾首)。
3.记得中断使能。
好的,关于使用中断更改PWM的占空比,我们就分析到这里,你学废了吗?下篇文章见!
【手拉手 带你准备电赛】使用定时器中断更改PWM占空比相关推荐
- 【手拉手 带你准备电赛】PWM究竟是什么(附:PWM输出实验完整代码)
目录 PWM简介 PWM原理 PWM实验内容 PWM实验步骤 PWM实验代码 PWM解惑时刻 1.向上计数 2.刹车.死区 附录 初始化函数的完整代码 主函数的完整代码 都知道BMW,那么你们知道PW ...
- 【手拉手 带你准备电赛】原来你是这样的触摸屏(电阻触摸屏)
在我们的生活中,触摸屏可以说是无处不在.在各种触控面板我们都可以看到触摸屏的身影,一些产品也因为有了触摸屏而价值大涨.接下来,小蛋糕带你深入了解触摸屏. 触摸屏可以分为电阻式触摸屏和电容式触摸屏,在这 ...
- 【手拉手 带你准备电赛】解答小课堂——为什么要使能时钟
大家在代码编写过程中也发现了,当我们涉及到外设时,总是需要使能其对应的时钟,那么为什么要使能时钟呢?直接用不是更简单? 确实,直接使用IO,代码量可以小那么一丢丢,你可能会说:代码量算什么,这是老师少 ...
- 【手拉手 带你准备电赛】April Tag标记跟踪(3D定位)详解
目录 关于April Tag April Tag介绍 April Tag分类 April Tag标记跟踪原理 April Tag标记跟踪代码分析 April Tag标记跟踪测试结果 相关内容解惑 梯度 ...
- 带学生参加电赛,5个国一,2个国二!15个省奖!
大家好,我是张巧龙,转眼21年的各省电赛就结束了,今年的电赛确实让人难忘,不管是题目还是比赛形式,亦或是比赛时间一拖再拖. 国赛结果也在前段时间公示了,参与人数再次增长. 据我所知,有一些省份由于疫情 ...
- STM32L475裸机例程学习 定时器中断和PWM输出实验
定时器中断和PWM输出实验 所以阿-笔记的重要性哇!之前看过的内容在做后面的内容涉及到了发现没有笔记,看的时间太久远,竟然全部忘记了,真是个悲伤的故事:( 那就重来吧.由于这两个实验都跟TIM定时器关 ...
- C51使用定时器中断产生PWM方波信号
使用定时器中断产生PWM方波信号,完成50个频率为1KZ的矩形脉冲输出,P20端口接LED闪烁,用于演示. 矩形脉冲频率为1KZ,周期则为1ms, 中断为0.5ms, 所以T0: TH0=(6 ...
- 用STM32定时器中断产生PWM控制步进电机
文章目录 前言 一.硬件部分 1.使用的硬件 2.硬件连接 3.总硬件连接图 二.控制步进电机转动 三.电机驱动代码 1.GPIO.h 2.timer.c 3.main.c 代码文件 前言 控制步进电 ...
- STM32 CubeMx(二)定时器中断和PWM呼吸灯
STM32 CubeMx(一)时钟树配置与GPIO输入输出 文章目录 1.定时器 1.1 定时器概念 1.2 定时器分类 1.3 定时器功能 1.4 配置过程和编写代码 1.5 代码分享 2.PWM产 ...
- 电赛猜题?我觉得没用,还不如做好这些!
01 前言 大家好,我是张巧龙,转眼又到22年电赛,这个公众号上有很多同学可能都参加过电赛,有毕业的已经工作的,也有没毕业的今年要参加. 我第一次接触电赛是在大一暑期,从参加电赛到指导学生参加电赛,转 ...
最新文章
- 今天收到上海某公司的全英文笔试题(some question of interview )
- java 传 复合类型对象_struts复合类型传值(对象传值)
- php怎么实现缓存,PHP怎么实现缓存功能_后端开发
- pythontype(1+0xf*3.14)_numpy强制类型转换|图像线性增强|不同数据类型与图像的显示...
- [BTS]使用BizTalk开发应用系统,就是这么简单!
- 1024程序猿节:揭秘腾讯老中青三代程序猿工位
- python字符串转化为long_Java带有运算符的字符串转换为Long型
- 关于RTP时间戳及多媒体通信同步的问题/H264关于RTP协议的实现
- 探讨LoadRunner的并发用户和集合点
- spring mvc 返回html 乱码,解决springmvc使用ResponseBody注解返回json中文乱码问题
- Android官方开发文档Training系列课程中文版:动画视图之场景创建
- TextDetection文本检测数据集汇总
- Dev控件GridControl 的使用
- ubuntu 14.10 64bit系统安装MBuntu主题(仿Mac主题)
- ZigBee TI ZStack CC2530 8.4 如何用高版本IAR打开低版本协议栈
- 微信视频号的实时推荐技术架构分享
- adams2015怎么把工具栏打开_怎么合并音乐?教大家3种快速完成音频合并的办法!...
- 解决同一办公环境局域网下无法添加打印机的情况
- 传统博物馆的自救之路,名画也变NFT
- 人到中年,沉默寡言(深度好文)