【STM32电机矢量控制】记录11——DMA传输

发布者:Turquoise最新更新时间:2018-09-22 来源: eefocus关键字:STM32  电机  矢量控制  DMA传输 手机看文章 扫描二维码
随时随地手机看文章

DMA传输:

原理:DMA 传输将数据从一个地址空间复制到另外一个地址空间。

DMA传输数据,但是不需要占用MCU,即在传输数据时,MCU可以做别的事,像多线程。数据传输从外设到存储器或者从存储器到存储器。DMA控制器包含了DMA1和DMA2,其中DMA1有7个通道,DMA2有5个通道,可以理解为传输数据的一种管道。要注意的是,DMA2只存在于大容量单片机中。 

工作过程:

1.DMA请求 
如果外设想通过DMA传输数据,必须先向DMA控制器发送DMA请求,DMA收到请求信号后,控制器会给外设一个应答信号,当外设应答且DMA控制器收到应答信号后,就会启动DMA传输,直到传输完毕。 
DMA有DMA1和DMA2两个控制器,DMA1有两个控制器,DMA1有7个通道,DMA2有5个通道,不同DMA控制器的通道有不同的外设请求。 
2、通道 
DMA有12个独立可编程的通道,DMA1有7个通道,DMA2有5个通道,每个通道对应不同外设的DMA请求。虽然每个通道可以接收多个外设请求,但是同一时间只能接收一个,不能同时接收多个。 
3、仲裁器 
当同时有多个DMA请求时,就意味着有先后响应的问题,这个就由仲裁器管理。仲裁器管理DMA请求分为2个阶段:第一阶段属于软件阶段,可以在MDA_CCRx寄存器中设置,有 4 个等级:非常高、高、中和低四个优先级。第二阶段属于硬件阶段,如果两个或以上的DMA 通道请求设置的优先级一样,则他们优先级取决于通道编号,编号越低优先权越高,比如通道 0 高于通道 1。在大容量产品和互联型产品中,DMA1 控制器拥有高于 DMA2 控制器的优先级。

 

配置:

DMA_ InitTypeDef 初始化结构体 

typedef struct

uint32_t DMA_PeripheralBaseAddr; // 外设地址 uint32_t

DMA_MemoryBaseAddr; // 存储器地址 uint32_t

DMA_DIR; // 传输方向 uint32_t

DMA_BufferSize; // 传输数目 uint32_t

DMA_PeripheralInc; // 外设地址增量模式 uint32_t

DMA_MemoryInc; // 存储器地址增量模式 uint32_t

DMA_PeripheralDataSize; // 外设数据宽度 uint32_t

DMA_MemoryDataSize; // 存储器数据宽度 uint32_t

DMA_Mode; // 模式选择 uint32_t

DMA_Priority; // 通道优先级 uint32_t

DMA_M2M; // 存储器到存储器模;

}DMA_Init TypeDef;


DMA数据配置:

void DMA_Config(void)

 {

 DMA_InitTypeDef DMA_InitStructure;

 RCC_AHBPeriphClockCmd(DMA_CLOCK, ENABLE);// 开启 DMA 时钟

 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)aSRC_Const_Buffer;// 源数据地址

 DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)aDST_Buffer;// 目标地址

 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; // 方向:外设到存储器(这里是内部的 FLASH)

 DMA_InitStructure.DMA_BufferSize = BUFFER_SIZE; // 传输大小

 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; // 外设(内部的 FLASH)地址递增

 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; // 内存地址递增

 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; // 外设数据单位

 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;  // 内存数据单位

 DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;  // DMA 模式,一次或者循环模式

 //DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

 DMA_InitStructure.DMA_Priority = DMA_Priority_High;  // 优先级:高

 DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;  // 使能内存到内存的传输

 DMA_Init(DMA_CHANNEL, &DMA_InitStructure);   // 配置 DMA 通道

 DMA_Cmd(DMA_CHANNEL,ENABLE);   // 使能 DMA

 }

