智能车制作

标题: 求助帖,拉普兰德固件库的正交解码 [打印本页]

作者: 西伯利亚兔    时间: 2016-6-4 11:05
标题: 求助帖,拉普兰德固件库的正交解码
[attach]86048[/attach]



编码器龙邱512迷你编码器,像图中那样初始化,正交解码读出来的值是正负1或者65535,怎么回事,求大腿

作者: 西伯利亚兔    时间: 2016-6-4 11:06
/**
* --------------基于"拉普兰德K60底层库V3"的工程(LPLD_QuadratureDecoder)-----------------
* @file LPLD_QuadratureDecoder.c
* @version 0.1
* @date 2013-9-29
* @BRIEF 利用FTM模块的正交解码功能,实现编码器的正反转测速。
*
* 版权所有:北京拉普兰德电子技术有限公司
* http://www.lpld.cn
* mail:support@lpld.cn
* 硬件平台:  LPLD K60 Card / LPLD K60 Nano
*
* 本工程基于"拉普兰德K60底层库V3"开发,
* 所有开源代码均在"lib"文件夹下,用户不必更改该目录下代码,
* 所有用户工程需保存在"project"文件夹下,以工程名定义文件夹名,
* 底层库使用方法见相关文档。
*
*/
#include "common.h"

/****************************************
说明:
   *分别将编码器的AB相信号接入PTB0、PTB1引脚
   *将MiniUSB线插入RUSH Kinetis开发板的USB
    插座,并连接至电脑USB接口。
   *使用串口调试助手波特率设置为115200
   *使用串口调试助手查看运行结果。
   *使编码器产生正反转,查看运行结果。
****************************************/

//函数声明
void qd_init(void);
void pit_init(void);
void pit_isr(void);
void delay(uint16);
void uart_init(void);
//变量定义
FTM_InitTypeDef ftm_init_struct;
PIT_InitTypeDef pit_init_struct;
UART_InitTypeDef uart5_init_struct;
int32 qd_result=0;

void main (void)
{
  
  //初始化正交解码功能
  uart_init();
  qd_init();
  //初始化PIT定时中断
  //用来定时读取正交解码的计数结果
  pit_init();

  while(1)
  {
    //printf("QD Counter = %d\r\n", qd_result);
    LPLD_UART_PutChar(UART3,(int8)qd_result);
    delay(1000);
  }
}

/*
* 初始化FTM1的正交解码功能
*
*/
void qd_init(void)
{
  //配置正交解码功能参数
  ftm_init_struct.FTM_Ftmx = FTM1;              //只有FTM1和FTM2有正交解码功能
  ftm_init_struct.FTM_Mode = FTM_MODE_QD;       //正交解码功能
  ftm_init_struct.FTM_QdMode = QD_MODE_PHAB;    //AB相输入模式
  //初始化FTM
//ftm_init_struct.FTM_ClkDiv = FTM_CLK_DIV1 ;
  LPLD_FTM_Init(ftm_init_struct);
  //使能AB相输入通道
  //PTB0引脚接A相输入、PTB1引脚接B相输入
  LPLD_FTM_QD_Enable(FTM1, PTB0, PTB1);
}

/*
* 初始化PIT定时器
*
*/
void pit_init(void)
{
  //配置定时周期中断参数
  pit_init_struct.PIT_Pitx = PIT0;
  pit_init_struct.PIT_PeriodMs = 20;    //20毫秒产生一起中断
  pit_init_struct.PIT_Isr = pit_isr;
  //初始化PIT
  LPLD_PIT_Init(pit_init_struct);
  //使能PIT定时中断
  LPLD_PIT_EnableIrq(pit_init_struct);
}

/*
* PIT中断函数
*/
void pit_isr(void)
{
  //获取FTM1的正交解码计数值
  qd_result = LPLD_FTM_GetCounter(FTM1);
  //清空计数器
  LPLD_FTM_ClearCounter(FTM1);
}

/*
* 延时函数
*/
void delay(uint16 n)
{
  uint16 i;
  while(n--)
  {
    for(i=0; i<5000; i++)
    {
      asm("nop");
    }
  }
}


