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

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

3天内不再提示

利用电机控制中PLU模块与CTIMER计数器解码电机

恩智浦MCU加油站 来源:恩智浦NXP社区 作者:恩智浦NXP社区 2022-12-01 09:09 次阅读

电机控制中,实时获取电机转子位置是非常重要的。通过监测电机轴或机械设备运动的位置可以计算电机转速。当电机转动时,编码盘传感器(Encoder)会发出类似于正交PWM波的高低电平信号,对此信号进行解码,可以得到电机转动角度及方向。

DSC系列MCU的Quad Timer(TMR)外设可以对正交编码信号解码,有些客户使用LPC55XX系列也需要解码,本文用PLU模块对Encoder的信号解码,用计数器计数解码信号,进而得到转子位置及速度。

1. 标准推拉输出

DSP系列MCU的Quad Timer(TMR)外设可以对正交编码信号进行解码,如下:

在进行解码时,其实是两个信号发生电平翻转时进行计数,那么可以理解为对这两个信号做异或运算,对结果信号上升沿和下降沿进行计数,就可实现解码功能。利用可编程逻辑单元PLU对正交编码信号做异或运算,利用CTIMER计数器对输出信号进行计数,同样可以达到Quad Timer(TMR)解码效果。

2. 配置PLU与CTIMER

PLU(Programmable Logic Unit),即可编程逻辑单元,可创建小型组合与时序逻辑电路。LPC804与LPC55XX的PLU在使用上是完全相同的,包含了6个输入、8个输出、26个5输入查找表(LUT)、4个触发器(state Flip-Flops),详细介绍如下: https://www.nxpic.org.cn/module/forum/thread-622667-1-1.html 用PIO_19与PIO_20产生类似于正交编码信号,将两路信号输入PLU模块的IN3与IN4,进行异或运算,再输出到OUT5,将OUT5信号输入到CTIMER计数器进行计数,如下:

以LPC55S69-EVK开发板为例,具体的引脚使用如下:

配置PLU与CTIMER引脚,如下:

打开PLU与CTIMER时钟,如下:

添加PLU外设,如下:

配置CTIMER外设,在main.c文件中添加CTIMER初始化,上升沿与下降沿都可触发计数器。假如电机转一圈触发4096次计数器,电机在旋转60°时要控制电机变相,当计数器值为4096/6 = 682时,触发一次ctimer中断,在中断处理函数中控制电机,如下:

uint32_t motor_flag = 0;
const ctimer_config_t CTIMER0_config = {
  .mode = kCTIMER_IncreaseOnBothEdge,
  .input = kCTIMER_Capture_0,
  .prescale = 0
};
const ctimer_match_config_t CTIMER0_Match_0_config = {
  .matchValue = 681,
  .enableCounterReset = true,
  .enableCounterStop = false,
  .outControl = kCTIMER_Output_NoAction,
  .outPinInitState = false,
  .enableInterrupt = true
};
/*Single callback functions definition */
ctimer_callback_t CTIMER0_callback[] ={ctimer0_match0_callback};
static void CTIMER0_init(void) {
  /* CTIMER0 peripheral initialization */
  CTIMER_Init(CTIMER0, &CTIMER0_config);
  /* Interrupt vector CTIMER0_IRQn priority settings in theNVIC. */
  NVIC_SetPriority(CTIMER0_IRQn, 0);
  /* Match channel 0 of CTIMER0 peripheral initialization*/
  CTIMER_SetupMatch(CTIMER0, kCTIMER_Match_0, &CTIMER0_Match_0_config);
  CTIMER_RegisterCallBack(CTIMER0,CTIMER0_callback, kCTIMER_SingleCallback);
  CTIMER_StartTimer(CTIMER0);
}
void ctimer0_match0_callback(uint32_t flags)
{
    motor_flag++;
}

下载PLU configure tool,下载链接如下:

https://www.nxp.com/mcu-plu-config-tool 打开PLU配置工具,选择原理图设计,做一个异或运算,如下:

7305c920-7110-11ed-8abf-dac502259ad0.jpg

点击菜单栏File->Export->PLU source file将其导出为C文件,将C文件的内容复制到main函数中,如下:

    PLU->LUT[4].INP_MUX[0] = 0x00000003; /* IN3 (IN3) */
    PLU->LUT[4].INP_MUX[1] = 0x00000004; /* IN4 (IN4) */
    PLU->LUT[4].INP_MUX[2] = 0x0000003F; /* default */
    PLU->LUT[4].INP_MUX[3] = 0x0000003F; /* default */
    PLU->LUT[4].INP_MUX[4] = 0x0000003F; /* default */
    PLU->LUT_TRUTH[4] = 0x66666666; /* XOR01 (XOR01) STD 2INPUT XOR */
    PLU->OUTPUT_MUX[5] = 0x00000004; /* LUT4 (XOR01) ->OUT5 */

利用GPIO产生正交编码信号,CTimer进行计数,当计数到682时会触发中断进入回调函数,计数器值(TC)会自动清零,重新计数,如下:

while(1) {
     GPIO_PortToggle(GPIO,0, 1u << 19);
     SysTick_DelayTicks(5U);
     GPIO_PortToggle(GPIO,0, 1u << 20);
     SysTick_DelayTicks(5U);
        motor_counter = CTIMER0->TC;    }

