打印
[技术讨论]

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

[复制链接]
2316|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大家好,

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

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

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

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

谢谢

使用特权

评论回复
评论
xch 2023-8-17 09:07 回复TA
等新华社通稿 

相关帖子

沙发
昊430| | 2023-8-16 20:42 | 只看该作者
只能延时识别,给你一个现在是高电平,都不知道是A还是C,除非这个高低电平或者方波有什么规律,

使用特权

评论回复
板凳
tdh03z| | 2023-8-16 21:33 | 只看该作者
想啥呢,这么慢的方波频率,要正确识别,肯定会有延迟啊

使用特权

评论回复
地板
coody| | 2023-8-16 22:44 | 只看该作者
按一定速度采样,按产生5Hz方波的时间为基准,100ms检测一次,超过700ms没有跳变就是连续电平(高或低),有跳变就判断周期为1秒左右就是脉冲,100ms取反PA2就是5Hz方波。

使用特权

评论回复
5
zlf1208| | 2023-8-17 08:24 | 只看该作者
提高1Hz方波的频率,确保方波的高低电平的时间小于状态A或B

使用特权

评论回复
6
hjl2832| | 2023-8-17 08:59 | 只看该作者
定时器计时啊,数中断次数,不变就是高低电平变化,PWM会持续触发中断,这样记数值会累加。

使用特权

评论回复
7
xmar| | 2023-8-17 09:19 | 只看该作者

使用特权

评论回复
8
Unarty| | 2023-8-17 09:33 | 只看该作者
  必需先要识别出周期然后才能输出周期,这个肯定是延时的,但取反电平不需要延时啊, 打开一个定时器,开启边沿中断,中断中读取计数器的值,计算两次临近边沿的时间差。方波理论值是0.5s上下,如果是不是这个时间范围你就取反输出,如果是,就开启5HZ的输出,同时每输出2个半周期同步一次输入管脚状态是否变化,若变化继续输出,不变化则停止频率输出,状态取反,进入上一边沿触发检测状态。 理论上是最小延时输出了

使用特权

评论回复
9
apan| | 2023-8-17 10:08 | 只看该作者
利用中断边沿触发!

使用特权

评论回复
10
alienmiller| | 2023-8-17 11:58 | 只看该作者
定时器中断中读取 IO口,根据 读取的是高电平和低电平,来判断是持续高或低,以及上升沿或下降沿,同时具有上下沿的话就是方波。

使用特权

评论回复
11
天意无罪| | 2023-8-17 12:41 | 只看该作者
方波的话根据信号频率可以计算高低电平脉宽的,理论上就是根据脉宽来判断是稳态电平还是变化的波形,操作上可以:
(1)软件检测,当检测到IO为高或低电平信号后,延时一段时间在判断信号是否翻转;
(2)输入捕获定时器计时超时中断;
(3)中断模式下的边沿触发模式;

使用特权

评论回复
12
ayb_ice| | 2023-8-17 13:19 | 只看该作者
1S之内检测不到电平变化就是方波输出,否则是电平输出,

使用特权

评论回复
13
单片小菜| | 2023-8-17 13:53 | 只看该作者
边沿触发不就可以了吗?

使用特权

评论回复
14
gxs64| | 2023-8-17 19:22 | 只看该作者
窗口比较器+边沿触发中断

使用特权

评论回复
15
linxi6414| | 2023-8-17 19:46 | 只看该作者
设计这种变态的输出接口方式,工程师不是脑袋被门夹了,就是脑袋被驴踢了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

123

帖子

1

粉丝