ODrive移植keil(四)—— PWM触发ADC采样

adc采样时间_【dsPIC33】PWM系列之PWM触发ADC 前言PWM触发ADC进行采样,是对于电机控制来说非常重要的一环,做矢量控制,能否运行,电流采样是重中之重,因此电流采样的时刻控制非常重要,本节就接着上篇文章的中心对齐模式,讲解,中心对齐模式下的PWM触发ADC进行采样。先来看PWM触发的手册解释:上面就是说:dsPIC33E芯片有一个专门的寄存器TRIGx来控制触发时刻,这一点功能,我觉得还是比较方便的,比ST的要方便一些,其他的一些延时,采样时... 阅读详情
AI摘要

文章详细描述了如何在STM32F4单片机上使用PWM触发ADC进行电流采样,涉及PWM配置、电流变换频率、校准频率以及ADC采样中的AD值错位问题的解决。作者还分享了ODrive的ADC采样策略和遇到的问题,以及自己的解决方案。,


 
ODrive、VESC和SimpleFOC 教程链接汇总:请点击
 

说明

电机驱动器中,通过PWM触发ADC,保证在下臂MOS打开的时候采样电流,这本是个难度极高的技术活。随着各芯片厂家的技术迭代,现在几乎所有单片机都有这个功能,可以说已经烂大街了。即便如此,在具体的电机驱动器程序中,PWM触发ADC采样仍然很容易出问题,主要是配置复杂。

一、PWM

  • 官方代码中,高级定时器TIM1和TIM8分别输出互补PWM信号,驱动两路电机,本次移植,只移植了M0,所以我们只讲TIM1的配置。
  • 电流采样,需要事先校准,一般在上电初始化的时候。
  • ODrive的校准就与众不同,它设置在了下臂PWM为低电平(MOS关闭)时。
     

1.1、基本配置

在这里插入图片描述

 
上面的配置,
1、PWM频率是24KHz,
2、更新中断频率是48KHz,但是RepetitionCounter = 2,所以进入更新中断的频率是48/(1+2)=16KHz,

 
PWM波形如下图:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

 

1.2、观察中断

在中断函数中设置一个脉冲,由GPIO8输出,下图:
在这里插入图片描述
在这里插入图片描述
 

1.3、电流变换频率

进入中断,其中一半的次数是电流变换,另一半的次数是校准,所以电流变换频率是8KHz,下图:

在这里插入图片描述

在这里插入图片描述
 

1.4、校准频率

8KH在,下图:

在这里插入图片描述

在这里插入图片描述

 

TIM_CounterMode_CenterAligned3,TIM_OCMode_PWM2,有没有想过为什么会这样配置,
正常我们会使用 TIM_CounterMode_CenterAligned1,TIM_OCMode_PWM1,但是这样的配置会在下臂关闭的时候更新中断,
而CenterAligned3/PWM2的配置刚好可以在下臂打开的时候更新中断,
通过这个地方,可以想象最初的ODrive很可能在更新中断中只做电流变换,没有校准,不是现在的样子。

 

1.5、control_loop_cb()

官方代码中,进入电流变换所属的中断后触发软件中断,然后在软件中断中执行大部分功能,下图:

在这里插入图片描述

本次移植,没有使用软件中断,用control_loop_cb()函数 代替软件中断后执行的函数,
当前例程不涉及到这部分,所以不再细说。

 

二、ADC采样

ODrive同时使用了ADC1/ADC2/ADC3,
在官方代码中:
ADC1的规则组采样ADC0----ADC16,上电初始化时软件触发后一直DMA后台转换,
ADC1的注入组采样电源电压,由TIM1更新触发
ADC2的规则组采样M1的B相,由TIM8更新触发
ADC2的注入组采样M0的B相,由TIM1更新触发
ADC3的规则组采样M1的C相,由TIM8更新触发
ADC3的注入组采样M0的C相,由TIM1更新触发
 

2.1、AD值错位问题

ADC1多通道规则转换时,如果使用DMA方式,经常会发生AD值错位的现象,比如第一个AD值的高字节放入的是低字节的数据,而低字节是第二个AD值的高字节数据,以此类推,转换值全部失效。

《SimpleFOC移植STM32F405RGT6》的时候,ADC_SoftwareStartConv 方式会发生了AD值错位现象,用DMA中断的方式解决了。

这次移植和上次一样的方法,但又发生了错位。最终用TIM2更新触发的方式解决了。
在这里插入图片描述
 

