找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1511|回复: 5
收起左侧

单片机IO如何检测输入信号是高/低电平还是连续方波?

[复制链接]
ID:997026 发表于 2023-8-16 20:27 | 显示全部楼层 |阅读模式
大家好,


如标题,现在需要根据单片机IO口输入是高电平,低电平,还是方波,来决定另一个IO需要输出什么。

举例:
假设PA1口检测到输入高电平,则PA2输出低电-----A
PA1输入低电平,则PA2输出高电平----------B
PA1输入1Hz方波,则PA2输出5Hz方波---------C

如果只是检测PA1输入高低电平,则比较简单,现在加入了一个方波,感觉有点复杂了,不知道单片机代码怎么写了。
如果用外部中断来检测方波的上升沿或下降沿,好像也不行,因为上述由A变为B时,也会产生下降沿,这样就和C无法区分了。
如果来计数C中上升沿或下降沿的个数来确定是方波,如果计数两个,则要延时2s,PA2才会输出,延时太大了。

大家有没有比较好的思路?

谢谢


回复

使用道具 举报

ID:213173 发表于 2023-8-17 06:04 | 显示全部楼层
如果是占空比50%的方波,脉宽就是100ms。只要精度要求不太高,检测高/低电平时间大于100ms,就判断为持续高/低电平,小于或等于100ms 就判断为5Hz方波。
回复

使用道具 举报

ID:276663 发表于 2023-8-17 09:15 | 显示全部楼层
这就要牵扯到分辨率了,1Hz切换频率是500ms,PA2的反应速度最快也就是500ms,加上一些误差余量几个ms。使用定时器检测PA1的引脚电平,做个超时,如果当前电平超过502ms就认为是高电平或者低电平,控制PA2的输出。如果502ms以内切换了状态就认为是1Hz的信号,控制PA2输出5Hz信号。
回复

使用道具 举报

ID:123289 发表于 2023-8-17 09:55 | 显示全部楼层
1、给方波设个限(即定义一下),如频率至少为多少才认为是方波。比如高电平持续10秒是方波吗?20秒呢?你说它不是,可它每间隔30秒反转一次。40秒呢?……,这样就真的无界了。
你总要定义一个时间T,并认为IO持续时间T内无变化就是电平(不是方波)。
2、测量到IO的H/L后,不要急于下结论,继续测,当连续T时间内,H/L无变化,就下结论是电平。
3、如果发生了变化也不是立即下结论是电平,再多等一个T,这样在2T内,IO发生了H/L的重复变化,再下结论是方波。
当然,如果方波频率快,则用不了2T的时间,就可以依据H/L的周期变化下结论了。
总结:
对于电平变化,可以立即下结论;对于方波确认,至少需要等待方波的一个周期时间,才能下结认。
而且延迟(等待)时间越长,结论越准确。
回复

使用道具 举报

ID:123289 发表于 2023-8-17 09:57 | 显示全部楼层
如果需要立即知道是不是方波,就需要找个大仙,给它算一下命了。
回复

使用道具 举报

ID:1091455 发表于 2023-8-17 10:21 | 显示全部楼层
步骤1:设置IO口为输入上拉模式,读取IO口状态,假设用变量IO_State1记录此时IO口状态。
步骤2:设置IO口为输入下拉模式,读取IO口状态,假设用变量IO_State2记录此时IO口状态。
步骤3:根据IO_State1和IO_State2真值表判断IO口状态。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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