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的数据实时输出。



附件列表

最新文章

  1. AJAX表单提交以及数据接收
  2. MSCRM 获取列表所选记录相关信息
  3. TokuDB调研文档
  4. 自己开发的csdn手机客户端
  5. 一个基于atomic的卖票测试
  6. Java Cardioid 心脏形曲线 (整理)
  7. 修改虚拟机linux硬盘的大小
  8. android requestDisallowInterceptTouchEvent用途
  9. 19.java.lang.NoClassDefFoundException
  10. 凤凰OS
  11. IOS 轻量级数据持久化 DataLite
  12. animation渐进实现点点点等待效果实例页面
  13. yii2.0单文件上传和多文件上传
  14. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-2
  15. vue.js权威指南 PDF
  16. C++学习笔记第二天:几个知识点
  17. Exception in thread "main" expected '<document start>', but found BlockMappingStart in 'reader', line 23, column 2: nimbus.host: "master"
  18. Scheme r5rs letrec的用法
  19. ThinkPHP部署在lnmp环境中碰到的问题
  20. 八个commit让你学会爬取京东商品信息

热门文章

  1. .Net 跨平台可移植类库PCL可用于任何平台包括Mono
  2. 领域驱动设计(DDD)部分核心概念的个人理解
  3. [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序
  4. 用“MEAN”技术栈开发web应用(三)用mongodb搭建数据库
  5. Mint linux 自定义上下文菜单实现ZIP压缩文件无乱码解压
  6. eclipse启动时报告错误:Java was started but returned exit code=-805306369
  7. OData的初步认识
  8. Qt5 Crash When Open File With QFileDialog
  9. Android开发学习之路-让注解帮你简化代码,彻底抛弃findViewById
  10. JavaScript易错点