- ADC以DMA的方式转换,代码单独执行这个操作是没问题,但在初始化阶段随着片内外设配置的增加,或者代码执行顺序的变换,就会发生错位。这个问题十年前我就遇到了,当时只是很不解,见得多了也就习惯了。网上找到过很多解释错位原因以及改正办法,但从来都没有彻底解决过这个问题,此次移植又遇到了这个问题,曾经的解决办法测试一遍后都失效了,最后发现用TIM2更新触发的方式不再错位。 - 看ODrive官方代码,就是用最基本的上电后软件触发转换,这正是我想要的方案,但是无论我怎么调整配置都会错位。我觉得老外肯定知道这个问题,并且也知道怎么避免这个问题。 - 如果单片机是我们国产的,直接问厂家,是不是就很容易解决了。

 

2.2、规则组转换

ADC1规则组移植时只转换了这4个通道,下图:
在这里插入图片描述
假如电源电压12V,经过分压后是0.64V,对应的AD值是794(0x31A),
在这里插入图片描述

ADC1的注入组也转换电源电压,此处主要验证ADC1规则组的转换值。
 

2.3、注入组转换

ADC1的注入组采样电源电压,
ADC2的注入组采样M0的B相,
ADC3的注入组采样M0的C相,
刚上电时,或者下臂MOS关闭时,Vo的理论输出值=1.65V,
在这里插入图片描述
 

2.4、观察AD转换值

发送指令“A”,读取ADC1规则组 四个通道的转换结果,
发送指令“B”,读取注入组 三个通道的转换结果,下图:
在这里插入图片描述

 
 
 
驱动板购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技
 
 
 
欢迎加入技术交流群:923734429 (入群申请写:优快云)
 
 
(完)

STM8单片机通过PWM触发ADC同步采样   在做数字开关电源开发过程中使用最多的就是PWM功能和ADC采样功能。ADC采样时采样的时间点很重要,必须在PWM输出高电平的时候取采样,这样采样出来的数据才是最准确的。在STM8单片机中,可以通过定时器的TRG信号去触发ADC采样,这样就可以将PWM波形的输出和ADC采样结合在一起了。   下面就演示一下,如何在输出PWM波的过程中触发ADC采样。   首先看ADC的初始化代码。 #include "adc.h" #include "main.h" #include "led.h" u16 DATA 阅读详情

相关推荐

定时器(PWM输出)触发ADC采样(DMA)——STM32CubeMX

已知 Tclk 为 84MHz , 我们需要 Tout 为 200ms 即 200000us , 不妨先让PSC为 839, 带入上述公式可得 ARR = 19999. 这样算出来之后ARR和PSC都在0~65535的范围, 则可以使用这组参数。例如,如果时钟频率为1MHz,并且PSC设置为1000,则实际的定时频率将为1kHz。当重装载值(Period 或 ARR)设置为 500 时,意味着定时器需要计数 500 个时钟周期才会触发中断。例如,如果时钟频率为1MHz,则Tclk为1微秒。

2301_77123899的博客 1万+

PWM硬件触发ADC

需要配置四个外设来实现PWM硬件触发ADC采样:eFlexPWM、ADC、XBARA、ADC_ETC eFlexPWM Enhanced Flex Pulse Width Modulator (eFlexPWM) 在配置完PWM的主要寄存器后,可以找一个输出触发寄存器:Output Trigger Control Register (SM0TCTRL - SM3TCTRL) OUT_TRIG_E...

Us_Wang的博客 1万+

从开源驱动器到自研:手把手教你基于ODrive代码移植到STM32F4(Keil/VSCode双版本)

本文详细介绍了如何将开源电机驱动器ODrive的代码移植到STM32F4平台,涵盖架构解析、开发环境配置、核心模块移植及系统调试等关键步骤。通过Keil和VSCode双版本实现,帮助开发者快速掌握FOC算法移植与优化技巧,适用于电机控制领域的国产化替代与功能定制需求。

weixin_30666401的博客 414

ODrive0.5.1程序分析#2 编码器补偿校准(encoder_offset_calibration)

ODrive程序解读

ledros的博客 4399

ODrive 8kHz定时器设计原理与工业伺服控制时序优化

