ADC-10-F103C 板子

之前介绍过几期经典 ADC 芯片,这让我想到 MCU 中也有 ADC,在这个系列中应该要提一下它们的存在。

碰巧我手上有一块 ADC-10-F103C,由 STM32F103C8T6 + CH340 组成,是一个以 USB 作为卖点的 ADC 板子:

图1 ADC-10-F103C 正反面

图1 ADC-10-F103C 正反面

大体情况如下:

  • ADC 性能:这颗 STM32 内置的 ADC 是 12 bit,动态范围 0 至 Vdd,分辨率 806 μV(Vref = 3.3V),转换速率在 μs 级别。
  • USB 接口:板载南京沁恒出品的串口转 USB 芯片 CH340 。
  • 硬件设计:STM32 串行输出 ADC 的结果,由 CH340 转成串口 USB,在 PC 上读取显示。
  • 上位机软件:PC 上能读取串口 USB 的软件很多,其中还有一些能够描绘波形。
  • 嵌入式程序:板子内置嵌入式程序,无需开发即可以使用。当然,某宝卖家也提供源代码、原理图等资料。
  • 销售价格:板载的两颗器件很便宜,附加值在于硬件组合和嵌入式程序,销售价格在二三十元不等。

下面,让我们尝试一下它的使用效果。

使用效果

首先,将输入端 CH0、CH1 分别短接到 GND 与 3.3V 进行测试,其他输入端悬空:

图2 CH0、CH1分别连接 GND 与 3.3V

图2 CH0、CH1分别连接 GND 与 3.3V

在 PC 端打开串口 USB 调试工具,我用的是 Moserial,波特率设置为 115200 bps。

录了一下屏,可以看到串口数据在不断更新:

图3 ADC USB 更新串口数据

图3 ADC USB 更新串口数据

定格其中一个画面如下:

图4 一次 ADC USB 的串口数据

图4 一次 ADC USB 的串口数据

可以看到,CH0、CH1 读取到的数据,接近真实的 0V 和 3.3V。

STM32F103 中的 ADC

STM32F103C8T6 (同 STM32F103xx)中的 ADC 基于 SAR(Successive-approximation,逐次逼近寄存器)原理,内部有很多开关电容,使用二分算法给电容充放电,生成量化数值与输入信号进行比较。

随着二分算法运行,每次新生成的量化数值与输入信号更接近,直到转换完成,寄存器中存储了最后的二进制代码作为量化结果,图示如下:

图5 SAR ADC 中的开关电容与输入信号进行比较

图5 SAR ADC 中的开关电容与输入信号进行比较,来源 [2]

我看 Datasheet 中对 ADC 描述,强调了 Clock 的部分:

图6 STM32F103xx Clock Tree

图6 STM32F103xx Clock Tree,来源 [1]

图7 STM32F103xx ADC 特性

图7 STM32F103xx ADC 特性,来源 [1]

其中:

  • ADC 的 Clock fADC 由 AHB、APB2 分频而来,fADC 最大值是 14 MHz;
  • Sampling time:采样周期,主要是电容充放电的时间,在上图表格里为 1.5 至 239.5 个 fADC Clocks;
  • Conversion time:转换周期,固定为 12.5 个 fADC Clocks;
  • Total conversion time:将上述两个周期相加,所以采样+转换的总周期范围是 14 至 252 个 fADC Clocks;

如果 fADC 为 14 MHz,计算频率对应的时间,则可以求得表格里以 μs 计时的指标。

STM32F103C8T6 中有两个这样的 ADC,每个能连接 16 个模拟输入引脚,支持多种触发模式(轮询、单次)、DMA 等。

至于嵌入式程序,核心是将 ADC 的结果乘以 LSB(Least Significant Bit),得到测量的电压信号。片段如下, ADC 的 LSB = 3.3 / 4096,其中 3.3 是参考电压,4096 是 12 bit 分辨率:

1
float inputVoltage = ((float) analogVal) * 3.3 / 4096

我觉得可能因为是一个 MCU 的 Datasheet,对 ADC 描述比较简单,如果要看 ST 更详细的 ADC 参考设计,可以阅读 ST 的应用笔记 AN2834,详见 [2]。

