• 352查看
  • 0回复

[MCU] FOC控制中电流的采样

[复制链接]


该用户从未签到

发表于 28-3-2024 09:32:09 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


摘要

本篇笔记主要记录基于恩智浦MPC5744P的电机FOC控制中电流的采样。。

准备工作



    安装S32DS for PA, 因为我们在S32DS下开发MPC5744P。

    安装S32DS 的SDK,  我们使用最新版3.0.3

ADC

恩智浦的MPC5744P,含有的ADC子模块有四个,我们使用ADC0的通道0,和ADC1的通道0来做电流的同步采样,通过PWM触发CTU,CTU事件触发ADC电流采样,在CTU的中断中去获取电流的ADC值,经过滤波后就可以做电流算法的闭环控制,这个芯片的ADC 有两种模式。

FOC控制中电流的采样w1.jpg

FOC控制中电流的采样w2.jpg

我们使用电机控制模式,使用内部集成的CTU去触发ADC转换。也可以采用etimer去触发ADC,这次我们采用CTU触发,配置ADC,CTU时钟为80M.

FOC控制中电流的采样w3.jpg

CTU

CTU的利用可以减少CPU的负担,具体的描述可以参考手册下面的描述

FOC控制中电流的采样w4.jpg

CTU框图

FOC控制中电流的采样w5.jpg

FOC控制中电流的采样w6.jpg

因为做电机控制,电流的同步采样非常关键,根据这个框图可以看到,PWM的重装载可以作为触发CTU,CTU产生ADC命令请求去ADC转换。CTU操作的模式有触发模式和顺序模式。我们采用触发模式。

这里需要注意的是CTU的FIFO是不同的,0和1用来做快速采样,而2和3用来配置作为低速采样。

FOC控制中电流的采样w7.jpg

配置和开发

在S32DS开发环境中配置CTU和ADC,

FOC控制中电流的采样w8.jpg

FOC控制中电流的采样w9.jpg

ADC配置

FOC控制中电流的采样w10.jpg

更多参数的配置请参考收据手册,这个需要认真阅读手册配置,可以参考例程。配置完成后,生成驱动,如果没有错的话,我们这里需要完成CTU的中断去获取ADC值。
驱动添加

需要初始化ADC和CTU,添加相应的代码,使用生成的配置结构体

FOC控制中电流的采样w11.jpg

然后还需要完成CTU的中断,

FOC控制中电流的采样w12.jpg

转换结果的获取有两种API, 可以根据自己需要选择,第一种API

/*FUNCTION**********************************************************************

*

* Function Name : CTU_DRV_GetConvData

* Description   : This function returns the conversion data result aligned according

* to the alignment parameter.

*

* Implements    : CTU_DRV_GetConvData_Activity

* END**************************************************************************/

uint16_t CTU_DRV_GetConvData(const uint32_t instance, const uint32_t fifoIdx, ctu_data_align_t alignment)

第二种API

/*FUNCTION**********************************************************************

*

* Function Name : CTU_DRV_GetConvResult

* Description   : This function gets the full conversion result information, with

* the conversion data aligned according to the alignment parameter.

*

* Implements    : CTU_DRV_GetConvResult_Activity

* END**************************************************************************/

voidCTU_DRV_GetConvResult(const uint32_t instance, const uint32_t fifoIdx, const ctu_data_align_t alignment, ctu_conv_result_t * const result)

两种都可以正确获取到ADC值,获取到原始值以后还需要做一些滤波来处理,这些流给大家去实现,因为你的应用不一样,可能采取的滤波算法也不一样。有时候还需要采用多种滤波算法实现对不同干扰的抗扰能力。

测试

添加完代码,没有问题后就可以编译下载到板子上调试观察,可以看到,正确实现了电流的多路采样,可以采集多组值,测量下这里就给大家简单观察下打断点采集到的结果。

FOC控制中电流的采样w13.jpg

同时CTU还有其他一些触发源,大家也可以实验一下,也可以软件触发。但在电机控制中,为了达到同步和快速的电流采样,都是用触发同步采样,提供给算法实施闭环控制。有兴趣的可以多研究研究。




该用户从未签到

发表于 13-3-2025 11:58:00 | 显示全部楼层
回复:

FOC控制中的电流采样是电机控制的关键环节。基于恩智浦MPC5744P的电机FOC控制,电流的采样至关重要。通过ADC模块进行电流采样,利用ADC0通道和ADC1通道进行同步采样。采用PWM触发CTU事件进行ADC电流采样,在CTU中断中获取ADC值,经过滤波处理后进行电流闭环控制。该芯片ADC模块有两种工作模式,应根据实际需求选择合适的模式。在开发过程中,需确保采样的准确性和实时性,以优化电机性能。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 09:24 , Processed in 0.283809 second(s), 35 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.