电机控制中的定时器频率并非随意设定,而是由电机电气时间常数、采样延迟、PWM同步精度及实时计算能力共同约束的基础参数。8 kHz作为典型电流环控制频率,本质是平衡系统动态响应、硬件时序余量与工程鲁棒性的关键折中点;其背后涉及ADC硬件触发同步、互补PWM死区配置、SVPWM定点查表优化、多级中断优先级管理等嵌入式实时控制核心技术。该频率广泛应用于FOC矢量控制场景,在ODrive开源驱动器与汇川等工业伺服系统中均得到验证,是理解电机控制器底层时序设计范式的入口级概念。

weixin_34268753的博客 364

ODrive FOC源码Keil移植实战:从Makefile到电机转起来

磁场定向控制(FOC)是无刷直流电机高精度调速的核心算法,它依赖电流反馈与PWM触发时机的严格同步,因此工程落地时往往卡在底层外设适配环节。ODrive作为成熟的开源电机控制项目,其源码将算法层与板级驱动清晰分离,为自研BLDC/PMSM驱动板提供了可靠参考。但在从Makefile构建链路迁移到Keil MDK环境时,开发者需要重新处理启动文件、中断优先级、ADC触发源和链接脚本等关键配置,才能让移植后的电机控制循环稳定运行。本文以STM32平台为例,拆解ODrive v0.3.6源码向Keil工程迁移的完

weixin_30983965的博客 288

ODrive移植keil(二)—— ODrive的程序架构

本节及之后的教程将把odrive移植到keil环境下,为了降低移植难度,同时也为了让大家更容易学习掌握移植后的代码,本次移植,只移植电机的核心控制功能,实现常用的一些功能。这部分代码会让人看得很无助,因为所有的代码都在此时执行,比如最下面的开环控制,都已经闭环了难道它还在运行,它运行的意义是什么?ADC1的规则通道转换所有闲杂的ADC,比如温度检测,不需要时效,软件触发后将一直在后台转换;国外的电机驱动技术领先国内这是不争的事实,“洋务运动”一直都在,只是在不同的领域不同的范围,

loop222的博客 1万+

ODrive-fw-v0.3.6 移植 Keil MDK 教程:STM32F405RG 电机控制实战

嵌入式电机控制系统中,ODrive 作为开源高性能伺服控制器,其固件常需适配特定开发环境。本文围绕 STM32F405RG 平台,深入解析 ODrive-fw-v0.3.6 在 Keil MDK-ARM v5.37 下的工程构建原理,涵盖 CMSIS 与 HAL 库版本兼容性、启动文件与链接脚本定制、时钟树与外设(TIM/ADC/CAN)精准配置等关键技术点。重点解决 newlib 内存管理冲突、结构体对齐异常、CAN 接收中断失效等典型移植陷阱,支撑电流环闭环控制、编码器校准及 CAN 总线通信等核心功能

weixin_29194817的博客 229

SimpleFOC、ODrive和VESC 教程链接汇总

一、SimpleFOC系列教程 SimpleFOC(一)—— 简介(附有文件下载链接) SimpleFOC(二)—— 快速入门 (开环控制) SimpleFOC(三)—— AS5600角度读取 SimpleFOC(四)—— 闭环控制 SimpleFOC(五)—— 双电机控制 SimpleFOC(六)—— PowerShield和AS5047P SimpleFOC(七)——STM32(Bluepill)的应用 SimpleFOC(八)—— 理论+实践 深度分析SVPWM SimpleFOC(九)——

loop222的博客 12万+

ODrive固件移植到Keil MDK:STM32无刷电机FOC控制实战记录

无刷电机依靠FOC(磁场定向控制)实现高效、平稳的扭矩输出,是机器人、无人机和伺服驱动领域的核心技术方案。在嵌入式开发中,STM32凭借丰富的外设和性价比成为电机控制的主流平台,而Keil MDK作为经典的IDE环境,为工程调试、变量观测和代码下载提供了极大便利。ODrive作为一套成熟的开源无刷电机控制固件,集成了电流环、速度环和位置环的完整算法。本文从FOC控制原理出发,结合STM32实际项目开发,详细记录将ODrive固件v0.3.6迁移至Keil MDK环境的全过程,涵盖构建体系适配、链接脚本配置、

weixin_29185167的博客 245

odrive移植 ODrive-fw-v0.3.6-keil 无刷电机控制

odrive移植 ODrive-fw-v0.3.6-keil 无刷电机控制

ODrive刷RTOS实战:裸机到FreeRTOS的任务划分与移植避坑指南

