目录

关于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占空比相关推荐

  1. 【手拉手 带你准备电赛】PWM究竟是什么(附:PWM输出实验完整代码)

    目录 PWM简介 PWM原理 PWM实验内容 PWM实验步骤 PWM实验代码 PWM解惑时刻 1.向上计数 2.刹车.死区 附录 初始化函数的完整代码 主函数的完整代码 都知道BMW,那么你们知道PW ...

  2. 【手拉手 带你准备电赛】原来你是这样的触摸屏(电阻触摸屏)

    在我们的生活中,触摸屏可以说是无处不在.在各种触控面板我们都可以看到触摸屏的身影,一些产品也因为有了触摸屏而价值大涨.接下来,小蛋糕带你深入了解触摸屏. 触摸屏可以分为电阻式触摸屏和电容式触摸屏,在这 ...

  3. 【手拉手 带你准备电赛】解答小课堂——为什么要使能时钟

    大家在代码编写过程中也发现了,当我们涉及到外设时,总是需要使能其对应的时钟,那么为什么要使能时钟呢?直接用不是更简单? 确实,直接使用IO,代码量可以小那么一丢丢,你可能会说:代码量算什么,这是老师少 ...

  4. 【手拉手 带你准备电赛】April Tag标记跟踪(3D定位)详解

    目录 关于April Tag April Tag介绍 April Tag分类 April Tag标记跟踪原理 April Tag标记跟踪代码分析 April Tag标记跟踪测试结果 相关内容解惑 梯度 ...

  5. 带学生参加电赛,5个国一,2个国二!15个省奖!

    大家好,我是张巧龙,转眼21年的各省电赛就结束了,今年的电赛确实让人难忘,不管是题目还是比赛形式,亦或是比赛时间一拖再拖. 国赛结果也在前段时间公示了,参与人数再次增长. 据我所知,有一些省份由于疫情 ...

  6. STM32L475裸机例程学习 定时器中断和PWM输出实验

    定时器中断和PWM输出实验 所以阿-笔记的重要性哇!之前看过的内容在做后面的内容涉及到了发现没有笔记,看的时间太久远,竟然全部忘记了,真是个悲伤的故事:( 那就重来吧.由于这两个实验都跟TIM定时器关 ...

  7. C51使用定时器中断产生PWM方波信号

      使用定时器中断产生PWM方波信号,完成50个频率为1KZ的矩形脉冲输出,P20端口接LED闪烁,用于演示.   矩形脉冲频率为1KZ,周期则为1ms, 中断为0.5ms, 所以T0: TH0=(6 ...

  8. 用STM32定时器中断产生PWM控制步进电机

    文章目录 前言 一.硬件部分 1.使用的硬件 2.硬件连接 3.总硬件连接图 二.控制步进电机转动 三.电机驱动代码 1.GPIO.h 2.timer.c 3.main.c 代码文件 前言 控制步进电 ...

  9. STM32 CubeMx(二)定时器中断和PWM呼吸灯

    STM32 CubeMx(一)时钟树配置与GPIO输入输出 文章目录 1.定时器 1.1 定时器概念 1.2 定时器分类 1.3 定时器功能 1.4 配置过程和编写代码 1.5 代码分享 2.PWM产 ...

  10. 电赛猜题?我觉得没用,还不如做好这些!

    01 前言 大家好,我是张巧龙,转眼又到22年电赛,这个公众号上有很多同学可能都参加过电赛,有毕业的已经工作的,也有没毕业的今年要参加. 我第一次接触电赛是在大一暑期,从参加电赛到指导学生参加电赛,转 ...

最新文章

  1. 今天收到上海某公司的全英文笔试题(some question of interview )
  2. java 传 复合类型对象_struts复合类型传值(对象传值)
  3. php怎么实现缓存,PHP怎么实现缓存功能_后端开发
  4. pythontype(1+0xf*3.14)_numpy强制类型转换|图像线性增强|不同数据类型与图像的显示...
  5. [BTS]使用BizTalk开发应用系统,就是这么简单!
  6. 1024程序猿节:揭秘腾讯老中青三代程序猿工位
  7. python字符串转化为long_Java带有运算符的字符串转换为Long型
  8. 关于RTP时间戳及多媒体通信同步的问题/H264关于RTP协议的实现
  9. 探讨LoadRunner的并发用户和集合点
  10. spring mvc 返回html 乱码,解决springmvc使用ResponseBody注解返回json中文乱码问题
  11. Android官方开发文档Training系列课程中文版:动画视图之场景创建
  12. TextDetection文本检测数据集汇总
  13. Dev控件GridControl 的使用
  14. ubuntu 14.10 64bit系统安装MBuntu主题(仿Mac主题)
  15. ZigBee TI ZStack CC2530 8.4 如何用高版本IAR打开低版本协议栈
  16. 微信视频号的实时推荐技术架构分享
  17. adams2015怎么把工具栏打开_怎么合并音乐?教大家3种快速完成音频合并的办法!...
  18. 解决同一办公环境局域网下无法添加打印机的情况
  19. 传统博物馆的自救之路,名画也变NFT
  20. 人到中年,沉默寡言(深度好文)

热门文章

  1. ker矩阵是什么意思_基向量、标准正交基、对称矩阵、Hermite阵
  2. linux 修改文件的权限
  3. 三菱PLC基础知识 辅助继电器M
  4. 哈希值是什么? 哈希概念
  5. 如何快速上手制作高质量短视频?
  6. CSS 特异度、继承、求值过程简介
  7. sata接口 图解 定义_【sata硬盘三个接口】sata硬盘接口图解_sata硬盘接口电路
  8. Android 语音助手
  9. QT Libvlc音视频环境配置及编译错误解决
  10. 计算机中的没有文件怎么处理方法,电脑重启后桌面上文件没有了怎么办