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

基于树莓派ROSstm32搭载Freertos智能平衡车Day2

  • 前言
  • 一、小车PID控制进程
    • 电机的分类
    • 直流电机的分类
      • 有刷电机
      • 无刷电机
      • 直流减速电机即齿轮减速电机
    • H桥电路
    • PWM
    • STM32-PWM 直流电机驱动
  • 二、测试Start!


前言

上一章节我们搭建了框架,实现了环境数据采集进程,今天做的是PWM控制电机,以及PID调节部分,用的是直流电机,pwm基础将会在本人分类专栏STM32里面详细说明代码,以及一个小实验来帮助大家理解


一、小车PID控制进程

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第1张图片

电机的分类

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第2张图片树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第3张图片

直流电机的分类

直流电机按照结构可分为有刷电机和无刷电机

有刷电机

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第4张图片
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第5张图片
特点: 电刷和换向器之间有摩擦,效率低,低速扭矩大,价格较便宜

无刷电机

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第6张图片
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第7张图片

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第8张图片
特点: 安静,效率高,转矩特性优异,启动电流小,价格较贵

直流减速电机即齿轮减速电机

是在普通直流电机的基础上,组装上微型齿轮减速箱。齿轮减速箱的作用是,提供较低的转速,较大的力矩。同时,齿轮箱不同的减速比可以提供不同的转速和力矩。
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第9张图片
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第10张图片

H桥电路

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第11张图片
为了方便可以用芯片
MC3386电机驱动芯片
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第12张图片

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第13张图片

PWM

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第14张图片
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第15张图片

它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用于测量,通信,功率控制与变换等许多领域。脉冲宽度调制(PWM)是一种对模拟信号电平进行数字编码的方法。通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。

常见应用有:电机控制,DAC输出等

STM32-PWM 直流电机驱动

树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第16张图片
电机1
IN1  PC3
IN2  PA3
PWMA  PA2 (TIM5-CH3)

电机2
IN3  PE15
IN4  PE13
PWMB  PD12(TIM4-CH1)

二、测试Start!

基本配置
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第17张图片
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第18张图片
TIM5也一样通道注意是3
配置PWM
AAR决定了周期
配置:
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第19张图片

CCR初始为0就行
树莓派ROS stm32 slam Freertos VFH+A*避障路径规划-智能平衡计划_第20张图片
测试代码主要部分:

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

	int pwm_value = 100, temp =0;
	
	
  /* 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_TIM5_Init();
  MX_TIM4_Init();
  /* USER CODE BEGIN 2 */

	printf("电机驱动测试程序\n");
	
	//电机1设置
	HAL_GPIO_WritePin(GPIOC, GPIO_PIN_3, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);
	HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_3);
	
	//电机2设置
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_15, GPIO_PIN_RESET);
	HAL_GPIO_WritePin(GPIOE, GPIO_PIN_13, GPIO_PIN_SET);
	HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1);
	

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		
		if(pwm_value >= 8000)
			temp = -100;
		if(pwm_value <= 100)
			temp = 100;
		
		pwm_value = pwm_value + temp;
		TIM5->CCR3 = pwm_value;
		TIM4->CCR1 = pwm_value;
		
		printf("pwm_value = %d\n",pwm_value);
		
		HAL_Delay(500);
		
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

现象加速减速循环
PID调节时注意死区
代码日后更新github,还没有整理,整理完给链接地址

你可能感兴趣的:(树莓派,基于树莓派ROS无人机无人车,raspberry,pi,stm32,freertos,pid,人工智能)