实时操作系统(RTOS)的核心价值在于任务优先级调度与确定性响应,当电机控制、多传感器同步和通信负载叠加时,传统裸机主循环会因缺乏优先级而出现延迟抖动。FreeRTOS作为嵌入式领域应用最广的轻量级内核,通过将电流环保留在中断、位置环与通信任务独立调度,可让ODrive在复杂场景下保持稳定。实践中需重点关注中断优先级配置、共享数据保护策略以及多任务看门狗设计,Keil环境下的移植还需处理编译器和栈区适配。合理的任务划分让系统从“靠顺序硬撑”变为“按优先级各司其职”,这就是“可控”的来源。

weixin_33826609的博客 343

ODrive3.4 固件(keil移植版)

ODrive3.4 固件(keil移植版)

ODrive 8kHz控制环时序设计深度解析

在电机伺服控制系统中,控制环频率是决定动态响应、电流采样精度与PWM同步质量的核心参数。8 kHz作为典型高实时性控制环频率,其本质是FOC算法对电流环带宽、ADC硬件触发时机、定时器相位对齐及中断确定性的综合约束结果。基于STM32F405的ODrive平台通过高级定时器TIM1/TIM8构建硬实时主从时基,实现PWM载波、电流采样、编码器捕获与PID运算的四重硬件级时序对齐。该设计显著提升电压矢量相位纯净度与抗干扰能力,广泛应用于机器人关节、精密定位和无感FOC驱动等场景。本文聚焦8 kHz这一关键工程

weixin_33895657的博客 248

富芮坤FR801xH蓝牙协议栈启动流程和notify实现温度数据主动上传

文章目录一、蓝牙协议栈启动流程1.1 初始化代码1.2 初始化流程1.3 回调函数里的初始化二、notify实现2.1 notify介绍2.2 notify实现2.3.1 定义数据2.3.2 获取连接号conidx2.3.3 gatt_notification函数的使用三、notify温度上传测试3.1 蓝牙调试工具3.2 蓝牙调试器设置3.3 测试结果四、参考链接   基于sdk开发的好处是方便项目的快速落地,现在用的是SDK里面的源文件,目前只是学习FR801xH芯片的特性,裁剪这个SDK需要点时间,

weixin_43810563的博客 4318

Imputation Methods for scRNA Sequencing Data

越来越多的研究者使用单细胞RNA测序(scRNA-seq)技术来表征单细胞水平的转录图谱。他们用它来研究复杂组织的异质性、转录组动力学和未知生物的多样性。然而,在基因表达模式随机性的scRNA-seq数据中普遍存在许多技术和生物学上的噪音。这些数据通常具有高维、稀疏和大量“dropout”值的特点,并且受批处理效应的影响。scRNA-seq数据中大量的“dropout”值严重掩盖了基因之间的重要关系,阻碍了下游分析。因此,scRNA-seq数据dropout值的估算就显得尤为重要。

qq_34179307的博客 540

ODrive 8kHz控制环实现原理与STM32定时器深度优化

伺服控制系统中,8 kHz电流环是高性能FOC(磁场定向控制)的关键技术指标,其本质是对实时性、确定性和硬件资源协同的极致要求。该频率并非单纯参数调整,而是由STM32定时器时基设计、中断优先级调度、ADC同步采样、SVPWM硬件加速及死区时间配置共同决定的系统级工程结果。理解TIM8高级定时器在中心对齐模式下的ARR/PSC计算逻辑、TRGO与CCx触发机制、以及NVIC中断嵌套约束,是保障控制环稳定运行的基础。结合ODrive固件源码实践,可将理论带宽转化为实际响应能力,广泛应用于机器人关节、电动滑板、

weixin_33788244的博客 400

DDS(Direct Digital Synthesizer)数字频率合成器

随着数字技术在仪器仪表和通信系统中的广泛使用,可从参考频率源产生多个频率的数 字控制方法诞生了,即直接数字频率合成(DDS)。 直接数字合成(DDS)是一种产生模拟波形(通常是正弦波)的方法,它通过产生数字形式的时变信号,然后进行数模转换。由于DDS设备内的操作主要是数字的,它可以提供输出频率之间的快速切换,良好的频率分辨率,并在广泛的频率频谱上操作。随着设计和工艺技术的进步,今天的DDS设备非常紧凑,功耗很小。 上面是比较书面的语言,其实简单地说就是一个信号发生器模块,主要是产生频率可调的三角波正弦波。

