找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

有没有什么方法可以使用单片机测量某信号初次到达时的脉冲宽度?

查看数: 220 | 评论数: 8 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2025-8-6 09:28

正文摘要:

本帖最后由 ziqidong 于 2025-8-6 09:29 编辑 场景如下:                     目标信号是一个近似的方波信号,周期为20ms,出现时间未 ...

回复

ID:1153607 发表于 2025-8-8 16:40
有一个极其简单的办法,52单片机,T0, T1计数器都有一个门控状态,将被测信号加到比如说 T0的控制门INT0 端上,TO设定为对内部时钟计数。于是一个周期过后T0的计数值就对应着输入脉冲的“正宽度时间”。如果想测量输入负脉冲宽度,将输入倒向后脉冲加到T1的控制门INT1 上,T1对内部时钟计数,于是就可以得到负脉冲宽度时间。 由于是单片机确定的硬件特性,基本没有软件的附加误差。
ID:401564 发表于 2025-8-7 13:05
先声明一个全局变量用来记录时间,再声明一个标志,用来判定启动还是停止
1,信号端口要使用中断,中断被触发之后,根据端口电平判断是上升还是下降,用来确定是启动还是停止
如果是启动,那就清除时间变量,并标志为启动
如果是停止,那就标志停止,在主程序中读取时间变量
2,写一个定时器中断,可以是500uS或者1mS,在中间中根据标志来对时间变量进行累加
这就可以了呀
ID:807591 发表于 2025-8-6 13:51
中断可以试试
ID:1121801 发表于 2025-8-6 13:39
这个相当于测量一个跳变信号的持续时间吧,用外部中断加定时器,时间会准确一点.测量出来的时间还要加上程序语句运行的时间,当然这个可以在程序中做较正.还有就是信号源的跳变是否在下降沿有坡度式下降,如果不是即时跳变,那么可能CPU没有那么快识别跳变过程,那样可能把跳变过程中的一段时间也加上了
ID:828160 发表于 2025-8-6 12:16
外部中断了解一下,你这种情况要使用双沿中断
ID:1133081 发表于 2025-8-6 11:18
试试外部中断(上升沿和下降沿)加定时器计数。
void INT0_Isr() interrupt 0
{
        if (P32)                    //判断上升沿和下降沿
        {
                TR0 = 0;                //关定时器
                tempL=TH0<<8|TL0;       //读取脉冲低电平持续时间
                TL0 = 0x00;                                //设置定时初始值
                TH0 = 0x00;                                //设置定时初始值
                TR0 = 1;                //开定时器
        }
        else
        {
                TR0 = 0;                //关定时器
                tempH=TH0<<8|TL0;       //读取脉冲高电平持续时间
                TL0 = 0x00;                                //设置定时初始值
                TH0 = 0x00;                                //设置定时初始值
                TR0 = 1;                //开定时器
        }
}
ID:1157301 发表于 2025-8-6 11:02
看不太懂,是有一个固定的方波A跟一个随机出现的信号B,然后要知道B出现时是在方波的什么相位跟宽度吗?如果是这样,用2根INT脚,一根量A一根量B,A出现时启动timer,直到B触发结束timer,应该比用while计时准确很多。
ID:1109793 发表于 2025-8-6 10:47
不是定时器可以设定为计数器受某个引脚控制码?

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表