news 2026/7/10 13:41:06

STC32G 采集150kHz 信号并测量幅度

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
STC32G 采集150kHz 信号并测量幅度

简 介:本文介绍了STC32G单片机使用外部25MHz晶振进行导航信号采集的实验。通过外部150kHz交流信号耦合到单片机ADC通道,测试了不同ADC时钟分频系数(0-7)下的信号采集效果。实验采集了128组ADC数据,分析发现分频系数为2时(三分频)信号波形最完整,处于欠采样状态。文中提供了完整的Python数据处理代码,用于分析采集到的256个ADC数据点,并绘制信号波形图。结果表明合理设置ADC时钟分频可优化信号采集精度。

关键词STC32GDMAADC

  • STC32G12 使用外部晶振
  • 带有两级放大的导航信号采集电路板

AD\Test\2025\December\TestOSC25MHzSTC32GTSSOP20.SchDoc
C51\STC\Test\2025\December\TestOSC32G12TSSOP20\TestOSC25M32G12TSSOP20.uvproj

01航信号采集


一、背景

上午制作了 STC32G 单片机采样电路板。 单片机使用外部的 25MHz的晶体时钟, 提高了采样频率的精度。 外部的 150kHz 的交流信号通过工字型电感耦合到 单片机的 ADC 0 通道。 下面, 分别设置 单片机 ADC时钟的不同分频频率, 分别在每个频率下采集 128 条 ADC数据。 然后通过实验, 找到计算信号幅度最优的方法。 使得所获得到的信号幅度噪声最小。

二、采集信号

通过编程, 使用 ISP 软件发送串口命令, 可以获得 单片机采集到的 ADC的数据。 在接收到的数据中, 后面四个数据中包括有平均值。 前面 512个字节, 对应 256个ADC数据。

在ADC时钟分频系数为0的时候, DMA 采集到 256个数据对应信号波形。 可以看到数据在开始的时候幅度略大, 后面降低了一些。 将ADC时钟分频设置为1, 采集到的信号波形,同样,可以看到开始的时候波形幅度高, 随后信号采集到的幅值降低了。 分频系数为2, 对应的三分频。 此时应该是处在欠采样状态。 信号波形比较完整。 分撇系数为3, 分频系数为4, 分频系数为5, 分频系数为6, 最后一个是分频系数为7, 对应的采样频率比分频系数为 0 时降低了8倍。

▲ 图1.2.1 ADC时钟分频系数:0

▲ 图1.2.2 ADC时钟分频系数:1

▲ 图1.2.3 ADC时钟分频系数:2

▲ 图1.2.4 ADC时钟分频系数:3

▲ 图1.2.5 ADC时钟分频系数:4

▲ 图1.2.6 ADC时钟分频系数:5

▲ 图1.2.7 ADC时钟分频系数:6

▲ 图1.2.8 ADC时钟分频系数:7
#!/usr/local/bin/python# -*- coding: gbk -*-#============================================================# TEST1.PY -- by Dr. ZhuoQing 2025-12-14## Note:#============================================================fromheadmimport*fromtsmodule.tsstm32import*defgetdata():ispclearreceive()ispsend()time.sleep(.5)ispcopyreceive()time.sleep(.25)strall=clipboard.paste().split("\r\n")data=[]forsinstrall:iflen(s)<20:continuess=s.split(" ")forsssinss:iflen(sss)!=2:continuedata.append(int(sss,16))return[a*256+bfora,b,inzip(data[:-1:2],data[1::2])]#------------------------------------------------------------ddim=[]foriinrange(128):d=getdata()ddim.append(d[:256])printf(i)tspsave("sample7",ddim=ddim)#------------------------------------------------------------printf(d,len(d))plt.plot(d[:256],lw=3)plt.xlabel("N",color="steelblue",fontsize=24)plt.ylabel("ADC",color="steelblue",fontsize=24)plt.grid(True,which='both',linestyle='--',alpha=0.7)plt.tight_layout()plt.show()#------------------------------------------------------------# END OF FILE : TEST1.PY#============================================================
#!/usr/local/bin/python# -*- coding: gbk -*-#============================================================# TEST3.PY -- by Dr. ZhuoQing 2025-12-14## Note:#============================================================fromheadmimport*ddim=tspload('sample1','ddim')fordinddim:plt.clf()plt.plot(d,lw=3)plt.xlabel("N",color="steelblue",fontsize=24)plt.ylabel("ADC",color="steelblue",fontsize=24)plt.grid(False)plt.tight_layout()plt.draw()plt.pause(.1)pltgif.append(plt)pltgif.save()#------------------------------------------------------------# END OF FILE : TEST3.PY#============================================================

