微控制器 xiao 干扰波动大,以及传感器异常输出,怎么解决?

2022-04-03 13:52:29 +08:00
 ALLROBOT

之前没接触过硬件,我是这方面的菜鸟😥

问题描述:

  1. 未接传感器信号输出时,微控制器 XIAO 输出数值 10~500 范围,如何排除干扰达到期望输出 0~30

  2. XIAO 微控制器接传感器信号输出引脚时,干扰放大到几万数值异常输出,怎么解决?

详细描述:

未接传感器的输出:

微控制器接 ESP32 的 3.3V 供电引脚的,输出 20~400 ,我把 ESP32 的笔记本供电换为充电宝供电,问题照旧

排查

用数字万用表测量了下,ESP32 开发板的供电引脚大概 1.6~3.7V ,偶尔飙到 5V (可能是我正极负极探头没测准)

微控制器 XIAO 接 TTL 转 USB 的供电引脚,仍然是异常输出

传感器的异常输出

传感器电源接电池(3.3V ,1A 电流),传感器输出引脚接微控制器的各个模拟输入引脚,结果一下输出好几万的数值

排查

Seeeduino xiao 说明书提到模拟引脚可以接受 0~3.3V 的输入,没有说明电流上限多少,我尝试传感器的电源接开发板的供电引脚

结果老样子,看来和电流大小没关系...后面把传感器的信号输出线拔掉了,此时微控制器未接任何传感器的信号线....如上图所示

其它

问了店家,客服说这个不正常的,传感器应该输出 0~500 的值,如果传感器监测到电流则输出 300~400 ,未监测一般输出 0~30 范围

正常输出:

设备资料

XIAO 的 EMG 采样代码:https://gist.github.com/allrobot/c70abc599ca8eb7fbc246ed67515449a

传感器参数:https://www.yuque.com/cs/products/rwe87o

微控制器 XIAO 一般说明:https://wiki.seeedstudio.com/Seeeduino-XIAO/

微控制器 XIAO 说明手册:https://files.seeedstudio.com/wiki/Seeeduino-XIAO/res/ATSAMD21G18A-MU-Datasheet.pdf

ESP32 DEVKIT V1:https://circuits4you.com/2018/12/31/esp32-devkit-esp32-wroom-gpio-pinout/

请问怎么解决 XIAO 的异常干扰,以及传感器糟糕透顶的异常输出?

3066 次点击
所在节点    程序员
57 条回复
zchzch1014
2022-04-03 14:22:15 +08:00
1 、若你接的是 TTL 转 USB 模块中 LDO 的输出电压(一般为模块的 3.3V 输出),则可排除电源纹波干扰,否则需考虑电源纹波;

2 、若无纹波影响,且串口发送一般没有问题,则需重点考虑主控 ADC 的问题。建议将 ADC 引脚接 GND 和 3.3V ,观测 ADC 的原始值是否与采集电压所对应,需观测 ADC 原始值,而非采样代码的输出值,可更好定位问题出在哪里。
Osk
2022-04-03 14:40:36 +08:00
欢迎来到模拟电路这个不讲科学只讲玄学的世界 /狗头 /


我无法提供太多帮助, 但可以帮后面回帖朋友的节约点时间:
- op 的传感器模块输出 0-3.0 V 模拟量, 采集肌电信号放大后输出.
- op 的传感器模块供电 3.3-5 V/> 20 mA.

没看明白 op 到底用 seeeduino xiao 还是 esp32 在做 ADC 采集, 不过看起来使用的是 xiao, esp32 模块用来供电??
- xiao 的 ADC 规格: 12bit, 0-4095 输出值代表 0-3.3v(不清楚 op 几万的值是什么情况, 转换成了 mV 电压值?)
- 没看仔细代码, 个人很疑惑几万的数值是怎么处理出来的.
- xiao io 电平 3.3v.
- xiao 供电电路自带 5v-3.3v LDO.
- xiao 似乎需要一个 usb-ttl 模块来向计算机输出串口数据.



个人能给的建议:
最小化测试: 只使用 xiao + usb-ttl 调试最小单元, 供电先用 xiao 自己的 ldo, 也就是说 xiao 插 usb 上供电, 和 usb-ttl 间只连接 tx, rx, gnd.
测试 xiao 的 adc:
先将 adc 输入引脚接地, 直接串口打印 analogRead() 返回的原始值, 应该是 0 或者接近于 0. 如果不是, 有问题.
使用一个电位器: 两端接 gnd 和 3.3v, 活动端接 xiao adc 输入, 串口输出 analogRead 的值, 同时滑动电位器观察输出值范围和变化趋势是否正常.
然后, 接上传感器输出, 观察 analogRead 的值, 先暂时不用去搞一堆转换输出的函数, 避免干扰调试.



