【问题标题】:Problems interpreting a square wave解释方波的问题
【发布时间】:2016-07-12 15:30:12
【问题描述】:

我正在尝试使用 ESP8266 SoC 来读取据说会产生方波作为输出的水流传感器。我认为在中断模式下使用 GPIO 端口来计算上升沿转换是一件简单的事情——事实上,这最初似乎是可行的。然后我将固件从 0.96 升级到 1.5,它已经停止工作,当轮子旋转时我看不到任何过渡。

但是,如果我将一根电线连接到引脚 [对于我正在使用的 GPIO] 并立即将其触摸到 VCC,则会按预期调用中断例程,因此我知道传感器已连接到正确的引脚,并且中断例程已正确注册。我的代码:

function intCb(level)
    SpinCount = SpinCount + 1
    local levelString = "up"
    if level == gpio.HIGH then
        levelString = "down"
    end
    gpio.trig(pin, levelString, intCb)
end
gpio.write(pin, 0)
gpio.trig(pin, "up", intCb)
gpio.mode(pin, gpio.INT, gpio.FLOAT)

那么我错过了什么?我需要更多支持电路来读取方波作为输入吗?如果是这样,那么它最初是如何工作的?

【问题讨论】:

    标签: lua esp8266 nodemcu


    【解决方案1】:

    对于任何涉及硬件的事情,在 SO 上都很难给出明确的答案。在大多数情况下,它基于提示(有时是预感)。一些想法:

    • gpio.FLOAT 应该改为 gpio.PULLUP(除非您有外部上拉电阻)。
    • 您的设置似乎与例如使用按钮或开关触发某些事件。因此,您可能想要使用某种去抖动或节流功能。
    • 由于您似乎对上升沿下降沿都感兴趣(当您在updown 之间切换时)您不妨听一下both,不是吗?李>

    因此,假设我得出了正确的结论,类似以下 generic skeleton 的内容可能会被证明是有用的:

    -- inspired by https://github.com/hackhitchin/esp8266-co-uk/blob/master/tutorials/introduction-to-gpio-api.md
    -- and http://www.esp8266.com/viewtopic.php?f=24&t=4833&start=5#p29127
    local pin = 4    --> GPIO2
    
    function debounce (func)
        local last = 0
        local delay = 5000
    
        return function (...)
            local now = tmr.now()
            local delta = now - last
            -- if delta < 0 then delta = delta + 2147483647 end; proposed because of delta rolling over
            if delta < delay then return end;
    
            last = now
            return func(...)
        end
    end
    
    function onChange ()
        print('The pin value has changed to '..gpio.read(pin))
    end
    
    gpio.mode(pin, gpio.INT, gpio.PULLUP) -- see https://github.com/hackhitchin/esp8266-co-uk/pull/1
    gpio.trig(pin, 'both', debounce(onChange))
    

    【讨论】:

    • 感谢您的回复(如果允许我这么说的话),这很有趣,但我看到了相反的问题:根本没有事件。我尝试了上拉模式,没有变化。我正在阅读的东西说我需要一个“计时器”芯片。我以前用过LM555,但只是作为非稳态输出。最让我困惑的是,有时传感器实际上只与 gpio 一起工作。我从electrodragon 那里得到了传感器,附带的文档很少。我必须让这个工作,但我的想法不多了。
    • 您说传感器(和您的代码)在 NodeMCU 0.96 上运行良好。你有没有尝试过回去?
    • 我做到了,但有一些关于刻录新版本的问题使得很难回到旧版本,我正在制作新版本。 (顺便说一句,“两者”似乎根本不起作用。)
    【解决方案2】:

    我使用 555 定时器芯片作为施密特触发器解决了这个问题:

    【讨论】:

    • 很高兴你解决了这个问题。
    猜你喜欢
    • 2021-08-21
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    相关资源
    最近更新 更多