STM32F103 扩展阅读

话说 STM32F103 是意法半导体(ST)推出的一款非常成功的 MCU,风靡创客界。

老外甚至把 STM32F103CBT6 最小系统称之为“Blue Pills”(蓝药片),这个梗来自于电影 Matrix 台词 “You take the blue pill the story ends, you wake up in your bed and believe whatever you want to believe.”,寓意是能解万千忧愁。

后来,STM32F103 的克隆/兼容芯片太多,以至于蓝药片上的 ST 芯片真假难辨,市场上又有了 STM32F401/F411 最小系统,它们的克隆/兼容芯片相对少一点,称之为“Black Pill”(黑药片)。

你应该见过这两款板子吧?

图8 STM32 的 Blue Pill 与 Black Pill

图8 STM32 的 Blue Pill 与 Black Pill,来源 [3]

其中,STM32F401/F411 是 Cortex M4 内核,STM32F103 是 Cortex M3 内核,但 STM32F401/F411 只有 1 个 12 bit ADC,虽然 ADC 的速率更高一点。

我记得国内今越电子开发的袖珍 DIY 示波器 DSO132 / DSO138 / DSO150,用的就是 STM32F103 的 ADC,在高性能版本上也有用 GD32F303,一度很受欢迎:

图9 今越电子 DSO 系列 DIY 示波器

图9 今越电子 DSO 系列 DIY 示波器,来源 [4]

能用这么低成本的 MCU 做示波器,应该挺有意思,有机会我们深入了解一下。

上位机软件

说回 ADC-10-F103C ,既然板子能通过 USB 连接 PC,那么上位机软件就非常关键。

我在图3 和 图4 里用的是一个普通的串口调试工具,每次只能显示一组新的串口数据。

如果能将串口数据绘制成波形就好了。

我记得 Arduino IDE 里的 Serial plotter 就有这种功能,还看到有人用 Processing IDE 将从串口 USB 而来的心电数据绘制成波形(详见 [5]),不过这些多多少少需要一些开发调试工作。

又经过一番检索,我发现 Github 上已经有人针对 ADC-10-F103C 做了上位机图形化软件,支持板载 10 个输入引脚选择、波形显示、缩放、和 csv 日志(详见 [6]):

图10 ADC-10-F103C 上位机软件

图10 ADC-10-F103C 上位机软件,来源 [6]

看着真不错,可惜只支持 Windows,我没地方试,推给各位兄弟。

与 DAQ 对比如何?

说到这里,不尽让我想到 NI 的 DAQ(Data Acquisition),即使是入门级的 DAQ 也要动则上千元:

图11 NI DAQ 设备

图11 NI DAQ 设备 [7]

图12 NI 入门级 DAQ USB-6001

图12 NI 入门级 DAQ USB-6001 [7]

对比几十元的 ADC-10-F103C,DAQ 同样连接到上位机,你说 DAQ 到底贵在哪里?

  • 是更高精度(分辨率)?更多通道数?测量更准确?
  • 还是 DAQ 设备经过各种认证,以及耐用性、可靠性、鲁棒性的测试?
  • 亦或者是能连接被广泛使用的上位机软件 LabVIEW?

所以,当你遇到数据采集的场景,是自己 DIY ,还是直接上 DAQ?

欢迎留言讨论呀。

参考资料

  1. STM32F103x8、STM32F103xB Datasheet: https://www.st.com/resource/en/datasheet/stm32f103c8.pdf
  2. ST AN2834 “How to optimize the ADC accuracy in the STM32 MCUs”: https://www.st.com/resource/en/application_note/an2834-how-to-get-the-best-adc-accuracy-in-stm32-microcontrollers-stmicroelectronics.pdf
  3. https://hackaday.com/2021/01/20/blue-pill-vs-black-pill-transitioning-from-stm32f103-to-stm32f411/
  4. https://www.jyetech.com/Products/LcdScope/e138.php
  5. https://github.com/Protocentral/protocentral_openview
  6. https://github.com/swharden/ADC-10-F103C
  7. https://www.ni.com/zh-cn/shop/data-acquisition/entry-level-usb-daq.html

欢迎关注我的微信公众号“疯狂的运放”,及时收到最新的推文。