• 方案介绍
  • 附件下载
  • 相关推荐
申请入驻 产业图谱

【代码库】LPC553x电机控制应用框架

07/14 16:20
672
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

gs-motor-control-application-framework-main.zip

共1个文件

LPC553x电机控制应用框架

 

电机控制框架是根据客户需求设计的,旨在提供一个简单易用的示例,用于构建更复杂的解决方案。本示例几乎涵盖了运行基于三相电逆变器应用程序所需的所有功能。重要外设无需额外的 API,所有操作均在底层完成。本示例提供了两个中断、ADC 采样、FreeMASTER 和 RTCESL 库的实现。?本示例本身并不支持电机旋转。它是开发能够旋转电机的应用程序的基础。?更多详情,请参阅应用程序概述

主板:LPCXpresso55S36

 

类别:电机控制

 

外设:ADC、时钟、GPIO、PWM、定时器、UART

 

工具链:MCUXpresso IDE

 

目录

 

  1. 软件
  2. 硬件
  3. 设置
  4. 结果
  5. 应用程序概述
  6. 常见问题解答
  7. 支持
  8. 发行说明

1.软件

 

2.硬件

 

3. 设置

 

要运行示例软件,需要将 FRDM-MC-LVPMSM 插入 LPCXpresso55S36 开发板。如果没有 FRDM-MC-LVPMSM,软件可以工作,但由于功率级缺少电压偏移,ADC 的模拟测量将无法给出正确的数值。您可以在 IDE 和/或 FreeMASTER 中调试软件。

3.1 步骤 1

 

将项目导入 MCUXpresso IDE。

3.1 步骤 2

 

右键单击项目,然后转到 SDK 管理/管理 SDK 组件,将 FreeMASTER 添加到项目中。确保在中间件中已选中 FreeMASTER。单击“确定”,它将把所有必要的 FreeMASTER 文件添加到项目中。

注意:必须预先安装 FreeMASTER 的目标设备 SDK 包

3.1 步骤 3

 

在 main.c 的顶部将 ENABLE_FREEMASTER 设置为 1。

3.2 步骤 4

 

构建项目并将其刷入LPCXpresso55S36板。

3.2 步骤 5

 

从motor_control文件夹运行 FreeMASTER .pmpx 项目并连接到电路板

在某些情况下,需要在刷机后或计算机从睡眠状态唤醒后拔出/插入 EVK USB。修改代码后,FreeMASTER 启动器会在 MAP 文件中更改为接受。

4.结果

 

您可以观察实时模拟值,并根据连接到 FRDM-MC-LVPMSM 板的电源电平正确测量直流总线电压。将 设置ui16Run为 1 后,应该可以明显看到校准程序正确检测并减去了电流通道上的偏移量。

5. 应用概述

 

5.1 外设初始化

 

初始化函数位于mcperiphinit.c源文件中。

5.2 端口和引脚

 

这里有两种初始化方法的示例。两者都使用 PinTool,但方式不同。基本引脚初始化使用工具生成的board/pinmux.c源文件中的BOARDInit_Pins函数。另一种初始化引脚的方法是导出寄存器值(按定义)并手动将其放入寄存器中。这种方法的代码看起来更简洁,但需要用户具备更多 MCU 寄存器方面的知识,并需要手动放置生成的值。

5.3 脉宽调制

 

使用eFlexPWM模块驱动三相电压源逆变器。PWM 频率在?peripheral_init.h.?文件中通过设置PWM_FREQ定义进行配置。根据此频率值,可以通过预处理器值计算PWM_MODULOeFlexPWM 模块。PWM
配置为以对称、中心对齐模式运行。这是通过将INIT寄存器值设置为-MODULO/2并将VAL1寄存器值设置为 来实现的MODULO/2 – 1死区时间值寄存器 DTCNTn 根据 进行配置M1_PWM_DEADTIMEVAL4寄存器用作 ADC 的触发事件,以在零矢量(所有底部开关都处于开启状态)期间对分流电阻电压降进行采样。ADC 的触发输出在寄存器中启用PWM_TCTRL_OUT_TRIG_EN

5.4 模数转换器

 

ADC0 模块在框架中初始化。启用时钟后,使用默认校准功能。大多数情况下,用户需要更新或调整通道采样序列。为此,我们准备了额外的支持性定义,以帮助理解此类 ADC 的命令配置。

5.4.1 ADC命令

 

对命令序列低级编码的主要误解在于通过配置 CMDL 和 CMDH 寄存器来对实际命令和下一个命令的偏移量进行编号。为此,在lpc55s36lowleveladc.h 文件中定义了实际命令 (ACTCMDx) 和下一个命令 (NEXTCMDy) 。使用它们可以使用户更清晰地理解低级配置,因为偏移量编号被定义名称所掩盖。根据参考手册,还创建了其他定义来表达配置参数,请参阅 lpc55s36lowleveladc.h 文件。