3. 测试结果 逻辑分析仪测试结果如下:

73245ad4-7110-11ed-8abf-dac502259ad0.jpg

调试时,计数器的值如下所示:

73428d10-7110-11ed-8abf-dac502259ad0.jpg

示例代码:LPC55S69_Project_motor_counter.zip

审核编辑:郭婷

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

    关注

    3525

    文章

    1855

    浏览量

    268338
  • 电机
    +关注

    关注

    142

    文章

    8929

    浏览量

    145064
  • 计数器
    +关注

    关注

    32

    文章

    2253

    浏览量

    94343
  • TMR
    TMR
    +关注

    关注

    5

    文章

    77

    浏览量

    18971
  • plu
    plu
    +关注

    关注

    1

    文章

    6

    浏览量

    7264

原文标题:利用可编程逻辑单元PLU与CTIMER计数器解码电机

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何通过labview和NI USB 6341(4计数器控制4相5线步进电机

    本人硬件有NI USB 6341最多能4路计数器输出(可以分别生成PWM)。一个4相5线步进电机一个ULN2003电机驱动。我想用labview
    发表于 12-23 13:53

    请分享Ctimer计数器捕获程序的示例程序

    我目前正在研究 OM13098LPCxpresso54628 开发板。请分享 Ctimer 计数器捕获程序的示例程序,或者配置 ctimer 每 1 秒捕获一次输入脉冲所涉及的步骤是什么。
    发表于 06-09 07:33

    基于VHDL的正交编码脉冲电路解码计数器设计

    针对正交编码脉冲电路脉冲(quadratureencoderpulse,QEP)的解码计数的问题,给出了QEP解码计数器的解决方案.本方案在复杂可编程逻辑
    发表于 03-01 16:36 98次下载

    利用负载量反馈的通用电机速度控制器电路图

    利用负载量反馈的通用电机速度控制器电路图
    发表于 04-03 09:10 887次阅读
    <b class='flag-5'>利用</b>负载量反馈的通<b class='flag-5'>用电机</b>速度<b class='flag-5'>控制器</b>电路图

    利用复位端构成的模6计数器电路

    利用复位端构成的模6计数器电路 利用集成计数器的预置端和复位端可以构成任意模计数器。下图所示依次是利用
    发表于 01-12 13:54 5359次阅读
    <b class='flag-5'>利用</b>复位端构成的模6<b class='flag-5'>计数器</b>电路

    环形计数器和扭环形计数器

    环形计数器和扭环形计数器 移位寄存也可以构成计数器,称为移位型计数器。它有两种结构:环形计数器
    发表于 01-12 14:07 9668次阅读

    TER偏航纽缆计数器原理

    偏航纽缆计数器用于控制工业机械的动作。通过诸如接触或可编程控制器用作电机辅助控制装置。
    发表于 03-08 11:20 4931次阅读

    计数器控制及应用

    计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统主要是对脉冲的个数进行计数,以实现测量、
    发表于 09-25 10:13 8次下载
    <b class='flag-5'>计数器</b>的<b class='flag-5'>控制</b>及应用

    24进制计数器的设计

    讨论,但各文献侧重于多次置数控制方法的实现以及侧重multsim仿真软件的应用。因此义主要讨论的是利用已有集成计数器设计任意计数器时,其实
    发表于 11-09 16:36 81次下载
    24进制<b class='flag-5'>计数器</b>的设计

    计数器原理

    计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统主要是对脉冲的个数进行计数,以实现测量、
    的头像 发表于 01-24 14:35 6.5w次阅读

    基于计数器按钮控制电机程序启动与停止

    基于计数器按钮控制电机程序启动与停止
    发表于 04-02 16:50 16次下载
    基于<b class='flag-5'>计数器</b>按钮<b class='flag-5'>控制</b>的<b class='flag-5'>电机</b>程序启动与停止

    同步计数器和异步计数器是什么 同步计数器和异步计数器的主要区别?

    在数字电子产品计数器是由一系列触发组成的时序逻辑电路。顾名思义,计数器用于计算输入在负或正边沿转换中出现的次数。根据触发触发的方式,
    的头像 发表于 03-25 17:31 2.5w次阅读
    同步<b class='flag-5'>计数器</b>和异步<b class='flag-5'>计数器</b>是什么 同步<b class='flag-5'>计数器</b>和异步<b class='flag-5'>计数器</b>的主要区别?

    同步计数器和异步计数器各有什么特点

    同步计数器和异步计数器是两种常见的数据结构,它们都用于控制对共享资源的访问。它们的主要作用是实现多个线程之间的同步和并发控制。尽管它们都被用于同步的目的,但它们有很多不同的特点和用例。
    的头像 发表于 12-15 10:49 1853次阅读

    计数器的特点和参数

    计数器作为一种常用的电子元件,在电子设备和系统扮演着至关重要的角色。它们不仅用于存储和增减数字值,还广泛应用于时序和频率测量、事件计数控制步进
    的头像 发表于 08-29 14:54 619次阅读

    正交解码计数器

    正交解码计数器
    发表于 09-06 11:41 0次下载