ST电机库v5.4.4源代码分析(5): 每个扇区里面如何选择采样哪二相电流

这篇具有很好参考价值的文章主要介绍了ST电机库v5.4.4源代码分析(5): 每个扇区里面如何选择采样哪二相电流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编者:沉尸 (5912129@qq.com)

问题的提出:

      1)ST电机库中电流采样的实现

      2)每个电角度周期,共跨越6个sector,STM32F407中有两个ADC(ADC1和ADC2),所以在同一个时刻,可以采样UVW三路中的二路(另一路可以推导出来),这些电流值带着符号,那么:源码中每个sector采集哪二路呢?

一)针对电流采样的ADC触发的软件流程描述

stm32f407中TIM1 的ch1~ch3用来输出互补型6路pwm分别控制上下臂的6个mos管;ch4用来控制ADC触发的位置

st电机库,ST电机库,stm32,机器人,开源软件

 st电机库,ST电机库,stm32,机器人,开源软件

二)电流采集选择哪二相?

首先源代码中的sector对应的值和Hall传感器对应的状态机的值不是一回事

源代码中sector顺序编码,是这样的:

st电机库,ST电机库,stm32,机器人,开源软件

 源代码“Src\mc_parameters.c”中,配置在不同的sector采集不同的两路相电流:

st电机库,ST电机库,stm32,机器人,开源软件

 “MCLib\F4xx\Inc\r3_2_f4xx_pwm_curr_fdbk.h”文件中定义有:

st电机库,ST电机库,stm32,机器人,开源软件

st电机库,ST电机库,stm32,机器人,开源软件

根据设置,可以知道

CH3对应U

CH4对应V

CH6对应W

st电机库,ST电机库,stm32,机器人,开源软件

全部的sector都构造成固定采集A相和B相,不香吗?这样设计有何考虑呢?

下面的图4可以查阅《马达控制之FOC原理.docx》,是第I扇区波形图

图5摘自《ST MC SDK 5.x 相电流检测与重构 位置速度信息获取.pdf》第8页

st电机库,ST电机库,stm32,机器人,开源软件

结合表1、图4和图5,很容易看出规律:

在第I扇区,“A+相”相比于B+和C+,它处于高电平的时间最长,那么反过来说,“A-相”处于低电平的持续时间最短,所以在第I扇区,不要采集A相,时间太短,对采集点的要求就高了很多,因为采集点要避开管子开关的时间等等。

其它的各扇区依次类推。

采样时间点的选择:

可以参考ST的培训资料,另一个渠道是从硬石公司的资料中可以进行理解

st电机库,ST电机库,stm32,机器人,开源软件

 下面我截屏其中的部分

st电机库,ST电机库,stm32,机器人,开源软件

注明: 本图片版权完全属于“硬石公司”,这里引用,如果有侵权,请联系本人,本博文目的完全是给技术控们贡献一点点自己的理解,没有半点商业行为!

图中绿色阴影部分,也就是C相的下桥臂导通的时间,如果它比“hTafter”时间长2倍,因为C相导通的时间段里有充裕时间进行ADC的采集

在ST马达库 “r3_2_f4xx_pwm_curr_fdbk.c”的源代码中,进行了推而广之:如果三相中下臂桥导通时间最短的那个(也许是A相或者B相),只要满足上面的条件,我们都固定去采集A相和B相,反正时间都足够!

st电机库,ST电机库,stm32,机器人,开源软件

图中B段的时间无法满足进行ADC采样(< hTafter * 2),因为我们只需要采集两相电流,那么我们可以不考虑C相(C相下臂桥导通时间太短了),仅仅采集A相和B相,但是需要满足图中的时间段 A > B

此时将采样区间从C相下桥臂的开通点向前提前,避开“B时间段”

为什么满足了  “A时间段”> “B时间段”, 那么采样点就可以设置在hCntPhc – hTBefore 处呢?

我觉得应该满足的条件是:

hDeltaDuty > (hTafter + hTbefore)

从已知条件:

B < 2* hTafter

hDeltaDuty > B

也推不出我希望的条件!!!

st电机库,ST电机库,stm32,机器人,开源软件

上面第(3)种,无法避开所有干扰,只能硬着头皮采样了...

具体源代码请查阅:

st电机库,ST电机库,stm32,机器人,开源软件文章来源地址https://www.toymoban.com/news/detail-644274.html

