【FOC无刷电机控制】六步换向、FOC,STM32cubemx从零开始搭建BLDC六步换相代码、FOC代码(基于霍尔传感器)

2023-05-16

目录

  • O、前言
    • 1 个人经验
    • 2 软硬件介绍
  • 一、六步换相
    • 1 新建cubemx工程
    • 2 工程基础配置
      • (1)RCC时钟配置
      • (2)SYS 调试接口
      • (3)工程设置,生成MDK工程
    • 3 串口
      • (1)cubemx配置
      • (2)printf重映射
      • (3)测试
    • 4 霍尔传感器
      • (1)Cubemx配置
      • (2)初始化启动
      • (3)测试定时中断
      • (4)测试霍尔中断
    • 4 开环控制
      • (1)普通PWM cubemx配置
      • (2)普通GPIO配置
      • (3)开环控制
  • 二、FOC

O、前言

  • 用作备忘录,也希望能帮助正在入门摸索的朋友少走弯路,从外设开始,到开环,到闭环。
  • 参考文章代码:正点原子、野火、硬石,三家文档几乎一样。(个人感觉原子文档写的好)

1 个人经验

  • 刚开始学无刷电机控制时是直接去看的FOC,网上理论一大堆,看了几天,理论大概明白了,想去实践编程,发现都是大多都是电机库,或者一些别人的完整代码,没有步骤教学。经过一顿摸索,我的结论是把理论化为单片机代码实际去控制电机的过程,某种程度上比学习理论更困难。
  • 我个人做一些单片机小项目的习惯是从头开始做。从一个空白工程开始,一个外设一个外设的调,调通一个测试一个,要用的所有外设调完再去加入控制代码,由开环到闭环,一步一步的来。直接用别人写好的一套代码总感觉心里没底。
  • 对于无刷电机控制,我的步骤是这样的:1调霍尔传感器,2调PWM,3调开环控制,4调闭环

2 软硬件介绍

  • 软件:STM32cubemx+keil5
  • 硬件:网上买的一块无刷电机驱动板,芯片是STM32G070。要注意的是我的电机是BLDC,2对极,间隔60度安装的霍尔传感器。所以我现在实现的都是 基于霍尔传感器的开闭环控制。暂时没整过基于编码器的、基于无感的。

一、六步换相

  • 六步换向用到的单片机外设:(根据个人板子引脚要做一些修改)
    • TIM3:选择霍尔传感器模式,用于获取3个霍尔值。
    • TIM1:通道123,普通PWM模式,用于驱动半桥电路的3个上半桥。(因为我这边用的是HPWM-LON的控制。)
    • 普通IO:3个,推挽输出,用于驱动半桥电路的3个下半桥。
    • USART2:用于调试用。
    • RTC:用于闭环控制。(这个用RTC中断可能不太合适,但是暂时这样…)
  • 代码整体的调用流程
    • 开环:电机转动换相时,触发霍尔中断,在霍尔中断回调函数里读取当前的相位值,然后根据相位值进行换相。
    • 闭环:在开环的基础上,再开一个定时器,在里边做PID运算,更改占空比设定值。
  • 六步换向-开环控制代码:https://github.com/wyfroom/BLDC_LiuBu_KaiHuan_hall
  • 六步换向-闭环控制代码

1 新建cubemx工程

在这里插入图片描述

2 工程基础配置

(1)RCC时钟配置

  • 选择时钟源,我这块板子只有外部8M晶振。
    在这里插入图片描述
  • 手动输入最大时钟频率,然后回车。我这块板子是64M。
    在这里插入图片描述

(2)SYS 调试接口

  • 我的下载器是SWD两根线的,所以我选这个。
    在这里插入图片描述

(3)工程设置,生成MDK工程

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

  • 点击生成代码
    在这里插入图片描述

3 串口

  • 这快板子没显示屏,调试中串口还是很有必要。
  • 我这块板子是串口2,看好引脚,串口自动配置的引脚不一定是板子上的。比如我这块板子,就不是这两引脚。

(1)cubemx配置

在这里插入图片描述

(2)printf重映射

  • 添加如下代码到工程的 usart.c 文件中的 /* USER CODE BEGIN 0 / 和 / USER CODE END 0 */之间。
