打印
[demo程序]

[NV32F101单轴伺服控制板]正交编码器接收演示

[复制链接]
1584|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 eyancool 于 2018-5-9 19:18 编辑

实现功能:接收汇川伺服驱动器(IS620P)编码器反馈数据1.本演示程序使用NV32F101芯片ETM0定时器模块(PB2,PB3)做为正交编码器(A,B)接收输入口
2.ETM0设置为正交编码器AB相4倍频计数

3.IRQ0外部中断(PB1)做为正交编码器(Z)接收输入口

首先我们要对官方库文件etm.c做以下修改,原正交初始化函数
/*****************************************************************************//*!
*
* @brief 正交解码初始化.
*
* @param[in]    pETM            ETM0/ETM2.
*
* @return none.
*
*****************************************************************************/
void  ETM_QD_Init(ETM_Type *pETM)
{
    ASSERT((pETM == ETM0) || (pETM == ETM2));
         
          SIM->SCGC |= SIM_SCGC_ETM2_MASK;
         
          pETM->MODE |= ETM_MODE_WPDIS_MASK;
          pETM->QDCTRL |= ETM_QDCTRL_QUADMODE_MASK;
          pETM->CNTIN |= 0x0;
          pETM->MOD = 0xFFFF;
          pETM->QDCTRL |= ETM_QDCTRL_QUADEN_MASK;
          pETM->MODE|= ETM_MODE_ETMEN_MASK;  
}


修改后的的函数
void  ETM_QD_Init(ETM_Type *pETM)
{
ASSERT((pETM == ETM0) || (pETM == ETM2));
         
          if(pETM==ETM2)
                {
          SIM->SCGC |= SIM_SCGC_ETM2_MASK;
          }
                else
                {
                SIM->SCGC |= SIM_SCGC_ETM0_MASK;
                }
          pETM->MODE |= ETM_MODE_WPDIS_MASK;
          pETM->QDCTRL &= ~ETM_QDCTRL_QUADMODE_MASK;  //A,B相计数模式
          pETM->CNTIN |= 0x0;
          pETM->MOD = 0xFFFF;
          pETM->QDCTRL |= ETM_QDCTRL_QUADEN_MASK;
          pETM->MODE|= ETM_MODE_ETMEN_MASK;  
}


初始化IRQ0外部中断
void IRQ0_Config()
{
          IRQ_ConfigType  sIRQConfig;

          sIRQConfig.bMode   = IRQ_MODE_EDGE_ONLY;         /*!< 选择边沿检测  */   
          sIRQConfig.bEdg    = IRQ_RISING_EDGE_HIGH_LEVEL; /*!< 选择 上升沿或上升沿/高电平 */
          sIRQConfig.bIntEn  = 1;     /*使能IRQ中断*/
          sIRQConfig.bPeEn   = 1;     /*中断信号输入引脚使能*/
          sIRQConfig.bPdd=1;          /*!<中断请求上拉器件禁用*/
         
          IRQ_SetCallback(IRQ0, &IRQ0_Task);  /*设置回调函数*/
          NVIC_SetPriority(IRQ_IRQn,0);
          IRQ_Init(IRQ0, &sIRQConfig);  
}



IRQ中断回调函数
/*****************************************************************************//*!
*
* @brief IRQ0 回调函数
*        
* @param  none
*
* @return none
*
*****************************************************************************/

void IRQ0_Task(void)
{
        Encodercount=ETM_QD_GetCount(ETM0)+Encodercount;//读取ETM0当前数据
        ETM_QD_Clean(ETM0);                                                //将ETM0计数清零
}

在isr.h添加IRQ外部中断注册

#undef  VECTOR_023
#define VECTOR_023         IRQ0_Isr

extern void IRQ0_Isr(void);
主函数
int32_t XEncodercount,Encodercount;
int main (void)
{
    /*系统初始化*/               
    sysinit();               
    cpu_identify();
    ETM_QD_Init(ETM0);
    IRQ0_Config();
    while (1)
                {               
                        XEncodercount=ETM_QD_GetCount(ETM0)+Encodercount;
                }
}
贴一张,NV32F101驱动伺服电机做加速运动的脉冲波形图.

NV32F101.png (15.09 KB )

加减速波形图

加减速波形图

相关帖子

沙发
123ycli| | 2018-5-19 10:04 | 只看该作者
支持下,波形的实际效果不错,用什么软件读取的呢?

使用特权

评论回复
板凳
HKingS| | 2018-5-19 15:52 | 只看该作者
正交编码器是干什么用的,用在电机方面的吗?

使用特权

评论回复
地板
余三水| | 2018-5-29 09:21 | 只看该作者
HKingS 发表于 2018-5-19 15:52
正交编码器是干什么用的,用在电机方面的吗?

正交编码器(又名增量式编码器或光电式编码器)。正交编码器可以对多种电机控制应用实现闭环控制,诸如开关磁阻电机和交流感应电机。常见于伺服电机中。

使用特权

评论回复
5
余三水| | 2018-5-29 09:22 | 只看该作者
123ycli 发表于 2018-5-19 10:04
支持下,波形的实际效果不错,用什么软件读取的呢?

波形确实不错,很给力!

使用特权

评论回复
6
tomyoct| | 2018-5-29 16:29 | 只看该作者
支持下,谢谢分享!

使用特权

评论回复
7
merry_zsp| | 2018-5-30 13:38 | 只看该作者
123ycli 发表于 2018-5-19 10:04
支持下,波形的实际效果不错,用什么软件读取的呢?

应该是PWM输出的波形

使用特权

评论回复
8
123ycli| | 2018-6-24 09:20 | 只看该作者
merry_zsp 发表于 2018-5-30 13:38
应该是PWM输出的波形

我是对这个软件比较好奇的。

使用特权

评论回复
9
afgnhgrf| | 2018-6-27 09:49 | 只看该作者
是自己做的效果吗

使用特权

评论回复
10
jefferson1998| | 2018-11-7 13:56 | 只看该作者
膜拜大佬

使用特权

评论回复
11
whb218| | 2018-11-12 13:14 | 只看该作者
学习了,谢谢!

使用特权

评论回复
12
xujunyi3611| | 2018-11-23 22:35 | 只看该作者
支持下,谢谢分享,希望楼主多多分享例程!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

105

帖子

4

粉丝