gpt4 book ai didi

c - 从红外传感器获取中断

转载 作者:太空宇宙 更新时间:2023-11-04 02:51:23 25 4
gpt4 key购买 nike

我在从 IR 传感器获得正确中断时遇到问题。实际上有两个问题:

  • 我一次收到多个中断(这意味着如果我打断光束,中断会被触发不止一次)
  • 每次我在 IR 光束前放置一些东西(这是正确的)并且每次我移除那个障碍物(这不应该发生)时我都会被打断。

原理图如下(只是接收器):enter image description here

代码是用C写的,用GCC编译的,我用的是AVR Atmega644:

sei();
/* Enable interrupts. */
EIMSK &= ~((1 << INT1) | (1 << INT0));
EICRA |= ((1 << ISC11) | (1 << ISC10) | (1 << ISC01) | (1 << ISC00)); /* Trigger on rising edge */
EIFR |= ((1 << INTF1) | (1 << INTF0));
EIMSK |= ((1 << INT1) | (1 << INT0));
DDRD &= ~((1 << PD2) | (1 << PD3));
PORTD |= ((1 << PD2) | (1 << PD3));

对于 ISR,我使用: ISR(INT0_vect) ISR(INT1_vect)

这背后的想法应该是这样的:

  • 当红外光束关闭时,此红外传感器输出为高电平,而当光束断开时变为低电平。
  • 当梁关闭时,电容器应通过 R2 放电。
  • 当光束断开时,电容器开始通过 R1(R1 用于设置充电时间)、R6 和 R2 充电。
  • 当电容器上的电压超过 ~3.4V 时,比较器的输出变为高电平,从而在 AVR 上产生中断。
  • 类似地,当电容器上的电压低于 ~3.4V 时,比较器的输出变为低电平。

根据我的计算,将电容器从 0V 充电到 3.41V 的时间为 1-10ms(取决于 R1),因此这是应该断开光束以产生中断的时间。将电容器从 4.9V 放电到 3.41V 的时间是 ~ 1ms(比较器输出变为低电平),到 0.2V ~7ms。

感谢您的帮助!

最佳答案

我认为您需要将“比较器”替换为“具有迟滞的比较器”。当您的电容器处于 3.4 V 时,比较器将在 LOW 和 HIGH 之间振荡,因为您有 3.4 V 和噪声,电压可以是 3.36,在 3.45 和 3.38 之后。

你可以读一下http://www.analog.com/library/analogdialogue/archives/34-07/comparators/

关于c - 从红外传感器获取中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21812560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com