#include <stdio.h>
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{
    //具体哪个串口可以更改huart1为其它串口
    HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1 , 0xffff);
    return ch;
}
  • 在main.c里添加头文件 #include <stdio.h>
    在这里插入图片描述
  • 之前忘记说了,这个printf重映射要在keil里也设置一下,不然一使用printf单片机就会卡死。抱歉抱歉(2023.3.30)
    在这里插入图片描述

(3)测试

  • 在main的while里加入如下代码
printf("hello\r\n");
HAL_Delay(1000);

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

4 霍尔传感器

(1)Cubemx配置

  • 32定时器有一种霍尔模式,专门为无刷电机霍尔控制整的叭。
    在这里插入图片描述
  • 打开定时器中断
    在这里插入图片描述
  • 更改引脚名称(可选),为了编程方便
    在这里插入图片描述

(2)初始化启动

在main中加入下面启动代码。

__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_TRIGGER);  //触发:有某个信号触发。 
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);   //更新:有某个寄存器被更新。
HAL_TIMEx_HallSensor_Start_IT(&htim3);

(3)测试定时中断

  • 在工程里新建两个文件:hall.c、hall.h。在main里加头文件。
  • 加入下面中断回调函数,先测基本定时器中断,串口助手看现象。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	printf("tim\r\n");
}

在这里插入图片描述

(4)测试霍尔中断

  • hall.c 加入如下代码
uint8_t state = 0;
//换相中断
void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
{
	state = get_hall_state();
	printf("%d\r\n",state);
}

//获取霍尔传感器值
uint8_t get_hall_state(void)
{
  uint8_t state = 0;
  
#if 1
  /* 读取霍尔传感器 U 的状态 */
  if(HAL_GPIO_ReadPin(hallu_GPIO_Port, hallu_Pin) != GPIO_PIN_RESET)
  {
    state|= 0x01U << 0;
//		printf("u1\r\n");
  }
  
  /* 读取霍尔传感器 V 的状态 */
  if(HAL_GPIO_ReadPin(hallv_GPIO_Port, hallv_Pin) != GPIO_PIN_RESET)
  {
    state |= 0x01U << 1;
//		printf("v1\r\n");
  }
  
  /* 读取霍尔传感器 W 的状态 */
  if(HAL_GPIO_ReadPin(hallw_GPIO_Port, hallw_Pin) != GPIO_PIN_RESET)
  {
    state |= 0x01U << 2;
//		printf("w1\r\n");
  }
#else
  state = (GPIOH->IDR >> 10) & 7;    // 读 3 个霍尔传感器的状态
#endif
	//printf("stateL:%d\n",state);
  return state;    // 返回传感器状态
}

在这里插入图片描述

  • 把电机霍尔接口接到板子上,用手转动电机,能看到串口打印出此时电机对应的霍尔编码值。
    在这里插入图片描述
    在这里插入图片描述
  • 这个时候霍尔的状态值读回来了,也就是什么时候换相可以知道了,下一步就是驱动全桥电路,用3个普通PWM+3个普通IO口。

4 开环控制

(1)普通PWM cubemx配置

在这里插入图片描述

  • 更改引脚名字
    在这里插入图片描述
  • 测试PWM是否正常输出,加入PWM启动代码和初始化占空比。
    用万用表电压档,去测对应引脚电压是否符合占空比值。
  • 在main里加入下面代码:
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_2);
	HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_3);
	__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_3,800);	//U
	__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,0);	//V
	__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,0);	//W

在这里插入图片描述

(2)普通GPIO配置

  • cubemx
    在这里插入图片描述
  • 测试,在main中加入下代码
  • 用电压档,测对应引脚是否正常输出电压。
//普通IO初始化,驱动3个下桥臂
	HAL_GPIO_WritePin(PWMUL_GPIO_Port,PWMUL_Pin,GPIO_PIN_RESET);//UL//GPIO_PIN_SET   GPIO_PIN_RESET
	HAL_GPIO_WritePin(PWMVL_GPIO_Port,PWMVL_Pin,GPIO_PIN_RESET);//VL
	HAL_GPIO_WritePin(PWMWL_GPIO_Port,PWMWL_Pin,GPIO_PIN_RESET);//WL

在这里插入图片描述

