-
\$\开始组\$ 任何旧的缓冲区都可以将噪声信号转换为高或低。施密特触发器可以做得更多。 \$\端组\$ – 赫斯 5月17日21:52 -
\$\开始组\$ 你能描述一下他们的额外好处吗? \$\端组\$ – 汤米95 5月17日22:05 -
\$\开始组\$ @Tommy95我无法理解你为什么要用10MHz通信。 传感器响应时间以秒为单位。 低速跑不是更好吗? \$\端组\$ – 卡萨德 5月19日16:32 -
\$\开始组\$ 我希望我能做到,Kaosad,但目前我有一个每隔2毫秒发生一次的重复计时器中断例程,持续1毫秒。我每隔2秒测量一次传感器,所以我有2000个1毫秒处理器时间的插槽来收集传感器数据,但通过spi,我不知道如何在这2000个插槽上划分任务。 请你对此有一些见解好吗? \$\端组\$ – 汤米95 5月19日22:23
3个答案
-
-
-
\$\开始组\$ @Tommy95我认为你无法在几微秒内完成所有传感器数据的计时。 即使在10 MHz时,您也可以在1微秒内传输10位。 您需要读取几个数据寄存器才能读取所有这些值,因此读取一个结果字节需要1.6us。 你不可能经常获得新数据。 例如,BSEC结果每3秒更新一次。 \$\端组\$ – 贾斯特姆 5月17日22:32 -
\$\开始组\$ 我仅每2秒触发一次测量。 我可能会把它增加到10秒。 信不信由你,在15兆赫的频率下,每两秒钟测量一次,BME680在30厘米的电缆上可靠工作。 虽然我可能可以使用10MHz,但我编辑了这篇文章 \$\端组\$ – 汤米95 5月17日22:34 -
5 \$\开始组\$ @Tommy95 All-micros可以处理相当数量的周期性进程,多任务(抢占式或其他方式)允许它们共存。 这实际上是所有的micro—即使它没有内置到硬件中,使用类似FreeRTOS的东西也可以提供您所需要的所有正常功能。 当你只需要每隔几秒钟运行一次时,没有理由把它塞进一个快速周期函数中——只需要给自己一个1的周期任务来运行它。 因此,没有理由这么快运行SPI。 典型的XY问题。 \$\端组\$ – 格雷厄姆 5月18日17:27
……为什么施密特触发器有助于与SPI通信,因为微处理器已经根据阈值将信号读取为高或低?
-
\$\开始组\$ 谢谢Justme。 传感器每两秒钟只触发一次,但与设备的数据交换时间必须只有几微秒,因为我的微处理器有另一个循环例程。 我已经在30厘米以上的15MHz频率下测试了BME680,它工作可靠,尽管数据表中提到了最大10MHz。 我现在想把它扩大到100万。 不幸的是,I2C不是一个解决方案,我使用的微处理器环境已知与I2C功能失调。 \$\端组\$ – 汤米95 5月17日22:32 -
\$\开始组\$ @Tommy95但你正在使它变得比需要的更复杂。你有整整2秒钟的时间从芯片传输新的数据,所以你不需要20兆赫。 而且,您不应该将总线超频超过10 MHz的最大值,也不需要。1 MHz可以花2秒钟读取数据。 您使用的I2C出现故障的处理器环境是什么? 即MCU品牌/型号/类型? \$\端组\$ – 贾斯特姆 5月17日22:35 -
\$\开始组\$ 谢谢你在我的案子上慷慨的花费时间,贾斯特米。 想象一下,我有一个使用计时器中断的例程,每2000us发生一次,持续1000us。 每两秒钟,我就决定用剩下的1000美元来收集这些环境数据,并触发下一次测量。 如果你有更好的方法,请分享,我找不到更好的了。 \$\端组\$ – 汤米95 5月17日22:43 -
\$\开始组\$ @Tommy95我不知道你的系统为什么会这样工作,计时器中断在1ms内做了什么,主代码在1ms里做了什么。但你实际上有2000个1ms的插槽,或者说50%的CPU时间可以用来处理从传感器获取数据,对吗? \$\端组\$ – 贾斯特姆 5月17日22:49 -
1 \$\开始组\$ 计时器isr应该像Arduino那样设置一个标志或记录刻度数。 然后,您可以安排和执行合作功能来完成各种任务。 由于您不会长时间占用中断,因此您可以像往常一样使用uart、spi、I2C等中断。 每个任务都会一直运行到完成,并且必须在1毫秒内完成。 了解有限状态机,以实现这样做的代码,而不会忘记它的位置。 I2C的设计特点是总线锁定。 像所有好的I2C实现一样,实现恢复超时。 \$\端组\$ – 卡特曼 5月19日3:31
-
\$\开始组\$ 谢谢Robin。最后,我在CLK、SS、MOSI和MISO两侧都设置了Schmitt触发器,因此共有8个缓冲区。 我用了一个在线计算器计算终端电阻值,对于28AWG,1米,它给了我100欧姆。 我想知道这个配置是否正确:“主”微处理器SCK引脚->施密特触发器->100欧姆终端电阻器->ESD二极管->D-SUB连接器引脚。 这是终端电阻器的正确位置吗? \$\端组\$ – 汤米95 5月19日13:32 -
1 \$\开始组\$ 静电放电二极管应尽可能靠近连接器。 串联终端应尽可能靠近驱动器输出引脚。 因此,对于sck、cs和mosi,它们位于MCU旁边的驱动程序入口。 对于MISO,串联终端应位于设备端(再次尽可能靠近驱动门输出)。 \$\端组\$ – 罗宾·伊登 5月19日18:07 -
1 \$\开始组\$ 附言:一旦你建造了它,我仍然会尝试在接收端用一个示波器来测量它。 你应该看到一个干净的上升和下降边缘。 您应该将spi时钟设置为100Khz左右,然后查找时钟边缘之间发生的任何转换,这些转换是由反射导致的,因此终止错误。 \$\端组\$ – 罗宾·伊登 5月19日18:16