结 ※


文使用 STC32G 单片机采集 150kHz的导航信号。 STC32G的时钟采用了外部25MHz 晶体时钟。 这样可以保证采集信号时钟精度。 对于 ADC 时钟分频系数进行不同的设定, 寻找一个更好的分频系数用于数据的采集。 采集到的数据出现开始较大, 然后衰减的情况。 这种情况根据分析。 应该是 LC 谐振回路的信号, 受到单片机 ADC 输入阻抗的影响, 在采集信号的时候, 输入电阻变小, 进而使得LC谐振回路中的信号也会变小。 在实际数据电路设计的时候, 应该使用高频运放对 LC 回路信号缓冲之后, 再输入单片机ADC通道进行采集。

#!/usr/local/bin/python# -*- coding: gbk -*-#============================================================# TEST2.PY -- by Dr. ZhuoQing 2025-12-14## Note:#============================================================fromheadmimport*ddim=tspload('sample2','ddim')printf(shape(ddim))fordinddim:plt.plot(d)plt.xlabel("N",color="steelblue",fontsize=24)plt.ylabel("ADC",color="steelblue",fontsize=24)plt.grid(True,which='both',linestyle='--',alpha=0.7)plt.tight_layout()plt.show()#------------------------------------------------------------# END OF FILE : TEST2.PY#============================================================


■ 相关文献链接:

  • STC32G12 使用外部晶振-CSDN博客
  • 带有两级放大的导航信号采集电路板

● 相关图表链接:

  • 图1.2.1 ADC时钟分频系数:0
  • 图1.2.2 ADC时钟分频系数:1
  • 图1.2.3 ADC时钟分频系数:2
  • 图1.2.4 ADC时钟分频系数:3
  • 图1.2.5 ADC时钟分频系数:4
  • 图1.2.6 ADC时钟分频系数:5
  • 图1.2.7 ADC时钟分频系数:6
  • 图1.2.8 ADC时钟分频系数:7
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 13:27:06

【血压计算】基于matlab从光电容积脉搏波(PPG)和心电图(ECG)信号中提取的多种特征,推导血压测量值附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知,完整Matlab代码获取及仿…

作者头像 李华
网站建设 2026/7/10 11:06:40

学习记录(二十五)-Cursor的pro计划+云服务器使用常识

目录 前言 一、如何跳过Cursor的7天免费计划&#xff1f; 二、升级完成后&#xff0c;出现地区不匹配怎么办&#xff1f; 三、云服务器一些基本常识 总结 前言 感谢同学的资助&#xff0c;在我急需的时候让我用上了Cursor的pro版本。不过记录一下在充值和使用过程中遇到的…

作者头像 李华
网站建设 2026/7/9 21:42:37

代码克隆检测的挑战与AI的机遇

代码克隆检测是软件测试中的重要环节&#xff0c;涉及识别代码库中的相似或重复片段。传统方法如基于文本、令牌或抽象语法树&#xff08;AST&#xff09;的匹配&#xff0c;虽有一定效果&#xff0c;但常面临高误报率、难以检测语义克隆&#xff08;功能相似但结构不同&#x…

作者头像 李华
网站建设 2026/7/10 12:07:54

35、RAID 系统迁移与管理全攻略

RAID 系统迁移与管理全攻略 1. RAID 基础管理 在 RAID 系统中,如果需要更换磁盘,可按以下步骤操作: - 用新磁盘替换旧磁盘,并对新磁盘进行分区。要确保新分区的大小等于或大于 RAID 阵列中其他分区。 - 新分区准备好后,使用 --add 命令将其添加到阵列: $ sudo md…

作者头像 李华
网站建设 2026/7/9 19:27:31

37、构建高可用Linux集群:Heartbeat实战指南

构建高可用Linux集群:Heartbeat实战指南 在服务器运行过程中,即使主机配备了RAID和以太网绑定,仍有许多组件可能出现故障,从CPU到主机上的软件都有可能。若要确保服务在主机故障时仍能正常运行,就需要构建集群。本文将介绍基本Linux集群中常用的工具Heartbeat,并详细说明…

作者头像 李华
网站建设 2026/7/10 12:06:01

38、构建高可用集群:Heartbeat与DRBD实战指南

构建高可用集群:Heartbeat与DRBD实战指南 1. 集群准备与Heartbeat简介 在集群搭建过程中,当完成故障转移(fail back)相关操作后,集群就可以进行剩余的测试,适当调整超时设置,随后便可投入实际使用。之前的示例为搭建自己的集群服务提供了一个良好的开端,但它并未涵盖…

作者头像 李华