调用 RCC_AHBPeriphClockCmd 函数开启 DMA时钟,使用 DMA控制器之前必须开启对应的时钟。 源地址和目标地址使用之前定义的数组首地址,传输的数据量为宏BUFFER_SIZE 决定,源和目标地址指针地址递增,使用一次传输模式不能循环传输,因为只有一个 DMA通道,优先级随便设置,最后调用 DMA_Init 函数完成 DMA 的初始化配置。 

DMA_ClearFlag函数用于清除DMA标志位,代码用到传输完成标志位,使用之前先清除传输完成标志位以免产生不必要干扰。DMA_ClearFlag 函数需要 1 个形参,即事件标志位,可选有传输完成标志位、半传输标志位、FIFO 错误标志位、传输错误标志位等等,非常多,我们这里选择传输完成标志位,由宏DMA_FLAG_TC 定义。 

DMA_Cmd 函数用于启动或者停止 DMA 数据传输,它接收两个参数,第一个是 DMA通道,另外一个是开启 ENABLE 或者停止 DISABLE。

主要完成任务:

1、FOC2.0程序进行细致的梳理;

2、起动的检测采样的细致过程有了更深的理解;

3、对ADC采样时的扇区判断,及其注入方式的程序书写进行更深的了解。

总的来说,FOC2.0 无霍尔控制方式的BLDC电机运行程序已经大致掌握,但应该还有些细节还未发掘。

接下来,用 有霍尔控制的电机运行程序 来再次深入学习 FOC2.0


关键字:STM32  电机  矢量控制  DMA传输 引用地址:【STM32电机矢量控制】记录11——DMA传输

上一篇:【STM32电机矢量控制】记录12——IWDG看门狗
下一篇:【STM32电机矢量控制】记录9——状态观测器与锁相环

推荐阅读最新更新时间:2024-03-16 16:14

