玩转X-CTR100 l STM32F4 l 电机正交编码器

我造轮子,你造车,创客一起造起来!塔克创新资讯【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

本文介绍X-CTR100控制器的电机正交编码器,X-CTR100具有2路32位AB项正交编码器和3路16位正交编码器,共5路。

可用于电机转速和角度测量,用于智能车、机械臂、机器人制作。

原理

 

舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前,在高档遥控玩具,如飞机、潜艇模型,遥控机器人中已经得到了普遍应用。

舵机的形状和大小多到让人眼花缭乱,但大致可以如图C所示分类。最右边身材不错的是常见的标准舵机,中间两个小不点是体积最小的微型舵机,左边的魁梧的那个是体积最大的大扭力舵机。它们都是同样的三线控制,因此你可以根据需求换个大个的或小个的。

例程

初始化编码器,每隔500ms采样一次编码器数值并串口输出显示。

硬件说明

硬件资源:

  • 串口UART1
  • RA、RB扩展接口(TIM2 32AB正交编码器接口)
  • 具有正交编码器电机(需自备)

硬件连接:

软件生态

X-SOFT软件生态,X-API扩展文件如下。

ax_encoder.c——X-CTR100 电机正交编码器源文件

ax_encoder.h——X-CTR100 电机正交编码器头文件

接口函数

void AX_ENCODER_TIM2_AB_Init(uint32_t cycle); //编码器AB初始化(32位)

uint32_t AX_ENCODER_TIM2_AB_GetCounter(void); //编码器AB获取计数器数值

void AX_ENCODER_TIM2_AB_SetCounter(uint32_t count); //编码器AB设置计数器数值

 

void AX_ENCODER_TIM5_CD_Init(uint32_t cycle); //编码器CD初始化(32位)

uint32_t AX_ENCODER_TIM5_CD_GetCounter(void); //编码器CD获取计数器数值

void AX_ENCODER_TIM5_CD_SetCounter(uint32_t count); //编码器CD设置计数器数值

 

void AX_ENCODER_TIM3_GH_Init(uint16_t cycle); //编码器GH初始化

uint16_t AX_ENCODER_TIM3_GH_GetCounter(void); //编码器GH获取计数器数值

void AX_ENCODER_TIM3_GH_SetCounter(uint16_t count); //编码器GH设置计数器数值

 

void AX_ENCODER_TIM4_KL_Init(uint16_t cycle); //编码器KL初始化

uint16_t AX_ENCODER_TIM4_KL_GetCounter(void); //编码器KL获取计数器数值

void AX_ENCODER_TIM4_KL_SetCounter(uint16_t count); //编码器KL设置计数器数值

 

void AX_ENCODER_TIM1_OP_Init(uint16_t cycle); //编码器OP初始化

uint16_t AX_ENCODER_TIM1_OP_GetCounter(void); //编码器OP获取计数器数值

void AX_ENCODER_TIM1_OP_SetCounter(uint16_t count); //编码器OP设置计数器数值

软件说明

函数初始化编码器,设定编码器计数周期为60000,设置当前值为30000,while循环每隔500ms采样编码器一次,主程序代码如下。

int main(void)

{

    //X-CTR100初始化

    AX_Init(115200);

    printf("***电机正交编码器例程***\r\n\r\n");

 

    //模块初始化及配置

    AX_ENCODER_TIM2_AB_Init(60000); //32位正交编码器初始化,计数周期60000

    AX_ENCODER_TIM5_CD_Init(60000); //32位正交编码器初始化,计数周期60000

    AX_ENCODER_TIM3_GH_Init(60000); //16位正交编码器初始化,计数周期60000

    AX_ENCODER_TIM4_KL_Init(60000); //16位正交编码器初始化,计数周期60000

    AX_ENCODER_TIM1_OP_Init(60000); //16位正交编码器初始化,计数周期60000

 

                                     //设置编码器当前计数值为30000

    AX_ENCODER_TIM2_AB_SetCounter(30000);

    AX_ENCODER_TIM5_CD_SetCounter(30000);

    AX_ENCODER_TIM3_GH_SetCounter(30000);

    AX_ENCODER_TIM4_KL_SetCounter(30000);

    AX_ENCODER_TIM1_OP_SetCounter(30000);

 

    //X-API测试:5路正交编码器测试    

    printf("*5路正交编码器测试\r\n");

 

    while (1)

    {

        printf("*AB:%5d CD:%5d GH:%5d KL:%5d OP:%5d\r\n",

            AX_ENCODER_TIM2_AB_GetCounter(), AX_ENCODER_TIM5_CD_GetCounter(),

            AX_ENCODER_TIM3_GH_GetCounter(), AX_ENCODER_TIM4_KL_GetCounter(),

            AX_ENCODER_TIM1_OP_GetCounter());

        AX_Delayms(500);

    }

}

实现效果

X-CTR100按照编码器接口定义连接编码器,编码器A、B接口线序可更换。手动转动编码器可观察编码器数值变化,一个方向转动编码器数值增加,另一个方向转动编码器数值减小。

猜你喜欢

转载自www.cnblogs.com/xtark/p/9428629.html
l