到了这里,关于ST电机库v5.4.4源代码分析(5): 每个扇区里面如何选择采样哪二相电流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark 3.2 MemoryManager源代码分析

    MemoryManager 统一管理 Execution 内存和 Storage 内存。 Execution 内存包括 shuffles, joins, sorts and aggregations。 Storage 内存包括 caching 和传播内部的数据结构,如 broadcast 的对象等。 在 UnifiedMemoryManager 中,Execution 和 Storage 内存可以共享堆内存,这两部分可以占用的总内存为 (the total hea

    2024年02月13日
    浏览(32)
  • ChatGPT在源代码分析中可靠吗?

    ChatGPT自发布以来,它在各行各业都掀起了一股学习热潮。由于其惊人的语言理解和生成能力,ChatGPT已经备受全世界瞩目。它在智能对话、翻译、摘要、文本生成等领域中展现出了非凡的能力,让人们对其充满了好奇、敬畏和赞叹之情,同时开始怀疑自己的行业是否马上就会

    2024年02月05日
    浏览(43)
  • TCP/IP协议栈源代码分析

    在 Linux 内核启动过程中,inet_init 是在网络子系统初始化的一部分,负责初始化 TCP/IP 协议栈。下面是从 start_kernel 到 inet_init 的调用路径: start_kernel: start_kernel() 是 Linux 内核启动的入口函数,位于 init/main.c 文件中。 kernel_init: kernel_init() 在 start_kernel 中被调用,它位于 init/ma

    2024年02月03日
    浏览(44)
  • 数学建模之回归分析算法(含matlab源代码)

    目录 一、一元线性回归 1、步骤  2、matlab命令(多元线性回归) 3、举例  二、一元非线性回归  三、多项式回归 1、一元多项式回归  应用  2、多元二项式 应用  四、非线性回归  应用 五、 逐步回归  应用    r²和F越大越好 p越小越好      从残差图可以看出,除第二个

    2024年02月09日
    浏览(64)
  • 网络程序设计:TCP/IP协议栈源代码分析

    从调用栈中可以看到inet_init被调用的过程 start_kernel函数位于 init/main.c中,是内核的入口位置, 它在系统引导过程中被调用。执行该函数后,内核初始化各种子系统,包括调度器、内存管理、文件系统等。在函数最后,会调用 rest_init 函数来继续剩余的初始化工作。 在rest_in

    2024年01月15日
    浏览(51)
  • python+pygame之飞机大战-第一版源代码分析

    目录 一、源代码 二、源代码梳理分析: (一)代码的主要结构 1、引用需要的模块 2、定义的类 3、定义main()函数:主程序 (二)代码分析收获 最好的学习方法是学习别人的代码,加上自己以前比较喜欢雷电这款游戏,所以就从飞机大战入手了,从网上下的源代码和图片素材

    2023年04月10日
    浏览(40)
  • TCP/IP协议栈源代码分析:GDB调试环境搭建及源码分析

    Ubuntu 22.04 LTS Linux-5.4.34 busybox-1.36.0 2.1 安装相关工具 axel是一款多线程下载工具,用于下载Linux内核源代码及其他大文件;build-essential软件包里面包含了很多开发必要的软件工具,比如make、gcc等;QEMU是一种通用的开源计算机仿真器和虚拟器,为自己编译构建的Linux系统运行提供

    2024年02月03日
    浏览(56)
  • 网络程序设计实验:TCP/IP协议栈源代码分析

    深入理解TCP/IP协议栈的源代码结构和功能,探究其与上层套接口和下层数据链路层的关联方式。 分析TCP的三次握手过程,理解其状态转换和数据传输机制。 掌握send和recv操作在TCP/IP协议栈中的执行路径,探究其与上层应用程序的交互方式。 了解路由表、ARP缓存以及IP到MAC地址

    2024年02月03日
    浏览(58)
  • 网络程序设计实验-TCP/IP协议栈源代码分析

    ​ inet_init代码如下: 调用inet_init的过程中,涉及到的函数如下: 1. start_kernel: start_kernel 是Linux内核的启动函数,定义在 init/main.c 文件中。 在启动过程中,首先执行 start_kernel ,这个函数负责进行内核的初始化工作。 2. rest_init: 在 start_kernel 中,会调用 rest_init 函数,该函数的

    2024年02月03日
    浏览(63)
  • Linux内核中的TCP/IP协议栈源代码分析

    目录 背景知识-Linux源码简介 TCP/IP协议栈相关问题 inet_init是如何被调用的?从start_kernel到inet_init调用路径 1.start_kernel(): 2.inet_init() : 3.fs_initcall() 跟踪分析TCP/IP协议栈如何将自己与上层套接口与下层数据链路层关联起来的? TCP的三次握手源代码跟踪分析,跟踪找出设置和发

    2024年02月02日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包