STM8S208MB——TIM1输入捕获周期频率测量(中断方式)_第1页
STM8S208MB——TIM1输入捕获周期频率测量(中断方式)_第2页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STM8S208MBTIM1输入捕获之周期频率测量(中断方式)用查询标记的方式等待TIM1_SR1标记位,如果为0说明没有捕获到边沿;如果为1说明已经捕获到边沿信号,硬件产生中断,标记位置1,此时可以读取TIM1_CCR1,可以读取计数器的值。此方式效率很低,并且还有一个严重的弊端,如果外部没有信号输入时,软件会进入查询死循环一直等待,CPU不能处理任何事情,实际应用开发中基本用不上。经过几天的摸索,输入捕获采用中断的方式来测量频率可以完美解决上述问题,如果外部没有信号输入,软件进入main函数的大循环中运行,有信号时进入断处理。需要注意的是,输入引脚必须加上拉电阻,防止没有信号输入时,线路上

2、在的干扰信号造成测量到乱信号。以下是一个简易的车子时速测量程序,例如车轮里面有24个磁铁,一个霍尔传感器,传感器产生24个脉冲就是轮子转一圈,根据这个脉冲信号来测量车子的行驶时速,因此需要用上输入捕获频率测量。在磁铁的驱动下霍尔传感器产生的频率并不高,如果车轮周长为1米,采集到的输入信号频率是1KHz,那么时速就可以达到150km,这种情况很少见。车子慢速行驶时可能频率只有几个Hz可能试着计算下,24个脉冲(Hz)为轮子转一圈,1000Hz/24=41.7,但这是秒速,实际上这个值还要乘以轮子的周长再乘以3600秒才是时速。因为频率过低,如果计数器不配置预分频器基本测不到,因此配置寄存器时要特

3、别注意。Fmast频率为16MHz,假如TIM1计数器预分频值给800,这样TIM1的工作频率就是20000Hz,即计数器每秒走20000次,计数器的最大值0-65535,可以估算下,TIM1计数器走完65535差不多得3秒多的时间。这样看来,如果我们用复位触发模式,输入的信号周期为3秒或以下的是可以测量出来的,但是不可以太小,如果输入信号的周期时间小于1/20000Hz的话肯定测量不准确,需要注意的是,采样频率至少大于输入信号频率的四倍以上测量才可能更准确。以下程序在STM8S003F3,STM8S208MB上面测试正常运行。复位触发模式:复位触发模式是指,每捕获完一个周期,计数器自动清零,

4、这样避免了计数器溢出的问题影响测量精度。但是输入的信号周期时间仍然不可以大计数器的溢出时间。试想,输入信号第一个边沿正常从计数器的零开始,当计数器都溢出了第二个边沿还没有来这会是什么情况?此程序在主函数main中初始化InitRegst(),在大循环while中循环执行GetData()函数,变量“km”就是计算出来的结果,该变量为浮点型,保留了6位小数。#includeiostm8s208mb.hunsignedcharcow14;unsignedintA=0,B=0,AB=0;unsignedlongintfrnum;floattire=0.31;/轮子直径,单位米floatkm=0.0;

5、/公里数voidInitRegst()TIM1_CCMR1&=0x0F;/捕获/比较寄存器高4位清零TIM1_CCMR1|=OxO1;通道选择:IC1映射在TI1FP1上TIM1_CCER1|=OxO1;边沿极性选择:0x02下降沿捕获,0x01默认上升沿捕获TIM1_PSCRH=OxO3;/预分频寄存器,欲设置的值减1TIM1_PSCRL=0x1F;TIM1_SMCR|=0x54;/复位触发模式,TIM1_IER|=0x02;TIM1_CR1|=0x01;/使能计数器寄存器voidGetData()TIM1_CCR1L=0x00;TIM1_CCR1H=0x00;TIM1_CCER1|=0x0

6、1;/*voidShowDecimal()图个安心CCR1高8位与低8位清零。/使能捕获比较/数字字符化处理,液晶显示屏和数码管用unsignedinty,x=1000;unsignedchari=0;while(x)y=(u8)km/x)%10;x/=10;cow1i+=y+0;cow1i+1=0;*/中断向量#pragmavector=0x0EinterruptvoidTIM1_UPD_OVF_TRG_BRK_IRQHandler(void)staticu8cc_bz=0;if(cc_bz=0)/A=TIM1_CCR1H;/因为是用的复位触发模式,此2句可以省略/A=(A8)|TIM1_CCR1L;cc_bz=1;elseB=TIM1_CCR1H;第二次读取CCR1高8位与低8位的数值赋值给变量B,该寄存器复制计数器的值,一旦读取,该寄存器由硬件自动清零。B=(B8)|TIM1_CCR1L;TIM1_CCER1&=0xFE;AB=B-A;frnum=20000/AB;/禁止捕获比较/取前一次的计数值与后一次计数值的差/求输入信号的周期,周期的倒数就是频率,计数器默认16M经过800分频得到就是20000。km=frnum/24.0*(tire*3.14)*3600/1000;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论