```
ADC0->CMD[ACTCMD1].CMDL = ADCCMDLADCH(3U)
| ADC
CMDLCTYPE(CMDLCTYPEDUALSINGLEAB)
| ADC
CMDLMODE(CMDLMODESTANDARD)
| ADC
CMDLALTBADCH(0U)
| ADCCMDLALTBEN(0);

ADC0->CMD[ACTCMD1].CMDH = ADCCMDHCMPEN(0)
| ADC
CMDHWAITTRIG(0)
| ADCCMDHLWI(0)
| ADCCMDHSTS(CMDHSAMPLETIME35)
| ADC
CMDHAVGS(CMDHAVERAGE1)
| ADC
CMDHLOOP(0)
| ADC
CMDHNEXT(NEXTCMD2);
```

5.4.2 ADC FIFO

 

ADC_TCTRL_FIFO_SEL_A初始化的关键部分是FIFO配置。触发控制寄存器和中有一个字段SEL_B。该字段将A、B通道的ADC结果的目标设置为FIFO 0、1。

ADC_TCTRL_FIFO_SEL_A寄存器指示为通道 A 写入 SAR 结果的 FIFO。该字段为 A、B 侧单端和差分转换以及双单端模式下的所有 A 侧转换提供目标。

ADC_TCTRL_FIFO_SEL_B寄存器指示通道B的SAR结果写入哪个FIFO。此字段仅在双单端模式下使用。在此模式下,通道B的SAR结果将写入此字段指定的FIFO编号。

了解结果 FIFO 中的结果数量非常重要。为此,还需要为 ADC 中断设置正确的水印。建议在读取 FIFO 之前读取 FIFO 中的结果数量,并将其与配置的预期转换次数进行比较。

5.4.3 高速SCMP

 

高速比较器设置为连续模式。MSEL 多路复用器设置为内部 8 位 DAC。PSEL 多路复用器设置为通道 3,在本例中为直流总线电流。HSCMP 输出作为故障信号路由至 eFlexPWM 模块。

5.4.4 定时器

 

Ctimer 0 用作带中断的慢循环(1kHz)周期定时器

5.4.5 输入复用器

 

该多路复用器允许在外设之间路由信号。在项目中,它使用引脚工具进行配置。路由信号显示为“n/a”引脚。

5.5 ADC 结果处理

 

为了更好地理解 ADC 的功能,本例中将 ADC 结果存储在 32 位变量中,以便观察其他状态位。然后,32 位结果被屏蔽ADC_RESFIFO_D_MASK并存储到 16 位变量中。对于特定结果,需要减去一个偏移量,并使用 RTCESL 移位至完整的 16 位范围。ADC 结果存储在AdcGetResults()函数中并进行调节。

5.6 应用程序扩展

 

ADC 结果在函数中进行缩放ScaleValues()。使用MLIB_ConvSc_FLTsf函数将结果缩放并转换为浮点数,例如:


sMotor.fltVdcb = MLIB_ConvSc_FLTsf(sMotor.f16Vdcb, fltDcBusVoltageScale);

使用所需的分数(整数)ADC 结果作为输入和浮点常数,定义例如直流总线电压的完整硬件量程。

5.7 应用状态机

 

应用程序状态机实现为指向该应用程序状态函数的指针数组。

```
typedef void (tPointerFcn)(void); / pointer to function */

static tPointerFcn AppStateMachineFast[] = {AppInitFast,AppStopFast,AppStartFast,AppRunFast,AppErrorFast};
```

main.c源代码 中有两个状态机调用:AppStateMachineSlow在 CTIMER ISR(慢循环)中 AppStateMachineFast在 ADC ISR(快循环)中

具体的状态机函数位于motor_control.c中,除快速循环的 INIT、STOP 和 RUN 状态外,大多数函数为空。状态由ui8MotorState用于两个状态机的变量控制和指示。状态变量的更改严格在转换函数中完成。转换函数不属于数组指针,它们是独立的,并且易于根据用户所需的转换进行重写和更新。

在快速循环的 INIT 状态下,有一个变量初始化的示例。在快速循环的 Stop 状态下,应用程序正在等待ui16Run > 0条件。然后,它会转换到 START 状态。START 状态用于例如对齐目的,根据状态图,它会转到 RUN 状态。

6. 常见问题解答

 

尚未发现针对该项目的常见问题解答。

7. 支持

 

项目元数据

 

董事会徽章

类别徽章

周边徽章 周边徽章 周边徽章 周边徽章 周边徽章 周边徽章

工具链徽章

来源:恩智浦appcodehub

  • gs-motor-control-application-framework-main.zip
    下载
恩智浦

恩智浦

恩智浦半导体创立于2006年,其前身为荷兰飞利浦公司于1953年成立的半导体事业部,总部位于荷兰埃因霍温。恩智浦2010年在美国纳斯达克上市。恩智浦2010年在美国纳斯达克上市。恩智浦半导体致力于打造全球化解决方案,实现智慧生活,安全连结。

恩智浦半导体创立于2006年,其前身为荷兰飞利浦公司于1953年成立的半导体事业部,总部位于荷兰埃因霍温。恩智浦2010年在美国纳斯达克上市。恩智浦2010年在美国纳斯达克上市。恩智浦半导体致力于打造全球化解决方案,实现智慧生活,安全连结。收起

查看更多

相关推荐