另外:
adc 输入脚悬空不接传感器, adc 读出值肯定是不停变化的, 因为收到了外部的干扰.

另外二:
In addition to the DAC, the SAMD21's ADC channels also stand apart from the ATmega328: they're equipped with up to 12-bit resolution. That means the analog input values can range from 0-4095, representing a voltage between 0 and 3.3V. To use the ADC's in 12-bit mode, make sure you call analogReadResolution(12) in your setup.
lalalaqwer
2022-04-03 14:47:00 +08:00
你没外部输入的时候 adc 浮空,此时其值是不确定的,所以会在采集范围内波动,可以不用管。后面的采集信号的时候数据几万大概率是你代码有问题,你直接参照人模块的代码先调通 1 个再去弄 6 个的吧
ALLROBOT
2022-04-03 14:47:08 +08:00
@zchzch1014 #1 十几天前我可以确保接 TTL 转 USB 的供电引脚,输出是 0~30 的,现在再接,就输出 0~400 了

zchzch1014
2022-04-03 15:05:02 +08:00
@ALLROBOT #4 所以按我说的第 2 点操作一下,可以验证 ADC 模块是否工作正常呀。一般有问题都是逐步调试定位问题的,直接看最后输出确定不了问题。
BingoXuan
2022-04-03 15:16:12 +08:00
如果 mcu 是 usb 供电的,是不是先考虑一下你 usb 供电是不是稳定的。
ALLROBOT
2022-04-03 15:28:10 +08:00
@zchzch1014 @Osk #2 感谢回复
1. 做 ADC 采样是 XIAO 负责的,ESP32 只负责无线发送
2. 模拟引脚接 GND ,输出 0~20 之间的 XIAO 没问题

应该是我的代码问题,正在排查中
DataSheep
2022-04-03 15:33:34 +08:00
你的问题如二楼所说根本没有描述得很清楚,那张图看不出来你的电路连接情况。
是电源的问题就使用独立电源供电,并确保共地。也看不出来一个 xiao 一个 esp32 分别是干嘛的,采集一个 ad 挺简单的为啥看起来那么复杂。

另外面包板、杜邦线、usb2ttl 什么的你基本把 buff 叠满了,这种情况下不出问题才是小概率。
pengtdyd
2022-04-03 15:38:59 +08:00
满头问号,软件和硬件代沟这么大吗,我完全懵逼
ALLROBOT
2022-04-03 15:41:28 +08:00
@DataSheep #8 抱歉,我第一次搞硬件的,不知道应该避免哪些情况。。。我是直接拿《 arduino 程序设计基础》入门的
ALLROBOT
2022-04-03 15:54:10 +08:00
@BingoXuan #6 USB 如何稳定输出直流电源?

不知道用什么电容来稳压的,兄弟萌推荐什么稳压模块可以解决?
liuxu
2022-04-03 16:22:11 +08:00
你确定你的波特率是 500000 ?啥设备这么屌
ghostxdy
2022-04-03 17:03:06 +08:00
遇事不决,加个电容,再不行多加一个下拉电阻
ALLROBOT
2022-04-03 17:31:10 +08:00
@liuxu #12 Seeeduino XIAO 和 ESP32 的硬串口波特率为 500000 。。。传输没啥丢包
@ghostxdy #13 我忘了我还有一个下拉电阻,我看看行不
liuxu
2022-04-03 17:39:23 +08:00
@ALLROBOT ttl 最大波特率 115200 。。。波特率不对会导致数据错乱

https://cnmat.berkeley.edu/content/ttl-serial
DataSheep
2022-04-03 18:17:23 +08:00
@liuxu ttl 是电平标准,跟速度没关系。。esp32 正常主频下最高支持 5mBaud ,500000 洒洒水。115200 只是比较常用,对于串口来说已经够高够用了而已。
DataSheep
2022-04-03 18:20:29 +08:00
@ALLROBOT 你先搞定电源,一定得共地,确保接线牢靠,然后用最小功能单元测试,我还是不明白为什么要用两块控制器。
杜邦线只能说是尽量不用,用的话就买贵一点的,这线质量参差不齐。
ALLROBOT
2022-04-03 18:20:30 +08:00
@liuxu #15 那可奇怪了,我调到 500000 没有出现数据错乱或神奇的乱码😂
ALLROBOT
2022-04-03 18:22:08 +08:00
@DataSheep #17 用啥线比较好,杜邦线很多 Arduino 书籍都用它描述电路草图,我不大清楚有啥高质量的线
ALLROBOT
2022-04-03 18:27:21 +08:00
@DataSheep #17 这里暂时没电容,我想办法搞好电源吧。。。

那个两个控制器,我只是需要 Seeeduino XIAO 的 16 位分辨率,通过 ESP32 把该数值发送到上位机而已....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/844717

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX