树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划(三)


前言

PID控制进程前传之正交码盘速度检测


一、正交码盘速度检测

增量式编码器

增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。

在这里插入图片描述
在这里插入图片描述

注:编码器轴每旋转一圈,A相和B相都发出相同的脉冲个数,但是A相和B相之间存在一个90°(电气角的一周期为360°)的电气角相位差,可以根据这个相位差来判断编码器旋转的方向是正转还是反转,正转时,A相超前B相90°先进行相位输出,反转时,B相超前A相90°先进行相位输出(如下图所示)。把AB两相接入单片机接口既可以获得具体的信息。

STM32编码器接口

在这里插入图片描述
1、读取CNT就是编码器输出脉冲的个数
2、当电机正向转动时,CNT向上计数
3、当电机反转时CNT向下计数
4、TIMx_CR1寄存器的DIR位(第4位) 标识了方向

在这里插入图片描述
电机1
INC_LEFT_A  PE9
INC_LEFT_B  PE11
(TIN1-CH1 和 TIN1-CH2)

电机2
INC_RIGHT_A  PA0
INC_RIGHT _B  PA1
(TIN2-CH1 和 TIN2-CH2

二、Start!

1.定时器配置为编码器模式

在这里插入图片描述
定时器配置65535方便强制转为short模式时65535会转为-1,及时判断正反转
在这里插入图片描述
检测两路脉冲数精度更高
配置TI1andTI2

2.相应调试打开

时钟晶振RCC,串口

3.测试 Demo

其他部分代码不用我多说了都是CUBMAX基本操作
main.c:

int main(void)
{
  /* USER CODE BEGIN 1 */

	int encoder_left, encoder_right;
	
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_TIM1_Init();
  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */
	
	printf("编码器测速程序\n");

	HAL_TIM_Encoder_Start(&htim1,TIM_CHANNEL_ALL);
	HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_ALL);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
		encoder_left = (short)TIM1->CNT ;  
		encoder_right=  - (short)TIM2->CNT ;
		
		printf("encoder_left = %d\n",encoder_left);
		printf("encoder_right = %d\n",encoder_right);
		
		TIM1->CNT = 0;
		TIM2->CNT = 0;
		
		HAL_Delay(1000);
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值