在进行占空比测量时,最简单的一种方案就是使用计数器半周期完成测量。支持的计数器需要有双边沿分离检测的特性,在实际工作中,通常32位宽的计数器都支持该测量。该方案通过预设半周期时间可以得到非常高精度的测量结果。在NI的采集板卡类型中,cDAQ 9174,9178有四个计数器,每个槽都可以使用计数器资源,而cDAQ-9172只有5槽和6槽可以使用计数器资源。对于带2个24位计数器的板卡来说,这种板卡一般不具有双边沿分离检测,工程师可以采用脉冲宽度测量的方式,分别测量高脉宽时间和低脉宽时间,从而计算占空比。
利用模拟采集测量
除了使用计数器来完成占空比测量之外,工程师也可以利用模拟采集来完成测量工作。该方案主要使用波形测量选板中的脉冲测量VI,可以根据周期性的采集数据计算占空比。要求模拟采集有足够高的采样率(5~10倍以上脉冲频率,根据占空比而定)才能获取足够的波形信息,来提高占空比测量精度。这种通过软件来计算占空比的方式处理速度相对而言比较一般。
利用FPGA完成测量
想要测量PWM波的占空比,工程师还可以利用FPGA来帮助自己完成测量工作。FPGA上有精确的40MHz时钟驱动的计数器资源,通过记录信号沿变化时刻的计数器值可以计算得到PWM波的脉宽和周期,从而计算出占空比。可使用程序即为FPGA占空比测量程序,实际调用时可将Digital In换成模块IO。
我觉得可以把PWM信号读入I/O口,定义两个变量,一个high表示高电平,一个low表示低电平,遇到第一个上升沿开始给high+1,遇到第一个下降沿给low+1,遇到第二个上升沿,则停止计数。统计high与low,就可以知道一个周期内,占空比。80S52没有硬件PWM功能,靠定时器中断很简单,只不过频率不能太高,或调
节精度比较差
下面是双定时器产生PWM主要语句:
TMOD=0X11
TH0=(65536-20000)/256//
定时20ms
TL0=(65536-20000)%256
TH1=(65536-b)/256//定时要小于20ms,改变b的值即改变占空比
TL1=(65536-b)%256
ET0=1
EA=1
TR0=1
PWM=1
b=2000
while(1)
void
timer0()interrupt
1
{
TH0=(65536-20000)/256
TL0=(65536-20000)%256
PWM=1
TR1=1
ET1=1
}
void
timer1()interrupt
3
{
TH1=(65536-b)/256
TL1=(65536-b)%256
PWM=0
TR1=0
ET1=0
}
定时器0中断负责每
20ms将管脚置
1,定时1负责在20ms之内的某一时间将该管脚清0
当然也可以采用自动重装方式,中断可以更频繁一些,产生的PWM频率要高一些
也可以只用一个定时器,这时产生PWM波要么频率低,要么调节精度差,因中断一次至少10US,你就不用指望一次调节步距10us以下了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)