微控制器 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 的异常干扰,以及传感器糟糕透顶的异常输出?

3285 次点击
所在节点    程序员
57 条回复
jiji9081
2022-04-03 18:33:46 +08:00
1. 既然做硬件了,就必须考虑各种意外损坏的情况,有条件的话强烈建议你用一套新的硬件测试一下。很可能在你调试的过程中,不小心因为静电或者接入高压干坏了 ADC 引脚。
2. 一定要确保各个模块之间可靠的共地。
3. 不是很清楚 XIAO 的驱动里,ADC 是怎么配置的,参考 XIAO 的 datasheet 878 页,Table 33-5. Reference Selection 。XIAO 的 brief 里说可以测 0-3.3V ,猜想是用 LDO 的 3.3V 作为基准( REFSEL=0x2 ),VDDANA 引脚直接接到 VCC ,GAIN 设置到 1/2 。这样的话对 VCC 的稳定度要求就很高了,看一下纹波的情况。有示波器拿示波器,没有示波器拿万用表调到交流电压档,电压应该是接近 0 。
Kinnice
2022-04-03 18:40:00 +08:00
换一个传感器
DataSheep
2022-04-03 19:02:18 +08:00
@ALLROBOT 抱歉没仔细看,现在懂了。所以你所说的数值是在 65536 分辨率下的?那么第一个问题完全正常,悬空是不确定的,可以通过配置下拉电阻解决悬空的问题。
第二个问题,可以先接单通道测试,把 ADC 引脚分别接高(3.3)和地检查数值是不是 65535 和 0 附近,去排除控制器 ADC 的问题。电源都已经使用充电宝了,另外 LDO 正常纹波很小,不会有影响,所以我认为电源的可能比较小,从更新的图上看也共地了,基本能排除电源的问题。那基本就是线路或者传感器的问题了。
另外还有就是可以用 ESP32 做 AD 读取试试,可以排除是不是传感器的问题。
Tink
2022-04-03 19:08:46 +08:00
@ALLROBOT 波特率是 115200 吧
ALLROBOT
2022-04-03 19:26:04 +08:00
@jiji9081 #21 @DataSheep #23
12Bit

16Bit


几小时前测试的,传感器应该有问题,传感器电源用 XIAO 的 3.3V 供电引脚,悬空状态一接传感器就一直高电平输出了。。。
ALLROBOT
2022-04-03 19:28:01 +08:00
@Tink #24 都是 500000 呀,MCU 每秒发送 1000 个 36 位字符,8N1 标准
yolee599
2022-04-03 19:29:39 +08:00
看你的描述传感器应该是通过 ADC 和 MCU 连接。先验证 MCU 的 ADC 是否正常,分别让 ADC 输入引脚对地和对对 VCC 短路,正常应该输出 0 和 1024 (不同 ADC 分辨率可能不同)。再用万用表测传感器的输出电压看是否正常。如果你传感器输出最高可达 5V ,但是你 MCU 工作电压是 3.3V ,那肯定不行
ALLROBOT
2022-04-03 19:31:32 +08:00
@ALLROBOT #25 第一张图发错了,引脚没接稳 3.3V 引脚输出 1500 ,接稳了输出 4000 多的
yolee599
2022-04-03 19:32:09 +08:00
另外 ADC 悬空测试的电压不准确的,都是噪声
ALLROBOT
2022-04-03 19:37:58 +08:00
@yolee599 #27 传感器输出量程是 0~3.0V 的😂,只是输入工作电压 3V~5V 的
ALLROBOT
2022-04-03 19:43:26 +08:00
@yolee599 #29 悬空状态,接收的值大概几百,没什么意义,姑且视为 0 吧

XIAO 的一个模拟引脚接传感器,数值就彪到万级别了,发张图体会一下
liuxu
2022-04-03 21:32:49 +08:00
@DataSheep ttl serial ,ttl 串口通信,玩板子常用的 cp2102 usb 转 ttl ,这种转换模块有速率上限,最高 115200
liuxu
2022-04-03 21:55:02 +08:00
@ALLROBOT 我建议还是直接用你那个 usb to ttl 的测试,用官方的 demo 测试,波特率 115200 ,转换器的 vcc,gnd,rx,tx 都链接好,测测电压没问题,然后再测试看看,都插好了重新上电测试,好几万的的数值应该不可能,或者是传感器接反了导致 u16 溢出?
ALLROBOT
2022-04-03 21:56:42 +08:00
@liuxu #32 USB 转 TTL 我只是用来接收的,不用 USB 转 TTL 的,这玩意的用途是看看 ESP32 收到的一串字符串是否有异常,没别的用途了

发下 Fritzing 电路图


只有三种电子设备,传感器,ADC 高分辨率转换器,无线发送设备

淘宝的电容已下单,但愿电容给力点,能让 3.3V 电源稳定输出吧!
ALLROBOT
2022-04-03 22:00:29 +08:00
@liuxu #33 不好意思,我没说清楚几万的数值是原始值经过一系列的函数转换来的

也就是说传感器一直是 4000 高电平输出的
DataSheep
2022-04-03 22:05:12 +08:00
@liuxu cp2102 有速率限制不假,但你知道 115200 有多低么,最高 115200 这芯片能卖得出去?况且这种通信怎么着也得有个帧检验吧,通信有问题显示不出来的。
DataSheep
2022-04-03 22:07:53 +08:00
@ALLROBOT 显然问题在传感器那边
liuxu
2022-04-03 22:22:27 +08:00
@DataSheep 其实这个话题没啥意义,arduino 这种低端设备用 115200 是非常通用的波特率,你会发现大量 arduino/avr/stm32 等低端 mcu 和 pc 做 usb 转换通信都是这个波特率

实际使用中,如果 pc 接收软件和 mcu 中的波特率没对上,能收到数据,但是会是错误的,字符串的话基本是乱码或间歇乱码,你可以实际操作尝试下看看



@ALLROBOT 我建议把 esp32 去掉,直接用传感器+arduino+usb to ttl ,然后用官方的 demo 验证一下传感器是不是坏了,拆开电路分模块测试
如果没问题就把传感器去掉,直接用 arduino 输出常量数据给 esp32 测试,看看 esp32 硬件有没有问题
ALLROBOT
2022-04-03 23:03:59 +08:00
@DataSheep #37 是的😂传感器或传感器的电源都有问题,我正在努力

刚才抽空拿电位器(变阻器)给 xiao 测量下,发现电位器接电池模块高电平输出,滑动变阻还是一样输出,如 31 楼 GIF 所示,换了开发板自带的供电引脚能正常输出了

虽然开发板的供电引脚用传感器还是不行,一样输出 0~4000 的随机原始值


@liuxu #38 xiao 和 ESP32 没问题的,刚测过这两模块的情况了,模拟引脚输出 GND:0,VCC:4095 的

我尽量想办法解决传感器的高电平输出
DataSheep
2022-04-03 23:08:27 +08:00
@liuxu 我操作算比较熟练,只是指出你其中的一些错误,第一 ttl 是电平标准,第二 cp2012 这种芯片的速率限制没那么低。115200 是一个很低的波特率只是相比 9600 要高不少,通用只是因为这个波特率通常情况下已经够用了,另外也有你说的原因,波特率越低传输越稳定。
但是仍需要看场合,你如果用过 esp32 的开发工具就知道,esp32 标配的 bootloader 默认使用 500000 传输固件。

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

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

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

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

© 2021 V2EX