微控制器 xiao 干扰波动大,以及传感器异常输出,怎么解决?
source link: https://www.v2ex.com/t/844717
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
之前没接触过硬件,我是这方面的菜鸟😥
问题描述:
-
未接传感器信号输出时,微控制器 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 条附言 · 1 天前
如果拔出 ADC pin 和 GND pin 的杜邦线,再插回去,就变成以下的情况
![]( )
第 2 条附言 · 1 天前
第 3 条附言 · 1 天前
第 4 条附言 · 1 天前
也就是说传感器一直是 4000 高电平输出的,不知道为啥
传感器用 MCU 自带的 3.3V 供电引脚,照样输出 4000 值,经函数转换后输出几万值的
zchzch1014 1 天前
2 、若无纹波影响,且串口发送一般没有问题,则需重点考虑主控 ADC 的问题。建议将 ADC 引脚接 GND 和 3.3V ,观测 ADC 的原始值是否与采集电压所对应,需观测 ADC 原始值,而非采样代码的输出值,可更好定位问题出在哪里。
Osk 1 天前
我无法提供太多帮助, 但可以帮后面回帖朋友的节约点时间:
- 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 1 天前
ALLROBOT 1 天前
zchzch1014 1 天前
BingoXuan 1 天前
ALLROBOT 1 天前
1. 做 ADC 采样是 XIAO 负责的,ESP32 只负责无线发送
2. 模拟引脚接 GND ,输出 0~20 之间的 XIAO 没问题
应该是我的代码问题,正在排查中
DataSheep 1 天前 via iPhone 1
是电源的问题就使用独立电源供电,并确保共地。也看不出来一个 xiao 一个 esp32 分别是干嘛的,采集一个 ad 挺简单的为啥看起来那么复杂。
另外面包板、杜邦线、usb2ttl 什么的你基本把 buff 叠满了,这种情况下不出问题才是小概率。
pengtdyd 1 天前
liuxu 1 天前
ghostxdy 1 天前
ALLROBOT 1 天前
DataSheep 1 天前 via iPhone
DataSheep 1 天前 via iPhone
杜邦线只能说是尽量不用,用的话就买贵一点的,这线质量参差不齐。
ALLROBOT 1 天前
jiji9081 1 天前 1
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 1 天前 via Android
DataSheep 1 天前 1
第二个问题,可以先接单通道测试,把 ADC 引脚分别接高(3.3)和地检查数值是不是 65535 和 0 附近,去排除控制器 ADC 的问题。电源都已经使用充电宝了,另外 LDO 正常纹波很小,不会有影响,所以我认为电源的可能比较小,从更新的图上看也共地了,基本能排除电源的问题。那基本就是线路或者传感器的问题了。
另外还有就是可以用 ESP32 做 AD 读取试试,可以排除是不是传感器的问题。
ALLROBOT 1 天前
yolee599 1 天前 via Android
yolee599 1 天前 via Android
liuxu 1 天前
ALLROBOT 1 天前
发下 Fritzing 电路图
只有三种电子设备,传感器,ADC 高分辨率转换器,无线发送设备
淘宝的电容已下单,但愿电容给力点,能让 3.3V 电源稳定输出吧!
DataSheep 1 天前 via iPhone
liuxu 1 天前
实际使用中,如果 pc 接收软件和 mcu 中的波特率没对上,能收到数据,但是会是错误的,字符串的话基本是乱码或间歇乱码,你可以实际操作尝试下看看
@ALLROBOT 我建议把 esp32 去掉,直接用传感器+arduino+usb to ttl ,然后用官方的 demo 验证一下传感器是不是坏了,拆开电路分模块测试
如果没问题就把传感器去掉,直接用 arduino 输出常量数据给 esp32 测试,看看 esp32 硬件有没有问题
ALLROBOT 1 天前
DataSheep 1 天前 via iPhone 1
但是仍需要看场合,你如果用过 esp32 的开发工具就知道,esp32 标配的 bootloader 默认使用 500000 传输固件。
liuxu 1 天前
单独说 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 频率问题,我的回复就到这了
DataSheep 1 天前 via iPhone
我自然知道 usb2ttl 是什么东西跟主控有没有关,我还知道图中的 xiao ,自己实现虚拟串口,esp32 是板载 2102 ,至于那个单独的模块,不管是 cp2102 、ch340 、ft232 还是别的,这三种中间的哪一种都不会最高只支持 115200 。
淘宝标最高 115200 只能说明老板不懂技术,这种常识问题还轮不到翻 datasheet 的程度。
有错误虚心学习就好了,没必要坚持自己错误的认知,我要是错了我也虚心学习,技术问题在能力范围内能弄明白就弄明白,什么回复到此为止,敢情我手机打那么多字白打?
DataSheep 1 天前 via iPhone
duke807 1 天前 via Android
我實際用過 50Mbps 的串口,用來跑 cdbus 協議
日常 linux 嵌入式板子使用 3Mbps 串口打印 log ,可以增加系統啟動速度,在不關閉 log 打印的情況下,使用常用的 ft232 usb 轉串口
liuxu 1 天前 via Android
liuxu 1 天前 via Android
嗯。。首先注明你是对的
之所以我说话题到此为止,不是对你的话题有什么意见,是因为 V2EX 经常出现 op 有问题发帖,最后演变成几个层主打架,op 看热闹的情况,就像现在
所以对于出现和 op 话题无关的话题点,我一般都是想及时制止
最后首先感谢你对我错误的知识进行了纠正,其次感谢你对我的技术态度进行了纠正,以后我会注意
如果对于我的回复让你有不好的情绪,这里十分抱歉
duke807 22 小时 49 分钟前 via Android
常用的 usb 轉串口 ft232 只能到 3Mbps
ft232h 帶 h 的能到 12Mbps ,不過它更多的是用來做 usb 轉 spi
我日常使用的 MCU 板子和 usb 轉 485 使用 cdbus 控制器,常用 10Mbps
duke807 22 小时 45 分钟前 via Android
ALLROBOT 22 小时 5 分钟前
算了,网上下个 EMG 训练集用吧
ALLROBOT 14 小时 16 分钟前
值正好 0~50😲
ALLROBOT 13 小时 55 分钟前
Cu635 12 小时 23 分钟前
根据 XIAO 所用的 ATSAMD218A-MU 手册,它 ADC16 位的分辨率是通过降低采样率得到的。
“用啥线比较好,杜邦线很多 Arduino 书籍都用它描述电路草图,我不大清楚有啥高质量的线”
@DataSheep 的意思不是杜邦线这个东西如何,而是不同厂家、不同批次的线质量差别太大……
不过“选用质量高一点的”,这话说的容易,实际做起来也只能挑选一个口碑高一点的店铺这种了。
@liuxu
并不是,115200 只不过是典型值里面最大的那个。
至于 cp2102 ,那个是 cp2102 的问题。我这边的 cp2102 ,用软件设定成 1500000 baud ,windows 下连接板子正常使用,在 linux 下的话就是短路自身的 tx 和 rx 收发都正常,连接到同一块板子上就是乱码了。应该还是因为 cp2102 芯片比较低端的缘故。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK