• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

51单片机 让io口来发送一个1.5khz-2.5khz的脉

29a6a68f2eeac1b6 2019-11-22 浏览量:909
51单片机 让io口来发送一个1.5khz-2.5khz的脉冲,怎么来计算高低电平延迟的时间?
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
所有亮答 数量:8
  • 发送脉冲可以用单片机自带的PWM功能,也可以直接控制IO置一置零

    计算电平持续时间,一般都是使用定时器来控制,在定时器中断里计数,时间到了就在中断里进行置一置零的操作

  • 可以使用定时器,如果没有记错的话一般定时器的的最大值是65536,如果你要发送1.5kHz的波形,周期就是1/1.5K = 0.00067s = 0.67ms,定时50ms设定初始值为65536-50000,定时0.67ms的话就设定值为65536-670,定时器满足就装初值,IO口反转,持续输出就行了,2.5K同理

  • 1.5khz周期等于1除1500约等于0.000667,那么一个周期就是667微秒,比如高电平时间是x,那么多低电平时间就是667减x,2.5khz同理,定时时间可以用定时中断延时,

  • 这个你先要根据晶振等来确定最小计时周期时间(就是系统运行时基本时钟),再确定计数器最小时间T0,以此为标准开展后续计算。

    对具体需要输出的频率Y脉冲来说,其对应周期时间为Yt,则一个脉冲中高电平时间为Xt,其中Yt>Xt则低电平时间为Yt-Xt >0。如果Xt=Yt/2 ,则高低电平是相等的,如果Xt可以调整,其实就是一种PWM。

    Yt=1/Y

    根据 Yc=T0/Yt 就是单个周期计数器数量,则Xt对应的计数是Xc,有Yc>Xc。

    这里Xc其实是可以调整的,即PWM。


    因为51系统计数最大值为65535(16bit非负整数最大值),所以在计算中需要保证最大计数也不能超过这个值,否则需要引入其他处理,比如多级计数(相当于分频处理)——例如真实时间计数器计数2再触发上级计数器增加1。

    上面的计算公式是通用的,只是对个别需要频率如计算出可能值过大,需要运用多级计数来调整。

    此外高低电平的计数理论上是可调的,需要你确定根据需要确定是否可调,或者具体的比例。


  • 通过你的脉冲频率的倒数,计算每个脉冲的周期,从而确定一个周期的时间,按50% 占空比,周期的一半设置为定时器的定时时间,再定时器中断中,反转IO口

  • 可以用定时器来做延时,这样精度高些,差些就用delay

  • 如果对频率要求高的,可以用定时器中断,在中断里面进行IO翻转的操作,要求不高可以直接死等的方法

相关问题

问题达人换一批

51单片机 让io口来发送一个1.5khz-2.5khz的脉