【STM8学习笔记1】 一步步学习 使用TIM1测量PWM波.pdfVIP

【STM8学习笔记1】 一步步学习 使用TIM1测量PWM波.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
【STM8学习笔记1】 一步步学习 使用TIM1测量PWM波

一基本TIM1测量PWM波形原理 (原文件名:111.png) 根据上图所示测量PWM的基本思想如下: 每个上升沿开始计数,监测到下降沿时记录下当前值为高电平时间,再检测到一个下降沿记 录下当前值为周期,同时清零计数器开始测量下个周期。 二TIM1 的硬件结构 1 信号如何输入的 打开手册 翻到 17.5.2 输入模块 (原文件名:1.jpg) 如图61,输入部分对相应的TIx输入信号采样,并产生一个滤波后的信号TIxF。然后, 一个带极性选择的边缘监测器产生一个信号(TIxFPx),它可以作为触发模式控制器的输入触 发或者作为捕获控制。该信号通过预分频进入捕获寄存器(ICxPS)。 根据该图和说明了解到和PWM测量相关的信息 1) TIM1有四个外部IO引脚可以输入信号 TIM1_CHx 2) 我们所关注的边沿检测是通过中间的边缘监测器检测出来的 3) 一个输入信号的上升沿 下降沿信号(TI1FP1,TI1FP2)可以配置到不同的通道 上 那么我们就可以将一个引脚输入的PWM信号的上升沿和下降沿分别送入两个通道捕 获。 2触发 如果是用的普通的计时器例如古董51的话,计时器清零的步骤就可以在上升沿中断的时候 手动清零,不过STM8 的TIM1有个复位触发模式很适用: 计数器开始依据内部时钟计数,然后正常计数直到TI1 出现一个上升沿;此时,计数器被清 零然后从0重新开始计数。同时,触发标志(TIM1_SR1寄存器 的TIF位)被置位,如果使能 了中断(TIM1_IER寄存器的TIE位),则产生一个中断请求。下图显示当自动重装载寄存器 TIMx_ARR=0x36时的动作。在TI1上升沿和计数器的实际复位之间的延时取决于TI1输入端 的重同步电路。 (原文件名:2.jpg) 三 寄存器 1配置信号输入路径 点击手册目录 从TIM1寄存器描述的目录中找 输入捕获相关的寄存器。 这里发现有4个CCMRx正好和框图中四个TIM输入通道对应上了。通过介绍了解 位 1:0 是用来控制信号输入路径的。 我的实验板上信号输入的引脚是TH2,那么就该把TH2分成两路分别连接到TIM1的 两个通道上(IC1,IC2) TIM1-CCMR1 |=0x02;//ch1到ti2fp1 TIM1-CCMR2 |=0x01;//ch1到ti2fp1 2设置捕获极性 信号已经连到IC1IC2了,那么下一步就该对IC1IC2进行配置了。顺着目录往下看跟捕获 相关的寄存器还有CCERx 通过阅读描述了解该为可控制ICx的捕获边沿极性和使能。 实验中的配置如下 TIM1-CCER1 |=0x13;//使能输入捕获ti2fp1 ti2fp2 ti2fp1下降沿捕获 ti2fp2上升 沿捕获 3触发模式 从模式控制寄存器SMCR 中可选择复位模式和 触发源 TIM1-SMCR |=0X64;//选源触发源 ti2fp2 触发方式 复位模式 最后使能下中断配置就大功搞成咯 TIM1-IER |=0x06;//使能中断ch1 ch2 四 测试程序 STVD 将PWM波注入CH2引脚。在中断返回前设置断点,然后进行仿真, 将IC2Value,IC1Value;放入watch窗口观察。 void TIME1_INIT(void) { TIM1_DeInit(); //时基单元 //时钟触发控制器 TIM1-SMCR |=0X64;//选源触发源 ti2fp2 和触发方式 复位 //捕获 比较 TIM1-CCMR1 |=0x02;//ch1到ti2fp1 TIM1-CCMR2 |=0x01;//ch1到ti2fp1 TIM1-CCER1 |=0x13;//使能输入捕获ti2fp1 ti2fp2 ti2fp1下降升沿 ti2fp2上升沿 //中断 TIM1-IER |=0x06;//使能中断ch1 ch2 TIM1_Cmd(ENABLE); } void main(void) { TIME1_INIT(); // 定时器1 输入捕获初始化 enableInterrupts(); // 开总中断 while(1); } 中断函数 extern unsigned int IC2Value,IC1Value; @near @interrupt void TIM1_CAP_COM_IRQHandler (void) { if(TIM1_GetITStatus(TIM1_IT_CC1)) { IC1Valu

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档