freetech

用定时器做波形精准延时

0
阅读(3677)

历经多年发展,现在单片机的定时器已不像传统51那样只用于定时和计数了。一般会增加“输入捕获”和“输出比较”功能。下面以HCS08系列单片机为例,说明这2种功能的用法。

像“可控硅触发器”、“汽油机点火器”等都需要对输入波形做一个定周期延时后输出一个脉冲,传统做法是让输入信号产生一个中断,中断服务程序启动定时器开始计数,定时器中断服务程序通过IO口输出脉冲。这种做法要进2次中断服务程序,2次中断响应都有一定延时且有不确定性,只能说大体上能实现功能但不精准。

用HCS08的定时器“输入捕获”和“输出比较”功能可以将其精准化:让输入信号触发“输入捕获”,当输入信号跳变时会自动触发输入捕获把当前计数值存入TPMxCnV(x是定时器号,n是通道号),与此同时触发捕获中断,虽进中断有延时,但发生跳变的计数值已存入TPMxCnV,故中断响应延时不影响对输入时刻的采集。在中断服务程序中打开“输出比较”功能,根据“输入捕获”记下的计数值算出“输出比较”时的计数值,当该时刻到来时,硬件翻转引脚输出脉冲。“输出比较”时的计数值是完全根据“输入捕获”记下的计数值算出的,不受中断响应延迟影响。是很精准的实现方法,性能明显优于传统方法。

image

上图中,第2路上升沿延时2mS第1路出正脉冲,脉宽1mS。