从F1说到电机的馈能
前面的文章已经给大家介绍了电机的很多特性了,今天在这里再讲一下电机的另外一个特性:勤俭持家! 还有不到一个月,世界一级方程式锦标赛2017赛季就要开赛了,作为资深车迷来说是非常兴奋的,那我们今天要讨论的话题就从F1开始。如今的F1赛场已经发生了翻天覆地的变化,曾经雄霸天下的迈凯伦法拉利时代已经过去,随着2016年三叉星银箭车队再次拿下总冠军,三连冠的实现宣告着梅赛德斯统治时代的来临。而奔驰车队之所以能取得成功,与2014年F1规则大改中引擎动力的改革是分不开的。 图1 F1刹车时ERS系统启动回收能量 2014年的F1规则改革中引入了新的能量回收系统(ERS系统),其中动能回收系统(ERS-K)是回收来自刹车所浪费的动能,赛车
[汽车电子]
从F1说到<font color='red'>电机</font>的馈能
有关STM32 外设USART 的一个小问题
今天在调试USART 时,偶然发现了USART 数据寄存器状态是可以被打断的,即数据A 在发送过程中当出现了其他的数据寄存器请求B 时,该数据A 的发送会被中断,然后A 不能发送出来,而B 会被正常发送。
[单片机]
有关<font color='red'>STM32</font> 外设USART 的一个小问题
STM32的瞬态运动参数存储测试系统设计
在瞬态运动参数测试中,对存储测试系统的实时性和功耗提出了更高的要求。提出了一种基于STM32的嵌入式存储测试系统的设计方案,介绍了该系统关键部分的软硬件设计,主要包括模拟信号调理、数据采集存储和USB数据回读。该系统具有实时性好、体积小、功耗低的特点,适合于恶劣环境下加速度信号的采集存储。试验结果表明,该系统工作稳定,实现了设计目标。 存储测试技术是在特殊环境下记录运动物体参数行之有效的方法,先将测试数据存入存储器,待装置回收后通过特定接口与上位机进行通信,还原数据信息。在诸多领域的测试中,对数据采集存储系统的实时性和功耗提出了更高的要求,随着半导体技术的发展,各种技术的进步使得高速度、低功耗的存储测试系统能够实现。 本系
[单片机]
<font color='red'>STM32</font>的瞬态运动参数存储测试系统设计
最通俗易懂的电动汽车电机知识大分解
近年来,国家和有关部门大力倡导节能减排,电动汽车的推出吸引了诸多汽车及零部件企业的目光,电动汽车,成为我国未来汽车产业的热门趋势。 现在电动汽车的发展越来越快,而电动汽车电机的研发,更是引起了大家的关注,不过真正了解电动汽车电机的人却寥寥无几。小编为大家搜罗多方资料,为大家好好讲一下电动汽车电机的知识,以及新能源电机排行榜。让我们一起探讨下高科技的汽车心脏! 1、电动汽车电机的地位 电控系统是电动车的大脑,指挥着电动汽车的电子器件的运行,而车载能源系统是电控系统中的核心技术,它是衔接电池以及电池组和整车系统的一个纽带,其中包括电池管理技术,车载充电技术以及DCDC技术和能源系统总线技术等。因此车载能源系统技术日益成为产业应
[嵌入式]
MAX504型D/A转换器在无刷同步发电机中的应用
摘要:在无刷同步发电机励磁控制装置中,要将80C196MC型单片机输出的数字控制信号转换成模拟电压信号,MAX504型D/A转换器能很好地满足这种要求。主要介绍MAX504型10位串行D/A转换器的特点、工作原理及应用。 关键词:MAX504;串行D/A转换器;励磁控制;应用 中图分类号:TN409 文献标识码:A 文章编号:1006-6977(2006)01-0012-03 1 引言 无刷同步发电机励磁控制装置主要应用于DF11型和DF8B型铁路内燃干线机车的交流辅助传动系统。无刷励磁控制装置和交流辅助发电机共为一体,对发电机的励磁机励磁进行控制,从而达到控制发电机励磁的目的,通过无刷励磁控制装置的控制信号,使交流辅
[工业控制]
IoT时代的智能电机如何实现控制?
持有Qorvo股票的人最近应该很开心,过去两周内实现股价破百,并创下104.22的历史新高。5G是其股价飘红的重要因素,5G对基础设施解决方案的强劲需求,使其推广比行业预期更快。这其中既有Qorvo实实在在的业绩表现,同时也包含着市场对其潜力的更高期待。 业内对于Qorvo的第一印象都是射频解决方案供应商,在无线设备、有线和无线网络、防空雷达、通信系统等领域进行着持续投入。这家由RFMD和TriQuint对等合并、并于2015年1月组建成立的公司,过去几年在包括基站、手机和IoT在内的无线市场迅速占领了一席之地,2019财年获得了超过30亿美元的营收。 不过,看起来Qorvo并不满足于凭借射频核心优势打下的江山,正在持续扩展其产品
[嵌入式]
IoT时代的智能<font color='red'>电机</font>如何实现控制?
STM32怎么创建工程:最简单、方便的创建工程方法
一、 首先在电脑的某个目录下创建一个空文件夹用来存放工程文件。 二、打开keil软件,点击 Keil 的菜单: Project – New Uvision Project,保存时将目录定位到自己创建的文件下: 三、接下来会出现一个选择 Device 的界面,就是选择我们的芯片型号,我们选择STM232F407ZE(如果使用的是其他系列的芯片,选择相应的型号就可以了)特别注意: 一定要安装对应的器件支持包才会显示这些内容)。 接着勾选一些必须的文件和自己所需要的文件 注意:用到什么就点绿色这个,在里面勾上什么 四、打开创建的工程文件test,会看到如下文件: 创建USER子文件夹,用来存放所有的源码
[单片机]
<font color='red'>STM32</font>怎么创建工程:最简单、方便的创建工程方法
如何使用STM32实现systick的精确延时
SYSTICK寄存器初始化 void SysTick_Configuration(void) { if (SysTick_Config(SystemCoreClock / 100)) { while (1); } NVIC_SetPriority(SysTick_IRQn, 0x0); } SysTick_Config默认时钟为SysTick_CLKSource_HCLK,所以在这之前使用SysTick_CLKSourceConfig()选择系统时钟不会改变systick的时钟 static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks 》 Sys
[单片机]
热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved