基于STM32Cube的ADC模数采样设计
2023-11-13 22:01:04
1.背景
此实验建立在STM32F429核心板基础上,对于深刻了解STM32Cube使用具有深刻意义。利用DMA进行ADC采样,具有速度快,极大减少CPU消耗的优势,对于数据采集系统具有很大的优势,特别是其单路2.4MSPS采样速度,三路组合可以达到惊人的7.2MSPS采样速度,对于一般应用均可满足。
2.STM32Cube配置
2.1 工程建立在前面均与简述,这里不做赘述,系统时钟180MHz。
2.2 ADC参数配置

Scan Conversion Mode 扫描模式,当使用多通道需要使能。
Continuous Conversion Mode 连续转化模式,当一路转化完成立马开始新一轮转化。
ADC的时钟触发有两种方式,一种是通过定时器等外部中断源触发,另一种是ADC自身的时钟触发。
这里选择Timer 3 Caputure Cpmpare 1 event 触发。

ADC通过DMA来实现数据采集,DMA Setting参数如上图所示。这里需要注意的是Memory需要自加 1,并且使用FIFO,采用半满阈值设置,为了做“乒乓”调度算法。因为ADC是12bit的,故采用Half Word。

开启DMA中断。
2.3 采样定时脉冲设置
因为ADC使用了Timer 3,所以需要对Timer 3 进行配置。如果ADC采用内部ADC时钟触发,则无需配 置。


这里采用频率设置为500KHz,定时器时钟为180/2=90MHz,9分频之后是10MHz,然后counter period 是20,采样周期10M/20=500KHz。
2.4 通过STM32Cube产生源码,使用MDK打开工程。
在大循环之前加入语句
uint16_t Samples_In[512]={0};
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)&Samples_In[0],512);
3. ADC效果验证
3.1 利用前述章节配置串口波特率115200,DMA发送使能。
3.2 在ADC的FIFO结束中断上,关闭ADC的DMA,使其不再工作,通过串口将ADC采集到的512组16进制数据发送到PC机上,利用串口调试助手将其保存到名为“test_sina.txt”的文件中;
3.3 打开matlab软件,新建.m文件,命名为“test_getdata.m”。
写入语句:
clc;clear;
sina =textread('test_sina.txt','%s')';%以字符形式打开文件
alpha = hex2dec(sina)'; %16进制转化为10进制数,存入alpha矩阵
len = (length(alpha(1,:))+1)/2;
%len = 511;
for i=1:1:len
s(1,i) = alpha(1,2*i-1)+alpha(1,2*i)*256;
end
x = 1:len;
plot(x,s);

信号发生器发生1KHz的正弦信号,通过MATLAB将ADC采集的数据还原如上图所示,是一个周期多一点点的正弦波。
理论计算:500KHz的采样率,采集1KHz的正弦信号,能够采集1个周期多一点点,跟MATLAB显示的一样。
为了更加形象显示图像,下节会使用DAC利用“乒乓”调度算法将ADC的数据实时输出。
附件列表
最新文章
- AJAX表单提交以及数据接收
- MSCRM 获取列表所选记录相关信息
- TokuDB调研文档
- 自己开发的csdn手机客户端
- 一个基于atomic的卖票测试
- Java Cardioid 心脏形曲线 (整理)
- 修改虚拟机linux硬盘的大小
- android requestDisallowInterceptTouchEvent用途
- 19.java.lang.NoClassDefFoundException
- 凤凰OS
- IOS 轻量级数据持久化 DataLite
- animation渐进实现点点点等待效果实例页面
- yii2.0单文件上传和多文件上传
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2
- vue.js权威指南 PDF
- C++学习笔记第二天:几个知识点
- Exception in thread ";main"; expected &#39;<;document start>;&#39;, but found BlockMappingStart in &#39;reader&#39;, line 23, column 2: nimbus.host: ";master";
- Scheme r5rs letrec的用法
- ThinkPHP部署在lnmp环境中碰到的问题
- 八个commit让你学会爬取京东商品信息
热门文章
- .Net 跨平台可移植类库PCL可用于任何平台包括Mono
- 领域驱动设计(DDD)部分核心概念的个人理解
- [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序
- 用“MEAN”技术栈开发web应用(三)用mongodb搭建数据库
- Mint linux 自定义上下文菜单实现ZIP压缩文件无乱码解压
- eclipse启动时报告错误:Java was started but returned exit code=-805306369
- OData的初步认识
- Qt5 Crash When Open File With QFileDialog
- Android开发学习之路-让注解帮你简化代码,彻底抛弃findViewById
- JavaScript易错点