denghuajing的博客 4863

ODrive 8kHz电流环定时器架构深度解析

在电机伺服控制中,控制环频率是决定系统带宽、响应速度与稳定性的核心参数。其本质是嵌入式实时系统中定时器资源与ADC/PWM硬件协同的时序工程问题。基于STM32的FOC控制器需在CPU算力、采样精度、PWM同步与中断抖动之间寻求平衡,而8 kHz作为典型电流环频率,正是硬件资源约束下的最优解。它依托高级定时器(如TIM1)的中心对齐模式、DMA触发链与精确分频机制,实现微秒级确定性调度。该设计广泛应用于机器人关节、CNC力控及高精度伺服系统,是理解ODrive固件源码与实时控制落地的关键入口。

weixin_33851429的博客 366

常学常新:《Attention Is All You Need》万字解读!

常学常新:《Attention Is All You Need》万字解读!

hunteritself的博客 3643

HCIA重点知识

华为认证ICT工程师,是华为认证体系中用于标识个人能力在某一技术领域达到工程师级别的证明,表示通过认证的人员具备安装、配置、运行 ICT 设备,并进行基础故障排除的能力。抽象语言 -----> 编码 -----> 二进制 -----> 电信号 -----> 处理电信号信号的转换标准:协议,是一种允许电子设备相互交流的一系列标准的规则。即开放系统参考模型OSI/RM,简称“OSI”。OSI参考模型将计算机网络分为七个层次,自上而下依次为:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。1、应用层:

Awen0201的博客 2540

ODrive 8kHz控制环时基设计深度解析

在电机实时控制中,控制环频率是决定系统动态响应与稳态精度的核心指标。8 kHz作为工业伺服常用控制频率,其本质是时间确定性的工程实现——需依托高精度定时器硬件、严格同步的多外设协同、以及抗干扰的时钟稳定性保障。本文围绕STM32高级定时器TIM8展开,解析其如何通过重复计数器(RCR)、主从触发同步(TRGO/ITR)、寄存器级PWM更新等关键技术,构建低抖动、高鲁棒的8 kHz时基中枢;并结合ADC采样对齐、温度漂移补偿、中断优先级固化等实战策略,揭示FOC控制环从UEV中断到电流解耦的全链路时序约束。关

weixin_33843947的博客 412

OceanBase迁移平台OMS企业版部署

OceanBase迁移平台OMS企业版部署摘要: 本文档详细介绍了OceanBase迁移平台OMS企业版的部署流程,包含环境准备、OAT部署管理、MetaDB部署等关键步骤。

Sebastien23的博客 519

ODrive 8kHz控制环原理与源码级调优实战

电机控制中的采样频率是保障电流环稳定性的核心参数,其本质源于电机电气时间常数与MCU实时处理能力的协同约束。8 kHz作为主流无刷电机FOC控制的典型采样率,既满足RL系统带宽5~10倍采样准则,又兼顾STM32等主流MCU的ADC转换、坐标变换与PID计算的确定性时序。该频率直接决定电流响应速度、纹波抑制能力及系统相位裕度,广泛应用于机械臂关节、电动滑板和AGV舵机等高动态场景。深入理解其寄存器配置逻辑(如ARR/PSC计算)、双定时器协同机制与硬件信号链约束,是实现稳定FOC控制与故障精准定位的关键路径

weixin_34080571的博客 425

柔性电极材料新突破:清华团队实现0.1mV级脑信号采集精度

清华团队的 0.1mV 级柔性电极突破,不仅是材料科学与神经工程的跨界胜利,更标志着脑机接口从 “信号采集” 向 “神经交互” 的范式转变。当电极与脑组织实现 “柔性共生”,人类首次拥有了窥探大脑微观电活动的 “精密探头”,这既是神经疾病诊疗的里程碑,更是人机融合时代的新起点。随着技术标准化与产业生态的完善,这场始于实验室的 “柔性革命”,正加速向临床病房、智能工厂、消费电子等场景渗透,为脑机接口的大规模应用铺设 “柔性跑道”。:当柔性电极实现 “神经信号的无损捕捉”,如何平衡技术创新与伦理边界?

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2943

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: ODrive移植keil(三)—— USB虚拟串口和快速正弦余弦运算
下一篇: ODrive移植keil(五)—— 开环控制和电流变换
loop222
博客等级 码龄8年 4091粉丝 61原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值