基于STM32 HAL库 AB相编码器测速

目录

Cubemx配置

调试配置​

时钟配置

打开定时器的编码器模式

代码

MotorBoard_Encoder.h

MotorBoard_Encoder.c

Cubemx配置

调试配置

时钟配置

打开定时器的编码器模式

设置自动重装载系数是8191

代码

MotorBoard_Encoder.h

#ifndef __MOTORBOARD_ENCODER_H_
#define __MOTORBOARD_ENCODER_H_

#include "main.h"
typedef struct {
short    speed[10];
short    speed_sum;
    
} ENCODER;
extern ENCODER encoder[2];


void			MotorBoard_Encoder_Init(void);

unsigned short  MotorBoard_Encoder_GetSpeed_0(void);
void 			MotorBoard_Encoder_SetZero_0(void);
void            read_Encoder_0();

unsigned short  MotorBoard_Encoder_GetSpeed_1(void);
void 			MotorBoard_Encoder_SetZero_1(void);
void            read_Encoder_1();


#endif 

MotorBoard_Encoder.c

#include "MotorBoard_Encoder.h"
#include "stdio.h"
#include "tim.h"
ENCODER encoder[2];

void MotorBoard_Encoder_Init(void){
		HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL);
		HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);

}


unsigned short  MotorBoard_Encoder_GetSpeed_0(void){
		return __HAL_TIM_GET_COUNTER(&htim2);
}



unsigned short  MotorBoard_Encoder_GetSpeed_1(void){
		return __HAL_TIM_GET_COUNTER(&htim1);
}


void MotorBoard_Encoder_SetZero_0(void){
		__HAL_TIM_SET_COUNTER(&htim2,0);
}

void MotorBoard_Encoder_SetZero_1(void){
		__HAL_TIM_SET_COUNTER(&htim1,0);
}
	
	
	
void read_Encoder_0(){
	
	encoder[0].speed[0] = MotorBoard_Encoder_GetSpeed_0()>4096?(MotorBoard_Encoder_GetSpeed_0()-8192):MotorBoard_Encoder_GetSpeed_0();
	
	  MotorBoard_Encoder_SetZero_0();
	  	encoder[0].speed_sum=0;
	  	for(int i=0;i<10;i++)
	  	{	
		encoder[0].speed_sum+=(encoder[0].speed[i])*(10-i);
	  	}
		for(int i=0;i<9;i++)
		{
		encoder[0].speed[9-i]=encoder[0].speed[8-i];
		}
	  
}



void read_Encoder_1(){
	
	encoder[1].speed[0] = MotorBoard_Encoder_GetSpeed_1()>4096?(MotorBoard_Encoder_GetSpeed_1()-8192):MotorBoard_Encoder_GetSpeed_1();
	
	  MotorBoard_Encoder_SetZero_1();
	  	encoder[1].speed_sum=0;
	  	for(int i=0;i<10;i++)
	  	{	
		encoder[1].speed_sum+=encoder[1].speed[i]*(10-i);
	  	}
		for(int i=0;i<9;i++)
		{
		encoder[1].speed[9-i]=encoder[1].speed[8-i];
		}
	  
}



思路参考:基于STM32F103C6T6的AB相霍尔编码电机的PID转速调节(CubeMx-HAL库)(未完成-持续更新)_stm32f103 如何获得霍尔电机转速-CSDN博客

  • 13
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值