0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于恩智浦MPC5744P的电机FOC控制中电流的采样

CHANBAEK 来源:嵌入式程序猿 作者:小猿 2023-04-20 14:17 次阅读

摘要

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

准备工作

  1. 安装S32DS for PA, 因为我们在S32DS下开发MPC5744P。
  2. 安装S32DS 的SDK, 我们使用最新版3.0.3

ADC

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

图片

图片

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

图片

CTU

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

图片

CTU框图

图片

图片

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

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

图片

配置和开发

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

图片

图片

ADC配置

图片

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

驱动添加

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

图片

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

图片

转换结果的获取有两种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**************************************************************************/

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

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

测试

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

图片

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 恩智浦
    +关注

    关注

    14

    文章

    5715

    浏览量

    100779
  • adc
    adc
    +关注

    关注

    95

    文章

    5652

    浏览量

    539489
  • 电机
    +关注

    关注

    139

    文章

    8315

    浏览量

    142119
  • FOC
    FOC
    +关注

    关注

    20

    文章

    303

    浏览量

    42181
  • MPC5744P
    +关注

    关注

    1

    文章

    9

    浏览量

    8108
收藏 人收藏

    评论

    相关推荐

    设计了一个关于mpc5744p板子,电路设计基本上都是按照mpc5744p电路,请问为什么烧写程序烧不进去?

    我有个问题,我设计了一个关于mpc5744p板子,电路设计基本上都是按照mpc5744p电路,为什么烧写程序烧不进去??
    发表于 06-29 11:45

    MPC5744P的内部协处理器FPU是默认开启的吗?

    MPC5744P的内部协处理器FPU是默认开启的吗?需不需要通过设置某些寄存器开启相应的硬件浮点运算功能,该怎么做?通过阅读datasheet发现寄存器MSR有相应的功能位,但是在S32没有找到寄存器。
    发表于 10-19 22:59

    MPC5744P的Overlay RAM相关资料分享

    内容提要引言1. MPC5744P的Overlay RAM工作原理介绍2 MPC5744P的Flash Overlay配置详解2.1 平台Flash标定区域描述字寄存器配置字
    发表于 11-04 07:53

    如何学习MPC5744P CAN总线?

    如何学习MPC5744P CAN总线?
    发表于 02-07 08:58

    请问Devkit MPC5744P板上的CAN1端口在哪里?

    我需要在 Devkit MPC5744P 板上测试 Flexcan1 通信,但我只能找到 CAN0 端口。你能告诉我 CAN1 端口在哪里吗?我找不到它。
    发表于 03-14 13:33

    如何对MPC5744P进行编程?

    目前我正在学习如何对 MPC5744P 进行编程,但在尝试创建简单的 UART 应用程序时目前无法解决此问题。当我将 UART + CAN 示例用于 MPC5744P 时,UART 和 CAN 在环
    发表于 03-16 08:36

    如何验证MPC5744P FPU是否正常工作?

    我想知道是否启用了 MPC5744P 浮点单元?我参考了一些帖子并将我的 S32DS 设置为如下所示,是否正确?以及如何选择合适的库支持谢谢~!
    发表于 03-23 08:51

    MPC5744P标志如何保留在RAM

    我正在为 MPC5744P 编写引导加载程序。当在 APP 检测到下载请求时,看门狗复位用于从 APP 跳转到引导加载程序。我想将此请求标志保存在 RAM 。当项目重置时,标志如何保留在 RAM
    发表于 03-27 09:10

    如何为MPC5744P配置内存保护单元?

    我想知道更多关于如何为 MPC5744P 配置内存保护单元,我需要知道如何使用这个配置器。
    发表于 04-04 09:03

    如何读取或访问MPC5744P控制的通用寄存器R1?

    大家好,如何读取或访问MPC5744P控制的通用寄存器R1?谢谢
    发表于 04-06 07:26

    在MCU MPC5744P上,需要SENT模块软件驱动,求分享

    在MCU MPC5744P上,我需要SENT模块软件驱动,谢谢。
    发表于 04-17 08:50

    MPC5744P在正交解码A和B两个通道可以在两个eTimer模块吗?

    MPC5744P在正交解码A和B两个通道可以在两个eTimer模块吗?MPC5744P正交解码后在哪个寄存器读取正转或反转?SDK3.0.3ABI正交解码后CNTR寄存器
    发表于 04-18 06:42

    求助,索取有关在带有MPC5744P MCU的RD33771 EVB启用锁步功能的文档

    关在 MPC5744P MCU 上启用锁步功能的详细文档,我将不胜感激。具体来说,我正在寻找有关在 S32 Design Studio IDE 为此特定微控制器启用锁步模式所需的配置步骤和选项的信息。 我在
    发表于 05-24 08:27

    基于恩智浦MPC5744P的CAN驱动开发和测试

    在S32DS下开发MPC5744P。 安装S32DS 的SDK,  我们使用最新版3.0.3 CAN 恩智浦的MPC5744P控制器局域网络CAN,跟我们之前使用的恩智浦Kinetis  KV, 等系列
    的头像 发表于 09-03 11:35 3724次阅读
    基于恩智浦<b class='flag-5'>MPC5744P</b>的CAN驱动开发和测试

    恩智浦MPC5744P控制器芯片手册

    恩智浦MPC5744P控制器芯片手册免费下载。
    发表于 03-04 16:06 23次下载