GD32+ADC+DMA定时采集+acs712霍尔电流传感器

2023-10-27

GD32+ADC+DMA定时采集+acs712霍尔电流传感器

目的:本文使用定时器定时触发adc采样,并且通过dma搬运数据。

环境:KEIL

GD32F107vct6+ADC01_IN5(PA5)+TIMER3 CH3

时钟初始化

  rcu_periph_clock_enable(RCU_ADC0);
  rcu_periph_clock_enable(RCU_DMA0);
  rcu_periph_clock_enable(RCU_TIMER3);
  rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);

通过GD32F450+TIM定时器(1)可知,芯片使用外部晶振,时钟频率是108MHz。
在这里插入图片描述
在这里插入图片描述
APB2的频率= 108Mhz。

rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8) 初始化adc的时钟频率为13Mhz。

io初始化

 rcu_periph_clock_enable(RCU_GPIOA);
 rcu_periph_clock_enable(RCU_AF);//打开复用时钟
 gpio_init(GPIOA,GPIO_MODE_AIN,GPIO_OSPEED_50MHZ, GPIO_PIN_5);  

定时器初始化

  timer_parameter_struct initpara;
  timer_oc_parameter_struct ocpara;
  
  timer_deinit(TIMER3);
  initpara.alignedmode = TIMER_COUNTER_EDGE;
  initpara.clockdivision = TIMER_CKDIV_DIV1;
  initpara.counterdirection = TIMER_COUNTER_UP;
  initpara.period = SAMPLE_TIME;
  initpara.prescaler = 107;
  initpara.repetitioncounter = 0;
  timer_init(TIMER3,&initpara);
  
  ocpara.ocidlestate = TIMER_OC_IDLE_STATE_LOW;
  ocpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
  ocpara.ocnpolarity = TIMER_OCN_POLARITY_LOW;
  ocpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
  ocpara.outputnstate = TIMER_CCXN_DISABLE;
  ocpara.outputstate = TIMER_CCX_ENABLE;//通道使能
  timer_channel_output_config(TIMER3,TIMER_CH_3,&ocpara);
  timer_channel_output_mode_config(TIMER3,TIMER_CH_3,TIMER_OC_MODE_PWM0);//pwm模式
  timer_channel_output_pulse_value_config(TIMER3,TIMER_CH_3,50);
  timer_auto_reload_shadow_enable(TIMER3);

SAMPLE_TIME:ADC采集数据间隔

ADC初始化

  adc_deinit(ADC0);
  adc_mode_config(ADC_MODE_FREE);//ADC独立工作
  adc_special_function_config(ADC0,ADC_CONTINUOUS_MODE,DISABLE);//不连续转换  
  adc_special_function_config(ADC0,ADC_SCAN_MODE,DISABLE);//不扫描 
  adc_data_alignment_config(ADC0,ADC_DATAALIGN_RIGHT);//右对齐
  adc_channel_length_config(ADC0,ADC_REGULAR_CHANNEL,1);//1个通道转换  
  adc_regular_channel_config(ADC0,0,ADC_CHANNEL_5,ADC_SAMPLETIME_13POINT5);//第0个序列,采样时间
  adc_external_trigger_config(ADC0,ADC_REGULAR_CHANNEL,ENABLE);//规则组外部触发使能
  adc_external_trigger_source_config(ADC0,ADC_REGULAR_CHANNEL,ADC0_1_EXTTRIG_REGULAR_T3_CH3);
  adc_enable(ADC0);
  DelayMicroSeconds(1);
  adc_calibration_enable(ADC0);//复位并校准
  adc_dma_mode_enable(ADC0);
  adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);//规则组转换开始 

因为是用定时器定时触发采样,所以采用不连续模式。只有一个ADC通道,所以不扫描。

注意:adc_enable(ADC0)和adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL)的顺序不能颠倒。
在这里插入图片描述
在这里插入图片描述
从手册里可知,adc_enable()只是唤醒ADC,并不是开启转换。adc_software_trigger_enable()是开启规则组转换。

ADC_SAMPLETIME_13POINT5:采样时间

总转换时间=采样时间+12.5 个 ADCCLK 周期 = 26个ADCCLK周期= 26/13000000s = 2us。

定时器采集间隔一定要大于转换时间。