(3)开环控制

  • 我的电机是2对极,60度霍尔,所以能用下面这个换相表。同类型电机可以用,不同的话就要网上找一下对应的换相表,然后改下对应代码。
    在这里插入图片描述
  • 在hall.c里加入换相代码
uint16_t state=0;
uint16_t pwm_pulse=0
void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim)
{
	state = get_hall_state();
//	printf("%d\r\n",state);

	//513264
	switch(state)
	{
		case 1:    /* U+ W- */

			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_3,pwm_pulse);	//U+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,0);	//V+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,0);	//W+
			HAL_GPIO_WritePin(PWMUL_GPIO_Port,PWMUL_Pin,GPIO_PIN_RESET);//U-	//GPIO_PIN_SET   GPIO_PIN_RESET
			HAL_GPIO_WritePin(PWMVL_GPIO_Port,PWMVL_Pin,GPIO_PIN_RESET);//V-
			HAL_GPIO_WritePin(PWMWL_GPIO_Port,PWMWL_Pin,GPIO_PIN_SET);//W-
//			printf("%d\r\n",pwm_pulse);
			break;
		
		case 2:     /* V+ U- */

			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_3,0);	//U+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,pwm_pulse);	//V+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,0);	//W+
			HAL_GPIO_WritePin(PWMUL_GPIO_Port,PWMUL_Pin,GPIO_PIN_SET);//U-	//GPIO_PIN_SET   GPIO_PIN_RESET
			HAL_GPIO_WritePin(PWMVL_GPIO_Port,PWMVL_Pin,GPIO_PIN_RESET);//V-
			HAL_GPIO_WritePin(PWMWL_GPIO_Port,PWMWL_Pin,GPIO_PIN_RESET);//W-
			break;
		
		case 3:    /* V+ W- */

			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_3,0);	//U+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,pwm_pulse);	//V+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,0);	//W+
			HAL_GPIO_WritePin(PWMUL_GPIO_Port,PWMUL_Pin,GPIO_PIN_RESET);//U-	//GPIO_PIN_SET   GPIO_PIN_RESET
			HAL_GPIO_WritePin(PWMVL_GPIO_Port,PWMVL_Pin,GPIO_PIN_RESET);//V-
			HAL_GPIO_WritePin(PWMWL_GPIO_Port,PWMWL_Pin,GPIO_PIN_SET);//W-
			break;

		case 4:     /* W+ V- */

			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_3,0);	//U+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,0);	//V+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,pwm_pulse);	//W+
			HAL_GPIO_WritePin(PWMUL_GPIO_Port,PWMUL_Pin,GPIO_PIN_RESET);//U-	//GPIO_PIN_SET   GPIO_PIN_RESET
			HAL_GPIO_WritePin(PWMVL_GPIO_Port,PWMVL_Pin,GPIO_PIN_SET);//V-
			HAL_GPIO_WritePin(PWMWL_GPIO_Port,PWMWL_Pin,GPIO_PIN_RESET);//W-
			break;

		case 5:     /* U+  V -*/

			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_3,pwm_pulse);	//U+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,0);	//V+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,0);	//W+
			HAL_GPIO_WritePin(PWMUL_GPIO_Port,PWMUL_Pin,GPIO_PIN_RESET);//U-	//GPIO_PIN_SET   GPIO_PIN_RESET
			HAL_GPIO_WritePin(PWMVL_GPIO_Port,PWMVL_Pin,GPIO_PIN_SET);//V-
			HAL_GPIO_WritePin(PWMWL_GPIO_Port,PWMWL_Pin,GPIO_PIN_RESET);//W-
			break;
		
		case 6:     /* W+ U- */

			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_3,0);	//U+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,0);	//V+
			__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_1,pwm_pulse);	//W+
			HAL_GPIO_WritePin(PWMUL_GPIO_Port,PWMUL_Pin,GPIO_PIN_SET);//U-	//GPIO_PIN_SET   GPIO_PIN_RESET
			HAL_GPIO_WritePin(PWMVL_GPIO_Port,PWMVL_Pin,GPIO_PIN_RESET);//V-
			HAL_GPIO_WritePin(PWMWL_GPIO_Port,PWMWL_Pin,GPIO_PIN_RESET);//W-
			break;

	}
}
  • 更改pwm_pulse占空比值。然后就可以上电测试。!注意,上电前,一定确保你的这个换相逻辑和你的板子是对应起来的,别一上电上下桥同时导通,烧毁一切。

