之前没接触过硬件,我是这方面的菜鸟😥
未接传感器信号输出时,微控制器 XIAO 输出数值 10~500 范围,如何排除干扰达到期望输出 0~30
?
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 的异常干扰,以及传感器糟糕透顶的异常输出?
1
zchzch1014 2022-04-03 14:22:15 +08:00
1 、若你接的是 TTL 转 USB 模块中 LDO 的输出电压(一般为模块的 3.3V 输出),则可排除电源纹波干扰,否则需考虑电源纹波;
2 、若无纹波影响,且串口发送一般没有问题,则需重点考虑主控 ADC 的问题。建议将 ADC 引脚接 GND 和 3.3V ,观测 ADC 的原始值是否与采集电压所对应,需观测 ADC 原始值,而非采样代码的输出值,可更好定位问题出在哪里。 |
2
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. |
3
lalalaqwer 2022-04-03 14:47:00 +08:00
你没外部输入的时候 adc 浮空,此时其值是不确定的,所以会在采集范围内波动,可以不用管。后面的采集信号的时候数据几万大概率是你代码有问题,你直接参照人模块的代码先调通 1 个再去弄 6 个的吧
|
4
ALLROBOT OP |
5
zchzch1014 2022-04-03 15:05:02 +08:00
@ALLROBOT #4 所以按我说的第 2 点操作一下,可以验证 ADC 模块是否工作正常呀。一般有问题都是逐步调试定位问题的,直接看最后输出确定不了问题。
|
6
BingoXuan 2022-04-03 15:16:12 +08:00
如果 mcu 是 usb 供电的,是不是先考虑一下你 usb 供电是不是稳定的。
|
7
ALLROBOT OP @zchzch1014 @Osk #2 感谢回复
1. 做 ADC 采样是 XIAO 负责的,ESP32 只负责无线发送 2. 模拟引脚接 GND ,输出 0~20 之间的 XIAO 没问题 应该是我的代码问题,正在排查中 |
8
DataSheep 2022-04-03 15:33:34 +08:00 via iPhone 1
你的问题如二楼所说根本没有描述得很清楚,那张图看不出来你的电路连接情况。
是电源的问题就使用独立电源供电,并确保共地。也看不出来一个 xiao 一个 esp32 分别是干嘛的,采集一个 ad 挺简单的为啥看起来那么复杂。 另外面包板、杜邦线、usb2ttl 什么的你基本把 buff 叠满了,这种情况下不出问题才是小概率。 |
9
pengtdyd 2022-04-03 15:38:59 +08:00
满头问号,软件和硬件代沟这么大吗,我完全懵逼
|
10
ALLROBOT OP @DataSheep #8 抱歉,我第一次搞硬件的,不知道应该避免哪些情况。。。我是直接拿《 arduino 程序设计基础》入门的
|
11
ALLROBOT OP |
12
liuxu 2022-04-03 16:22:11 +08:00
你确定你的波特率是 500000 ?啥设备这么屌
|
13
ghostxdy 2022-04-03 17:03:06 +08:00
遇事不决,加个电容,再不行多加一个下拉电阻
|
14
ALLROBOT OP |
15
liuxu 2022-04-03 17:39:23 +08:00
|
16
DataSheep 2022-04-03 18:17:23 +08:00 via iPhone
@liuxu ttl 是电平标准,跟速度没关系。。esp32 正常主频下最高支持 5mBaud ,500000 洒洒水。115200 只是比较常用,对于串口来说已经够高够用了而已。
|
17
DataSheep 2022-04-03 18:20:29 +08:00 via iPhone
@ALLROBOT 你先搞定电源,一定得共地,确保接线牢靠,然后用最小功能单元测试,我还是不明白为什么要用两块控制器。
杜邦线只能说是尽量不用,用的话就买贵一点的,这线质量参差不齐。 |
19
ALLROBOT OP @DataSheep #17 用啥线比较好,杜邦线很多 Arduino 书籍都用它描述电路草图,我不大清楚有啥高质量的线
|
20
ALLROBOT OP |
21
jiji9081 2022-04-03 18:33:46 +08:00 1
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 。 |
22
Kinnice 2022-04-03 18:40:00 +08:00 via Android
换一个传感器
|
23
DataSheep 2022-04-03 19:02:18 +08:00 1
@ALLROBOT 抱歉没仔细看,现在懂了。所以你所说的数值是在 65536 分辨率下的?那么第一个问题完全正常,悬空是不确定的,可以通过配置下拉电阻解决悬空的问题。
第二个问题,可以先接单通道测试,把 ADC 引脚分别接高(3.3)和地检查数值是不是 65535 和 0 附近,去排除控制器 ADC 的问题。电源都已经使用充电宝了,另外 LDO 正常纹波很小,不会有影响,所以我认为电源的可能比较小,从更新的图上看也共地了,基本能排除电源的问题。那基本就是线路或者传感器的问题了。 另外还有就是可以用 ESP32 做 AD 读取试试,可以排除是不是传感器的问题。 |
25
ALLROBOT OP |
27
yolee599 2022-04-03 19:29:39 +08:00 via Android
看你的描述传感器应该是通过 ADC 和 MCU 连接。先验证 MCU 的 ADC 是否正常,分别让 ADC 输入引脚对地和对对 VCC 短路,正常应该输出 0 和 1024 (不同 ADC 分辨率可能不同)。再用万用表测传感器的输出电压看是否正常。如果你传感器输出最高可达 5V ,但是你 MCU 工作电压是 3.3V ,那肯定不行
|
29
yolee599 2022-04-03 19:32:09 +08:00 via Android
另外 ADC 悬空测试的电压不准确的,都是噪声
|
31
ALLROBOT OP |
32
liuxu 2022-04-03 21:32:49 +08:00
@DataSheep ttl serial ,ttl 串口通信,玩板子常用的 cp2102 usb 转 ttl ,这种转换模块有速率上限,最高 115200
|
33
liuxu 2022-04-03 21:55:02 +08:00
@ALLROBOT 我建议还是直接用你那个 usb to ttl 的测试,用官方的 demo 测试,波特率 115200 ,转换器的 vcc,gnd,rx,tx 都链接好,测测电压没问题,然后再测试看看,都插好了重新上电测试,好几万的的数值应该不可能,或者是传感器接反了导致 u16 溢出?
|
34
ALLROBOT OP @liuxu #32 USB 转 TTL 我只是用来接收的,不用 USB 转 TTL 的,这玩意的用途是看看 ESP32 收到的一串字符串是否有异常,没别的用途了
发下 Fritzing 电路图 只有三种电子设备,传感器,ADC 高分辨率转换器,无线发送设备 淘宝的电容已下单,但愿电容给力点,能让 3.3V 电源稳定输出吧! |
35
ALLROBOT OP |
36
DataSheep 2022-04-03 22:05:12 +08:00 via iPhone
@liuxu cp2102 有速率限制不假,但你知道 115200 有多低么,最高 115200 这芯片能卖得出去?况且这种通信怎么着也得有个帧检验吧,通信有问题显示不出来的。
|
38
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 硬件有没有问题 |
39
ALLROBOT OP |
40
DataSheep 2022-04-03 23:08:27 +08:00 via iPhone 1
@liuxu 我操作算比较熟练,只是指出你其中的一些错误,第一 ttl 是电平标准,第二 cp2012 这种芯片的速率限制没那么低。115200 是一个很低的波特率只是相比 9600 要高不少,通用只是因为这个波特率通常情况下已经够用了,另外也有你说的原因,波特率越低传输越稳定。
但是仍需要看场合,你如果用过 esp32 的开发工具就知道,esp32 标配的 bootloader 默认使用 500000 传输固件。 |
41
liuxu 2022-04-04 01:15:24 +08:00
@DataSheep
单独说 ttl 当然是电平标准,但是在这个帖子里,由 OP 发的设备检测图里,ttl 是代表 usb to ttl 这个设备,我不是在做填空题,我是在回帖 cp2102 的 datasheet 和淘宝卖相关设备时会标明最高波特率是 115200 ,开头“Baud rates: 300 bps to 1 Mbps” ,https://www.silabs.com/documents/public/data-sheets/CP2102-9.pdf 你一说我还专门多看了下它的 datasheet ,如果想调整到 115200 以上确实可以,要额外安装的软件做特殊配置,并不是直接可以直接用,玩个 ardiuno 没必要超频吧,https://cubeatsystems.com/ifx-49/resources/datasheets/AN721.pdf esp32 不过 usb to ttl ,usb to ttl 是 arduino 和 pc 之间的设备( OP 的测试中) 这个话题没啥意义,不会对解决 OP 问题有啥帮助,对于 TTL 概念和 cp2102 频率问题,我的回复就到这了 |
42
DataSheep 2022-04-04 01:50:18 +08:00 via iPhone
@liuxu 真有意思,你从何得知 2102 默认最高 115200 ,但凡你去你所谓的店里买一个回来试试也不会有这样的认知。
我自然知道 usb2ttl 是什么东西跟主控有没有关,我还知道图中的 xiao ,自己实现虚拟串口,esp32 是板载 2102 ,至于那个单独的模块,不管是 cp2102 、ch340 、ft232 还是别的,这三种中间的哪一种都不会最高只支持 115200 。 淘宝标最高 115200 只能说明老板不懂技术,这种常识问题还轮不到翻 datasheet 的程度。 有错误虚心学习就好了,没必要坚持自己错误的认知,我要是错了我也虚心学习,技术问题在能力范围内能弄明白就弄明白,什么回复到此为止,敢情我手机打那么多字白打? |
43
DataSheep 2022-04-04 01:54:59 +08:00 via iPhone
@liuxu 你发的这些文档我也没必要去看,单从你回的 300 到 1mbps 就能看出来结果,难不成你连 1mbps 和 115200bps 也没分明白吗?那我真的是白打了,当我没说
|
44
duke807 2022-04-04 02:00:26 +08:00 via Android
@liuxu 了解一下,ti 和 analog 等大廠的 rs485 芯片 3.3v 版本最高可以支持 50Mbps ,5v 版本可以支持到 100Mbps
我實際用過 50Mbps 的串口,用來跑 cdbus 協議 日常 linux 嵌入式板子使用 3Mbps 串口打印 log ,可以增加系統啟動速度,在不關閉 log 打印的情況下,使用常用的 ft232 usb 轉串口 |
46
liuxu 2022-04-04 09:57:49 +08:00 via Android
@duke807 更好的芯片自然能支持更高的速率,cp2102 十几块,你说的 ft232 还是什么我以前也有一块,稍微贵一点,速率也也是用过
|
48
liuxu 2022-04-04 10:13:23 +08:00 via Android
@duke807 #44 多谢提醒,我以为的串口转 usb 一直以为只能低速,没想到能达到 100Mbps 了,以前学习时买的板子还是用的 9 针还是 15 针的下载器,说是速率因为线材长短还是什么原因最好用低速,不能设置太高
|
49
liuxu 2022-04-04 10:44:00 +08:00 via Android
@DataSheep #42
嗯。。首先注明你是对的 之所以我说话题到此为止,不是对你的话题有什么意见,是因为 V2EX 经常出现 op 有问题发帖,最后演变成几个层主打架,op 看热闹的情况,就像现在 所以对于出现和 op 话题无关的话题点,我一般都是想及时制止 最后首先感谢你对我错误的知识进行了纠正,其次感谢你对我的技术态度进行了纠正,以后我会注意 如果对于我的回复让你有不好的情绪,这里十分抱歉 |
50
duke807 2022-04-04 12:31:14 +08:00 via Android
串口转 usb 到不了 100Mbps
常用的 usb 轉串口 ft232 只能到 3Mbps ft232h 帶 h 的能到 12Mbps ,不過它更多的是用來做 usb 轉 spi 我日常使用的 MCU 板子和 usb 轉 485 使用 cdbus 控制器,常用 10Mbps |
51
duke807 2022-04-04 12:35:09 +08:00 via Android
@liuxu 9 針還是 15 針的說的應該是 rs232 ,rs232 速度快不了,來回轉換太多次,ttl 短距離使用可以快很多,想傳輸更遠,更抗干擾則用 rs485
|
52
ALLROBOT OP 真是日了狗,传感器厂商因为疫情管控,技术客服放假😅
算了,网上下个 EMG 训练集用吧 |
54
ALLROBOT OP |
55
ALLROBOT OP 等等,我不小心把 GND 接到 ADC 引脚了,当我没说 54 楼的话吧😂
|
56
Cu635 2022-04-04 22:57:11 +08:00
@ALLROBOT
根据 XIAO 所用的 ATSAMD218A-MU 手册,它 ADC16 位的分辨率是通过降低采样率得到的。 “用啥线比较好,杜邦线很多 Arduino 书籍都用它描述电路草图,我不大清楚有啥高质量的线” @DataSheep 的意思不是杜邦线这个东西如何,而是不同厂家、不同批次的线质量差别太大…… 不过“选用质量高一点的”,这话说的容易,实际做起来也只能挑选一个口碑高一点的店铺这种了。 @liuxu 并不是,115200 只不过是典型值里面最大的那个。 至于 cp2102 ,那个是 cp2102 的问题。我这边的 cp2102 ,用软件设定成 1500000 baud ,windows 下连接板子正常使用,在 linux 下的话就是短路自身的 tx 和 rx 收发都正常,连接到同一块板子上就是乱码了。应该还是因为 cp2102 芯片比较低端的缘故。 |