DMA初始化

  uint16_t rev_data[PER_NUM] = {0};
  dma_deinit(DMA0,DMA_CH0);
  init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;//外设到寄存器
  init_struct.memory_addr = (uint32_t)(&rev_data);//存储器地址 
  init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;//地址自增
  init_struct.memory_width = DMA_MEMORY_WIDTH_16BIT;//16位
  init_struct.number = PER_NUM;//1个通道 PER_NUM个数据
  init_struct.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));//外设地址
  init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;//外设不增
  init_struct.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;//16位  取决于存储数据的类型
  init_struct.priority = DMA_PRIORITY_HIGH;//优先级
  dma_init(DMA0,DMA_CH0,&init_struct);
  dma_circulation_enable(DMA0,DMA_CH0);//循环模式
  nvic_irq_enable(DMA0_Channel0_IRQn, 1, 1);
  dma_interrupt_enable(DMA0,DMA_CH0,DMA_INT_FTF);//全部数据转换完成中断
  dma_channel_enable(DMA0,DMA_CH0);
  timer_enable(TIMER3);//放到底下

在这里插入图片描述
PER_NUM :每次采集数据数目。

通过手册可知ADC0对应DMA0_CH0。

数据处理

通过DMA中断可以知道是否转换完成。所用器件是acs712霍尔电流传感器。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
公式为:Vout (V)= 0.5Vcc+IP*0.1。通过ADC采集电压就能知道电流了。

总结:

以上仅为个人理解,如果有误,请大家多多指正,谢谢!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GD32+ADC+DMA定时采集+acs712霍尔电流传感器 的相关文章

  • 有什么好的可视化 HTML5 编辑器或 IDE? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 看起来 Dreamweaver CS5 将在几年内 实际上是几周 尝试使 HTML5 变得更加流畅 似
  • 编写自定义重构脚本的最佳 Java 库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 保存文件时禁用重新格式化代码

    我在 IntelliJ 中对旧的 java 文件做了一个小更改 当我保存该文件时 IDE 会自动重新格式化所有代码 通常这会更好 但是似乎几乎每一行都有不必要的空白需要清理 现在看来整个文件都被修改了 尽管我只做了一个小修复 这将使查看 V
  • 在 Ubuntu18 上打开 Spyder3 时缺少依赖项导致密钥环错误?

    我对编程之类的东西相当陌生 我正在尝试使用 Spyder3 但不断收到此错误 如下 我使用的是Geforce 1080ti Ubuntu 18 04 01 python3 3 6 python2没有安装 我尝试了 pip3 install
  • 有没有便宜或免费的 VB6 编程 IDE? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 PHPstorm 让 php 代码在浏览器中执行

    因此 当我单击 运行 时 PHPstorm 正在其控制台中正常运行 php 代码 这很好 但我想在浏览器中看到它 所以我在 PHPstorm 中创建了一个新的 PHP Web 应用程序 将服务器设置为 localhost 8000 现在 当
  • 什么是好的跨平台 C++ IDE? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 它需要有良好的代码完成支持 调试器和浏览代码的好方法 单击以转到文档 由于我被 Java IDE Eclipse 宠坏了 如果它支持重构
  • 如何防止 IntelliJ IDEA 在启动时重新分配文件类型关联?

    我正在使用 IntelliJ IDEA Ultimate 18 1 而 Jenkinsfile 支持很糟糕 值得庆幸的是 将文件视为 Groovy 是我可以接受的解决方法 这涉及到 删除 Jenkinsfile 关联 在Groovy组下添加
  • 更改 Eclipse 启动配置中的默认“要运行的程序”

    我时不时地使用以下命令从 Eclipse 中启动 JUnit 测试 运行方式 gt JUnit 插件测试 默认情况下 Eclipse 假设您正在运行需要工作台的东西 并在启动配置的 Main 部分中进行选择 LaunchConfig gt
  • 设置 xamarin studio 以与 PCL 和 MVVMCross 配合使用

    我真的很喜欢 Xamarin Studio 并且正在寻找一个模板解决方案来开始使用 MvvmCross 开发跨设备应用程序 但我找不到如何将项目设置为与 Xamarin Studio 一起使用 PCL 和 MvvmCross 如果有人能给我
  • 立即运行所有 Xcode 的“Fix-it”

    升级到 Xcode 7 后 为了支持 iOS 9 我修复了数百个错误和警告 是否有一个按钮可以让 Xcode 全部运行它们 而不是单独一个一个地运行它们 There is actually a solution for this in Xc
  • Aptana Studio 与 Eclipse [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • VBA:新集合 -> 模块不是有效类型

    我尝试使用集合作为函数的一部分 但是在编译时不断收到错误 模块不是有效类型 即使该函数只是定义一个集合 我也会得到相同的结果 Function CountUniqueTags Dim table As Collection Set tabl
  • android studio 和 android SDK 捆绑的 eclipse 版本有什么区别

    我没有 Android 开发经验 我想开始编写应用程序 The 官方开发者工具页面 http developer android com tools index html包含两个不同 IDE 的链接 第一个包含捆绑的 ADT 版本Eclip
  • 在 Eclipse 中突出显示修改的行

    在 netbeans 中 如果我打开一个受版本控制的文件 则修改的行会在左侧突出显示 绿色表示新行 蓝色表示修改行 在Eclipse中是否可以得到类似的效果 打开首选项窗口 搜索 差异 选择快速差异 将 使用此参考源 更改为 SCM 提供程
  • R 编程常用工具

    如果已经以不同的方式问过这个问题 我深表歉意 但我找不到任何达到我想要的东西 我真的是从其他软件包 SPSS 开始接触 R 的 当我了解真正可以做什么时 我意识到我还需要其他 工具 这让我想到了我的问题 您有哪些用于开发 R 代码的设置 我
  • 如何禁用 Qt Creator 中的“问题”窗格?

    我发现使用编译器输出更容易 但 Qt Creator 中的 问题 窗格会在每次编译后自动弹出 隐藏有用的信息 迫使我每次都隐藏它 有没有办法禁用这种行为 我不介意收集错误 我只是不希望每次我不要求时都显示这个特定的 UI 我使用的是 Qt
  • WebStorm HTML 文件显示 HTML 元素的 TypeScript 错误

    我安装了 WebStorm 的新副本并打开了现有的 Angular 项目 当我打开项目中的任何 HTML 文件时 IDE 都会显示 找不到 div div html 文件中的标签 IDE 运行了几秒钟 然后显示 2 5 3 Typescri
  • 在 Eclipse 中隐藏重复的工具栏项

    我不知道如何 但我的 STS 有重复的工具栏项目 我不知道如何删除它们 这是我复制的工具栏的样子 我想摆脱这些 我试图隐藏工具栏 但这没有帮助 有人知道如何删除重复的吗 自从升级到 Oxygen 以来 我一直遇到同样的问题 我无法可靠地重现
  • Linux 中的 R 有哪些可用的 IDE? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Linux 中的 R 有哪些好的 IDE 我尝试过 Rcmdr 和 Eclipse 但似乎都不具有与 Windows 中的 Tinn R

随机推荐

  • qt std::cout 中文乱码

    char out 输入操作 r n std cout lt lt out QString qOut 输入操作 r n std cout lt lt qOut toStdString std cout lt lt qOut toStdWStr
  • python3---情感分析(基于词典中文)

    写在前面 现有的情感分析比较常用的有两种 分别是基于词典的和机器学习 前者也属于非监督学习 后者自然一般属于监督学习 刚开始学情感分析 下面先从 基于词典的情感分析 开始进行 词典 我东搜西找找到了一些感觉是常用的字典 主要有 台湾大学NT
  • 2.NanoPi M1(全志H3)的GPIO控制总结(内核驱动)

    开发环境 VM Ubuntu 编译环境 linux3 4 交叉编译工具 arm linux gcc 4 4 3 GPIO内核驱动程序链接 https download csdn net download ddffyhg 11022291 用
  • ABAP DOI 下载SMW0的EXCEL和WORD模板

    用 FUNCTION SAP OI LOAD MIME DATA 下载SMW0的模板 用METHOD LR PROXY gt OPEN DOCUMENT FROM TABLE 打开模板 没找到和ole一样先下载 在打开的方法 SMWO上载模
  • 用正则表达式爬豆瓣电影数据

    学了正则表达式后 简单的用它来爬取豆瓣网的数据 import re from urllib request import urlopen def getPage url 获取网页的字符串 response urlopen url retur
  • STL_set——set::find

    Reference Returns an iterator addressing the location of an element in a set that has a key equivalent to a specified ke
  • 酷比魔方AI慧读器评测 – 实用,值,但不够智能

    转自 https post m smzdm com p ar07qo8x 前段时间在网上看到了酷比魔方AI慧读器的宣传 说是可以让孩子爱上阅读 还可以教会孩子正宗的伦敦腔英语 真的让人很好奇这是一款什么样的神奇产品 正好4月份是小侄子三岁的
  • 使用具有OpenCV和Tesseract的Raspberry Pi光学字符识别(OCR)

    了解如何使用Tesseract和OpenCV通过Raspberry Pi相机从PDF等图像中提取文本 在本教程中 我将向您展示如何使用光学字符识别通过Raspberry Pi相机和Raspberry Pi从图像中提取文本 Pi相机将捕获图像
  • CentOS6.8环境下,通过docker创建Anaconda3容器的基础使用

    目录 一 主要步骤 1 查找docker里评分最高的Anaconda 2 拉取下来 3 运行Anaconda虚拟容器 并挂载 4 进入容器后 创建虚拟环境 5 进入虚拟环境 6 进入虚拟环境后 就可以下载自己所需要的第三方库了 7 执行相关
  • 图形图像学习随笔:计算机图形学的一些基本概念

    本文内容摘抄于 计算机图形学的概念 一 计算机图形学的范畴 1 图形主要分为两类 一类是基于线条信息表示的 如工程图 等高线地形图 曲面的线框图等 另一类是明暗图 也就是通常所说的真实感图形 2 计算机图形学利用计算机建立图形所描述的场景和
  • Django小结02

    1 数据库设置 1 打开myproject settings py 配置mysql数据库 需要添加密码 默认端口3306 在myproject init py中 import pymysql pymysql install as MySQL
  • 自动化Playwright专题汇总

    文章目录 序言 一 特性 1 测试和自动化框架 2 支持所有主流浏览器 3 快速可靠的执行 4 强大的自动化功能 5 自动化工具对比 在这里插入图片描述 https img blog csdnimg cn 97189e12b617477a8
  • 多线程爬取百度关键字结果,并获取真实url

    项目目的 练习 项目要求 根据给定的关键字 检索百度的结果 将结果保存到文件中 遇到问题 1 python list取值问题 有些看不清晰的 用for index item in enumerate array 查看 2 选取想要的元素 两
  • Linux系统磁盘扩容

    本机为CentOS7 9 在虚拟机环境下给Linux系统磁盘扩容 直接添加硬盘无法使用 还需要在系统内部有磁盘挂载操作 给虚拟机添加磁盘 查看系统盘分区类型 root Para110 fdisk dev sda 列出系统分区 欢迎使用 fd
  • springboot框架主要用来做什么?

    Spring Boot是一个开源的Java框架 主要用于简化和加速基于Java的应用程序的开发 它提供了一套开发工具和约定 使得构建独立 可执行的 生产级别的Spring应用变得更加容易 Spring Boot的主要目标是简化Spring应
  • 华夏相机/臻识相机车牌识别器同LED屏幕语音对接以及javaDemo

    上篇文章说过在本地买的华夏相机T83因为当地的销售人员只懂安装 一点技术支持也给不了 导致语音 屏幕 均不能实现自己想要的功能 自定义修改文字 语音播放余额等 经过自己进一步的研究发现 这个led屏幕和语音只需要自己买一块几十块的主板更换上
  • java类总结_Java类的高级用法总结

    马上就要进入10月中旬了 距离开学已经过去整整一个半月了 想想大四的学长学姐们的忙碌的生活 我似乎也感受到了他们内心的躁动 但要淡定 学东西就是要沉住气 今天先来梳理梳理Java类的高级用法 主要内容 1 final关键字 2 抽象方法及抽
  • Maven手动安装ojdbc7.jar

    这篇文章介绍了Springboot项目中通过maven引入与安装外部jar的方法与踩坑 因为版权原因 oracle的ojdbc jar 无法直接从maven 的中央仓库下载 需要手动进行下载安装 下载后选择一个指定位置 我这边选择 opt
  • matplotlib 直方图绘制详解

    n bins patches plt hist datasets bins normed False facecolor None alpha None 函数说明 用于绘制多个数据集datasets的直方图 主要形参 datasets 数据
  • GD32+ADC+DMA定时采集+acs712霍尔电流传感器

    GD32 ADC DMA定时采集 acs712霍尔电流传感器 目的 本文使用定时器定时触发adc采样 并且通过dma搬运数据 环境 KEIL GD32F107vct6 ADC01 IN5 PA5 TIMER3 CH3 时钟初始化 rcu p