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


前言

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


一、小车PID控制进程

在这里插入图片描述

电机的分类

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

直流电机的分类

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

有刷电机

在这里插入图片描述
在这里插入图片描述
特点: 电刷和换向器之间有摩擦,效率低,低速扭矩大,价格较便宜

无刷电机

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

在这里插入图片描述
特点: 安静,效率高,转矩特性优异,启动电流小,价格较贵

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

是在普通直流电机的基础上,组装上微型齿轮减速箱。齿轮减速箱的作用是,提供较低的转速,较大的力矩。同时,齿轮箱不同的减速比可以提供不同的转速和力矩。
在这里插入图片描述
在这里插入图片描述

H桥电路

在这里插入图片描述
为了方便可以用芯片
MC3386电机驱动芯片
在这里插入图片描述

在这里插入图片描述

PWM

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

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

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

STM32-PWM 直流电机驱动

在这里插入图片描述
电机1
IN1  PC3
IN2  PA3
PWMA  PA2 (TIM5-CH3)

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

二、测试Start!

基本配置
在这里插入图片描述
在这里插入图片描述
TIM5也一样通道注意是3
配置PWM
AAR决定了周期
配置:
在这里插入图片描述

CCR初始为0就行
在这里插入图片描述
测试代码主要部分:

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,还没有整理,整理完给链接地址

树莓派平衡车是一种基于树莓派开发板的自平衡小车。根据引用\[1\]和引用\[3\]的描述,这个平衡车使用了树莓派3b作为主控制器,并搭配了MPU6050陀螺仪传感器和L298N电机驱动。通过读取MPU6050传感器获取角度数据,并使用一阶互补滤波算法对角度进行滤波处理。根据滤波后的角度数据,控制L298N电机驱动实现平衡控制。 在硬件方面,平衡车还使用了双频网卡、DC降压模块给树莓派供电、带编码器的130电机以及3串18650电池作为电源。根据引用\[3\]的描述,可能由于电机转速较低,导致小车性能较弱。为了解决这个问题,可以考虑使用升压模块提高电压,以提高电机转速。 在软件方面,可以使用Python编程语言进行开发。根据引用\[1\]和引用\[2\]的描述,可以使用PyCharm进行远程调试,并安装必要的库,如smbus、numpy和pandas。此外,可以编写代码来读取MPU6050传感器的角度数据,并使用一阶互补滤波算法对角度进行滤波处理。 总结起来,树莓派平衡车是一种基于树莓派开发板的自平衡小车,通过读取MPU6050传感器获取角度数据,并使用一阶互补滤波算法对角度进行滤波处理,从而实现平衡控制。在硬件方面,平衡车还使用了双频网卡、DC降压模块给树莓派供电、带编码器的130电机和3串18650电池作为电源。在软件方面,可以使用Python编程语言进行开发,并使用PyCharm进行远程调试。 #### 引用[.reference_title] - *1* [树莓派从开箱到平衡车](https://blog.csdn.net/weixin_42881084/article/details/107040373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [树莓派 python 平衡小车](https://blog.csdn.net/gaoteng2008/article/details/104383599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值