二、FOC

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【FOC无刷电机控制】六步换向、FOC,STM32cubemx从零开始搭建BLDC六步换相代码、FOC代码(基于霍尔传感器) 的相关文章

  • 树莓派4B连接PCF8591模块

    1 PCF8591是8位的数模 模数转换集成芯片 xff0c 如图 1 xff08 详细介绍可以点击参考 xff09 图 1 PCF8591 2 AIN0 AIN3接模拟输入 xff0c 比如气体传感器 xff0c 能外接三个通道的模拟输入
  • “指定的网络名不再可用”解决办法

    主机操作系统 xff1a win10 linux操作系统 xff1a ubuntu22 04 在Windows下安装ubuntu xff08 wsl xff09 时 xff0c 出现 指定的网络名不再可用 xff0c 解决办法如下 xff1
  • Jetson xavier nx 安装CUDA10.2,和cudnn8.0

    2022 6 16更新 现在Jetson xavier nx 安装CUDA和CUDNN不需要下面那么复杂了 xff0c 可以直接通过刷机将其安装到设备上 在官网下载SDK Manager可以直接将CUDA烧录进设备 xff08 特别注意如果
  • 关于return用法时,return报错。

    在for循环里面return想要跳出全部循环时 xff0c 会报语法错误SyntaxError return outside function 原因是return只能写在def函数里面 没有def n span class token op
  • 联邦卡尔曼滤波

    联邦Kalman滤波 利用Kalman滤波技术对多传感器数据进行最优融合有两种途径 集中式Kalman滤波和分散化滤波 集中式Kalman滤波利用一个滤波器来集中处理所有子系统的信息 分散化滤波利用子滤波器处理子系统的信息通过全局滤波器实现
  • 教你10分钟完成智能小车的PID调速

    简介 这是我在CSDN上面的第一篇博客 xff0c 来分享一下我是如何用最短的时间进行智能小车的PID调速的 在疫情期间比较无聊 xff0c 在某宝买了一个智能小车底盘和一堆零件 xff0c 基于Arduino Due和树莓派进行开发 xf
  • 实战低通滤波和卡尔曼滤波

    目录 背景所需硬件与软件理论基础一阶低通滤波卡尔曼滤波 仿真验证实际验证总结 背景 滤波这个词对任何一个工科生都不会陌生 xff0c 尤其是做控制或者信号方面的从业者和学生 我们不仅可以通过硬件滤波也可以通过软件设计算法滤波 xff0c 这
  • matplotlib保存图片为pdf格式,文字以字体形式保存,可以illustrator编辑,而不是喵点格式。

    用默认的 plt savefig xff08 xff09 保存的图片 xff0c 图利和label都是以瞄点保存的 xff0c 而不是以文字格式 这样在矢量图编辑中想要调整文字大小和字体时都不方便 使用mpl可以设置pdf图片文字以字体形式
  • 树莓派新系统无键盘安装与设置

    sudo raspi config 1 在Boot根目录下创建文件 xff1a wpa supplicant conf xff1a country 61 CN ctrl interface 61 DIR 61 var run wpa sup
  • 无人机自动驾驶软件系列 E01:OFFBOARD控制以及Gazebo仿真

    引言 https gaas gitbook io guide software realization build your own autonomous drone wu ren ji zi dong jia shi xi lie off
  • 一定能解决ROS系统 rosdep update超时问题de简单方法

    rosdep update命令使用 该方法是可以跳过sudo rosdep init初始化命令设置的 xff0c 前提是安装ros xff1a https blog csdn net weixin 44023934 article deta
  • 使用速腾雷达32线Helios和fast-LIO2算法建图(一)

    一 配置激光雷达数据 参考链接Ubuntu18 04 安装速腾聚创最新驱动RSLidar SDK采集XYZIRT格式的激光点云数据 SLAM不学无术小问题 下载驱动文件内部也有使用说明 第一步 xff1a 下载rslidar sdk xff
  • linux下发各种协议包及其详细分析

    申明 xff1a 本实验在一个虚拟机环境下完成 xff0c ip分别为 192 168 26 1 和 192 168 26 132 一 以太帧格式的分析 1 抓取方法描述 在192 168 26 132浏览网页产生数据包 xff1b 通过w
  • 使用速腾雷达32线Helios和fast-LIO2算法建图(三)

    一 建图 1 源码下载 https github com hku mars FAST LIO 2 配置环境 步奏一 安装PCL gt 61 1 8 PCL的安装可以参考 可选 xff0c 建议考虑不用安装 https blog csdn n
  • Ubuntu 18.04 安装RealSense D435教程

    1 更新内核 运行代码 uname r 如果 gt 61 4 4 0 50的版本则ok xff0c 否则需要升级内核 2 更新cmake xff08 需要3 6以上版本 xff09 xff08 需要科学上网 xff09 首先下载cmake
  • Ros 与 STM32 之Ros串口同设备USB固定

    研究后发现Ros与STM32 都是通过串口 TTL转USB 的方式连接到USB A xff1a 有两种形式 一种 使用 ros kinetic serial 中的py 包用的ROS的serial功能包 B xff1a 另一种则是使用编写的c
  • ROS 动态参数 实时调参方式

    前言 xff1a 开发者常常需要动态调整参数以查看机器人在不同参数下的性能表现 xff1b 无论是通过YAML 文件配置参数还是通过节点句柄操作参数 xff0c 都会面临一个问题 xff0c 如果节点不主 动查询参数值 xff0c 就无法获
  • 上下文切换的概念

    上下文切换 xff08 也可以称作进程切换或任务切换 xff09 xff0c 它指的是 CPU 从一个进程 xff08 或线程 xff09 切换至另一个进程 xff08 或线程 xff09 上下文指的是某一时间点 CPU 寄存器和程序计数器
  • 多旋翼-六轴硬件选型

    挑战杯所用六轴 机架 定 桨叶机重 定 拉力 xff08 机重除以0 4 xff09 拉力 电池 桨叶 定 电机定 电调
  • 基于51的扫地车

    51复习 AT89S51系列单片机的ISP下载是通过P15 P16 P1 7 RST引脚来下载的 xff0c 而宏晶国产STC单片机则具有串口ISP功能 xff0c 可直接使用串口 xff0c 将程序下载进单片机 40个引脚 https b