void uart_init(void)
{
  uart5_init_struct.UART_Uartx = UART3; //使用UART5
  uart5_init_struct.UART_BaudRate =115200; //设置波特率9600
  uart5_init_struct.UART_TxPin = PTE4;  //接收引脚为PTE9
  uart5_init_struct.UART_RxPin = PTE5;  //发送引脚为PTE8
  //初始化UART
  LPLD_UART_Init(uart5_init_struct);
}
作者: 西伯利亚兔    时间: 2016-6-4 11:06
/**
* --------------基于"拉普兰德K60底层库V3"的工程(LPLD_QuadratureDecoder)-----------------
* @file LPLD_QuadratureDecoder.c
* @version 0.1
* @date 2013-9-29
* @BRIEF 利用FTM模块的正交解码功能,实现编码器的正反转测速。
*
* 版权所有:北京拉普兰德电子技术有限公司
* http://www.lpld.cn
* mail:support@lpld.cn
* 硬件平台:  LPLD K60 Card / LPLD K60 Nano
*
* 本工程基于"拉普兰德K60底层库V3"开发,
* 所有开源代码均在"lib"文件夹下,用户不必更改该目录下代码,
* 所有用户工程需保存在"project"文件夹下,以工程名定义文件夹名,
* 底层库使用方法见相关文档。
*
*/
#include "common.h"

/****************************************
说明:
   *分别将编码器的AB相信号接入PTB0、PTB1引脚
   *将MiniUSB线插入RUSH Kinetis开发板的USB
    插座,并连接至电脑USB接口。
   *使用串口调试助手波特率设置为115200
   *使用串口调试助手查看运行结果。
   *使编码器产生正反转,查看运行结果。
****************************************/

//函数声明
void qd_init(void);
void pit_init(void);
void pit_isr(void);
void delay(uint16);
void uart_init(void);
//变量定义
FTM_InitTypeDef ftm_init_struct;
PIT_InitTypeDef pit_init_struct;
UART_InitTypeDef uart5_init_struct;
int32 qd_result=0;

void main (void)
{
  
  //初始化正交解码功能
  uart_init();
  qd_init();
  //初始化PIT定时中断
  //用来定时读取正交解码的计数结果
  pit_init();

  while(1)
  {
    //printf("QD Counter = %d\r\n", qd_result);
    LPLD_UART_PutChar(UART3,(int8)qd_result);
    delay(1000);
  }
}

/*
* 初始化FTM1的正交解码功能
*
*/
void qd_init(void)
{
  //配置正交解码功能参数
  ftm_init_struct.FTM_Ftmx = FTM1;              //只有FTM1和FTM2有正交解码功能
  ftm_init_struct.FTM_Mode = FTM_MODE_QD;       //正交解码功能
  ftm_init_struct.FTM_QdMode = QD_MODE_PHAB;    //AB相输入模式
  //初始化FTM
//ftm_init_struct.FTM_ClkDiv = FTM_CLK_DIV1 ;
  LPLD_FTM_Init(ftm_init_struct);
  //使能AB相输入通道
  //PTB0引脚接A相输入、PTB1引脚接B相输入
  LPLD_FTM_QD_Enable(FTM1, PTB0, PTB1);
}

/*
* 初始化PIT定时器
*
*/
void pit_init(void)
{
  //配置定时周期中断参数
  pit_init_struct.PIT_Pitx = PIT0;
  pit_init_struct.PIT_PeriodMs = 20;    //20毫秒产生一起中断
  pit_init_struct.PIT_Isr = pit_isr;
  //初始化PIT
  LPLD_PIT_Init(pit_init_struct);
  //使能PIT定时中断
  LPLD_PIT_EnableIrq(pit_init_struct);
}

/*
* PIT中断函数
*/
void pit_isr(void)
{
  //获取FTM1的正交解码计数值
  qd_result = LPLD_FTM_GetCounter(FTM1);
  //清空计数器
  LPLD_FTM_ClearCounter(FTM1);
}

/*
* 延时函数
*/
void delay(uint16 n)
{
  uint16 i;
  while(n--)
  {
    for(i=0; i<5000; i++)
    {
      asm("nop");
    }
  }
}


void uart_init(void)
{
  uart5_init_struct.UART_Uartx = UART3; //使用UART5
  uart5_init_struct.UART_BaudRate =115200; //设置波特率9600
  uart5_init_struct.UART_TxPin = PTE4;  //接收引脚为PTE9
  uart5_init_struct.UART_RxPin = PTE5;  //发送引脚为PTE8
  //初始化UART
  LPLD_UART_Init(uart5_init_struct);
}
作者: The--One    时间: 2016-6-4 13:03
选用计数模式[attach]86049[/attach]
作者: 申继鹏    时间: 2016-6-4 13:19
楼上应该正解
作者: 西伯利亚兔    时间: 2016-6-5 00:27
谢谢!!!




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2