随机推荐

  • pix2.4.8 从入手到装机(2021.4.4)

    2023 2 10 我重新完完整整的又走了一次 xff0c 记录了一下过程 xff1a 飞控是pix2 4 8 xff0c 固件是APM 原文 xff1a 咸鱼入手2套辣鸡pix xff0c 第一次使用并检查硬件好坏 xff0c 确认是否退
  • 焊板常用元器件(2021.4.6)

    钽电容 正负 xff1a 有线一端为正级 耐压 xff1a 2 Led Key buzzer 按键 xff1a 对角线焊到电路中 灯 xff1a 绿条是负 蜂鸣器 xff1a 区分有无源 xff0c 引脚 xff0c 有正负为有源 xff0
  • 恒温箱课程设计(2021.4.12)

    第一步 方案选择 淘宝闲鱼csdn 主要难点在于 xff1a 小控大是难点 xff0c 对执行器和驱动的选择 最终 电磁和固态继电器都不行 xff0c 要可控相位的继电器 xff0c 太贵了 只能固态了 xff0c if控制 xff0c 效
  • JVAV学习笔记(二)—接口

    JVAV学习笔记 xff08 二 xff09 接口 abstract class AbsDemo abstract void show1 abstract void show1 interface Inter public static f
  • CAD2020入门学习(2021.4.13)

    学习途径 xff1a 软件管家CAD2018网课 第一步 界面熟悉 第二步 新建 保存 关闭 第三步 基本操作 xff1a 鼠标 xff0c 命令 xff0c 相对坐标和极坐标 第四步 搜索 xff1a CAD快捷键 画直线 L画圆 C画弧
  • 32平衡车

    1 组装 底板和主板到了 xff0c 组装 xff0c 测试 问题 xff1a tb6612电容炸了 原因 xff1a xff1f xff1f xff1f xff08 1 xff09 钽电容纹波电流小 xff0c 扛过流能力弱 xff0c
  • 储物柜2022.1.1

    keil pack http www keil com dd2 pack keil 安装 httpsblog csdn netMatcha ice creamarticledetails118684582 Jlink驱动 https www
  • 【动手学深度学习】环境配置(详细记录,从vmware虚拟机安装开始)

    目录 装了很多次环境 xff0c 步骤已精简每一步都不可缺 xff0c 也得按顺序第一大步 xff1a VMware 安装 43 使用 VMware 下载及安装 ubuntu18 04 下载 VMware 使用 第二大步 xff1a ubu
  • 【物资投放无人机】记录( ROS + PX4 + YOLOV5 + ESP8266 + 舵机)

    目录 写在前面 xff1a 硬件环境写在前面 xff1a 软件环境一 无人机组装 调试 xff08 PX4或APM xff09 二 Jetson Nano 43 ROS 43 YOLO 目标检测实现 win10安装YOLOv5环境 训练模型
  • 【K210踩坑】pytorch模型转kmodel,Dock上使用。(最终未实现)

    目录 前言一 踩大坑二 pytorch 转 kmodel第 步 xff1a pytorch模型搭建 训练 保存第 步 xff08 思路一 xff09 xff1a pytorch 转 onnx 转 pb 转 tflite 转 kmodel1
  • 【常用命令】conda、linux、ros

    目录 一 conda xff08 0 xff09 获取帮助 xff08 1 xff09 列出所有环境 xff08 2 xff09 创建新环境 xff08 3 xff09 删除环境 xff08 4 xff09 激活环境 xff08 5 xff
  • 【车机协同slam】miniPC、Nano、T265、UWB linktrack P-B

    目录 0 前言0 1 软硬件0 2 实现步骤 一 装系统 换源 装ROS1 1 装系统 换源2 1 装ROS 二 T2652 1 ubuntu 安装 T265 SDK xff08 已测18 20 Nano xff09 xff1a 2 2 u
  • 【keil使用】

    目录 一 下载安装1 1下载安装破解1 2 pack包下载 二 颜色设置三 基础使用四 仿真使用 一 下载安装 1 1下载安装破解 1 2 pack包下载 二 颜色设置 三 基础使用 四 仿真使用
  • 【焊接基础】

    目录 一 焊接工具 xff08 多了解 xff09 一 常见元器件焊接1 1 稳压管1 2 保险丝1 3 二 常见电路2 1 降压电路2 2 防反接电路 三 焊接方法3 1 焊接步骤3 2 芯片 QFP封装3 3 芯片 BGA封装 四 常见
  • ONOS安装和运行

    安装运行ONOS 1 安装Karaf Maraf http archive apache org dist karaf 3 0 3 apache karaf 3 0 3 tar gz http archive apache org dist
  • 【mavros安装】GeographicLib踩坑及解决

    目录 xff08 0 xff09 介绍 xff08 1 xff09 安装mavros xff08 2 xff09 安装GeographicLib xff08 官网方法 xff0c 报错了就用下一个我用的方法 xff09 xff08 2 xf
  • 【PCB设计】

    目录 一 原理图二 PCB2 1 走线宽度 一 原理图 二 PCB 2 1 走线宽度 电流 xff1a xff08 主要考虑发热和压降问题 xff0c 走线相当于电阻 xff0c 越粗电阻越小 xff0c 发热越小 xff09 过1A电流
  • 【嵌入式基础&常识】单片机

    学习知识 xff1a 先广度 xff0c 后深度 一 应该知道的常识1 ARM xff08 内核 xff09 2 单片机 61 MCU 61 微控制器 xff08 芯片 xff09 3 电路板 xff08 板卡 xff09 4 嵌入式系统
  • 【深度学习环境配置】windows版(anaconda、vscode)

    目录 一 环境管理软件 Anaconda1 1 下载安装1 2 conda换源1 3 pip安装提速 二 IDE软件 Vscode1 1 下载安装1 2 添加扩展1 3 更改编译器 三 python包安装1 安装pytorch2 安装ope
  • 【FOC无刷电机控制】六步换向、FOC,STM32cubemx从零开始搭建BLDC六步换相代码、FOC代码(基于霍尔传感器)

    目录 O 前言1 个人经验2 软硬件介绍 一 六步换相1 新建cubemx工程2 工程基础配置 xff08 1 xff09 RCC时钟配置 xff08 2 xff09 SYS 调试接口 xff08 3 xff09 工程设置 xff0c 生成