自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 收藏
  • 关注

原创 FOC基础算法过程

2025-09-12 12:06:18 173

原创 FOC控制 --- 帕克变换

由克拉克变换,实际上我们已经成功对电机的正弦驱动三相曲线进行降维度,使之变成了一个两轴坐标问题,并且得到其转换关系。但是只有它是不够的,我们还需要将这个理论和旋转电机对应起来,也就是建立电机旋转时的数学模型。

2025-09-12 12:04:26 178

原创 FOC控制-- 克拉克逆变换

在上一节,我们学习了怎么把一个三相时域上的复杂问题用矢量表示,并且用克拉克变换对它进行了降维,得到了降维后的简化表达形式。那么,有没有什么办法能够反过来把降维后的形式重新升维变回原来的三相电流波形呢?有,这就被称为克拉克逆变换。这个在后续的FOC算法中也会很常用到。趁热打铁,我们来看一看怎么进行克拉克逆变换。

2025-09-12 12:02:20 238

原创 FOC控制 克拉克变换

上图中,左边是我们把三相120度相位差的sin状波形抽象化为矢量之后的样子,而右边就是我们需要把这三个矢量进行投影的坐标轴。第二就是利用三角函数对矢量进行降维,降维到两个坐标轴,从此复杂的三相变化问题就降解为了α-β坐标轴的坐标上的数值变化问题。它的思路其实特别的简单,第一就是把三相随时间变换的,相位差为120°的电流波形抽象化为三个间隔120°的矢量。所谓克拉克变换,实际上就是降维解耦的过程,把难以辨明和控制的三相相位差120°电机波形降维为两维矢量。下面我们来进行一次投影过程的详细推导。

2025-09-12 11:58:57 322

原创 HTTP 简单协议格式

2025-09-02 16:40:28 241

原创 IO多路复用 ----epoll

epoll 全称 eventpoll,是 linux 内核实现IO多路转接/复用(IO multiplexing)的一个实现。IO多路转接的意思是在一个操作里同时监听多个输入输出源,在其中一个或多个输入输出源可用的时候返回,然后对其的进行读写操作。epoll是select和poll的升级版,相较于这两个前辈,epoll改进了工作方式,因此它更加高效。

2025-09-02 12:51:35 663

原创 IO多路复用 ----select

1 、待检测集合(第2、3、4个参数)需要频繁的在用户区和内核区之间进行数据的拷贝,效率低 2 、内核对于select传递进来的待检测集合的检测方式是线性的如果集合内待检测的文件描述符很多,检测效率会比较低如果集合内待检测的文件描述符相对较少,检测效率会比较高 3 、使用select能够检测的最大文件描述符个数有上限,默认是1024,这是在内核中被写死了的。

2025-09-02 10:28:20 950

原创 socket编程---TCP通信流程

TCP是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。

2025-08-22 11:10:16 347

原创 socket编程---基础

Socket套接字由远景研究规划局(Advanced Research Projects Agency, ARPA)资助加里福尼亚大学伯克利分校的一个研究组研发。其目的是将TCP/IP协议相关软件移植到UNIX类系统中。设计者开发了一个接口,以便应用程序能简单地调用该接口通信。这个接口不断完善,最终形成了Socket套接字。Linux系统采用了Socket套接字,因此,Socket接口就被广泛使用,到现在已经成为事实上的标准。与套接字相关的函数被包含在头文件sys/socket.h中。

2025-08-22 10:25:58 420

原创 Cmake 动态库和静态库

功能: target_link_libraries 用于指定一个目标(如可执行文件或库)在编译时需要链接哪些库。它支持指定库的名称、路径以及链接库的顺序。更精确地控制目标的链接库。可以指定库的不同链接条件(如调试版本、发布版本)。支持多个目标和多个库之间的复杂关系。更加灵活和易于维护,特别是在大型项目中。

2025-08-21 15:53:32 1322

原创 Cmake 基础知识

CMake 是一个项目构建工具,并且是跨平台的。关于项目构建我们所熟知的还有Makefile(通过 make 命令进行项目的构建),大多是IDE软件都集成了make,比如:VS 的 nmake、linux 下的 GNU make、Qt 的 qmake等,如果自己动手写 makefile,会发现,makefile 通常依赖于当前的编译平台,而且编写 makefile 的工作量比较大,解决依赖关系时也容易出错。

2025-08-21 14:18:58 327

原创 linux基础知识---进程间通信(IPC)管道,内存映射区,共享内存

进程间通信(IPC):不同进程之间传递数据或同步的机制。Linux 提供多种 IPC 方式,可分为 无名/有名、内核辅助/用户空间辅助 等。

2025-08-19 15:37:45 791

原创 linux基础知识--进程

从严格意义上来讲,程序和进程是两个不同的概念,他们的状态,占用的系统资源都是不同的。

2025-08-19 15:01:15 841

原创 linux基础知识---文件IO

被打开的文件的文件名使用什么方式打开指定的文件,这个参数对应一些宏值,需要根据实际需求指定必须要指定的属性, 以下三个属性不能同时使用, 只能任选其一: 以只读方式打开文件: 以只写方式打开文件: 以读写方式打开文件可选属性, 和上边的属性一起使用: 新数据追加到文件尾部, 不会覆盖文件的原来内容: 如果文件不存在, 创建该文件, 如果文件存在什么也不做: 检测文件是否存在, 必须要和 O_CREAT 一起使用, 不能单独使用: O_CREAT | O_EXCL。

2025-08-19 14:26:59 873

原创 CAN 位填充 位时序 硬同步 再同步 等相关知识点

发送端检测到与接收端实际位不同 发送位与总线实际位不一致(只在发送方检测)**填充错误 Stuff Error **连续相同位超过规定限制 CAN 协议要求每连续 5 个相同位之后必须插入反向位(bit stuffing),检测失败即填充错误**CRC错误 CRC Error **循环冗余校验失败 接收方收到的帧 CRC 与计算 CRC 不符接收方没有发送 ACK 发送方发送帧后,接收方未正确应答 ACK。

2025-08-15 14:19:34 196

原创 CAN 总结2

📌 简单记忆:标准帧最大 0x7FF(11 位)扩展帧最大 0x1FFFFFFF(29 位)

2025-08-14 10:27:56 236

原创 硬件基础器件入门

二极管(Diode)是一种单向导通的半导体器件,由 PN 结 构成。主要作用:控制电流方向,只允许电流从阳极(P 区)流向阴极(N 区),反向时几乎不导通。三极管(Bipolar Junction Transistor,简称 BJT)是一种电流控制电流的半导体器件,有 NPN 和 PNP 两种结构。三个引脚:B(Base)基极:控制端C(Collector)集电极:输出端E(Emitter)发射极:公共端核心作用:放大作用:小电流控制大电流开关作用:控制电路通断。

2025-08-13 17:04:07 930

原创 串级PID

2025-08-08 10:24:05 204

原创 PID进阶(算法进阶)

2025-08-07 16:02:47 337

原创 PID基础知识

位置式PID和增量式PID区别比较。

2025-08-07 14:30:43 293

原创 stm32FLASH RAM 详解说明

Read-Only Memory 只读存储器,固化内容,不易更改 存放固定程序或启动信息(如Bootloader)Static RAM 静态 RAM,速度快,成本高 STM32 中的主 RAM 一般是 SRAM。Flash 是实现方式的一种:一种可擦写的非易失性 ROM,STM32 中用作主 ROM。Dynamic RAM 动态 RAM,需不断刷新 通常用于 PC,不常见于 STM32。都在 RAM(SRAM)中,栈从高地址往下增长,堆从低地址往上增长。用于需要大量内存的应用(如图像缓存、音频、FS)

2025-08-02 19:01:12 972

原创 PID基础

2025-08-01 10:09:03 130

原创 CAN基础知识

例如:Node_A和Node_B同时向总线发送各自的消息Msg_1和Msg_2,那么对Msg_1的ID号ID_1和Msg_2的ID号ID_2进行逐位仲裁,如果仲裁结果是:ID_1的优先级比ID_2高,那么Msg_1在仲裁中获胜,于是发出Msg_1这条报文的节点Node_A就获得了总线的发送权。节点能够判断错误的类型,判断是暂时性的数据错误(如噪声干扰)还是持续性的数据错误(如节点内部故障),如果判断是严重的持续性错误,那么节点就会切断自己与总线的联系,从而避免影响总线上其他节点的正常工作。

2025-07-31 12:04:25 1034

原创 USB基础知识总结

描述符回顾总结1.其实所有的描述符都是USB设备用来描述自己属性及用途的,所以必须在设备端实现对应的描述符,主机会在枚举此设备的时候根据设备实现的描述符去确定设备到底是一个什么样的设备、设备需要的总线资源、和设备的通讯方式等等。2.每一个USB设备只有一个设备描述符,主要向主机说明设备类型、端点0最大包长、设备版本、配置数量等等。

2025-07-16 12:22:12 689

原创 USB描述符

一个USB设备至少有一个或者多个配置,这一点可以从设备描述符的最后一项bNumConfigurations得到,但是当前只能选择其中一种配置,每一种配置都对应一个配置描述符集合,为什么说是一个集合呢,因为这个配置包括标准配置描述符、接口描述符、端点描述符,如果是HID设备还会包括HID描述符,我们今天讲的是标准配置描述符,后期会讲解其他的描述符。第二节讲了,配置描述符是以集合的形式,集合里包含了标准配置描述符,接口描述符,端点描述符,HID描述符,wTotalLength就是配置描述符集合的长度。

2025-07-15 16:19:37 1136

原创 00-01

1.USB传输(Transfer)2.事务(Transaction)3.包(Pack)的概念4.USB 主机(Host)5.设备(Device)6.配置(Configuration)7.接口(Interface)8.端点(Endpoint)9.管道(Pipe)10.USB各种各样非常重要的描述符0.概括USB协议学习中最重要几个概念如下,没有提及的就是对USB协议学习中不重要的或者编程不需要用到的。

2025-07-15 16:01:54 764

原创 USB通信基础知识

在全速设备上,闲置状态是指 D+为高电平、 D-为低电平。当 D+线为低电平、 D-线为高电平时,该状态为差分 0。第五个红框,而 SE0 持续了一段时间后,变成了 D+高,D- 低,说明他是一个 J 状态,从 SE0 切换成 J 状态,说明他是一个 EOP。第一个红框,可以看出是一个数据包的开始,并且假设这是一个全速设备,那么D+ 为高,D- 为低,是一个闲置状态。第二个红框,D+为低,D- 为高,说明是一个 K 状态,由 闲置转 K 状态说明他是一个 SOP。在 D+和 D-均为高电平时发生的状态。

2025-07-15 11:34:19 777

原创 无人机(四旋翼)相关入门知识总结

记住:接收机输出的每帧信号(20ms)里,理论上最后必然有至少2ms的时间里,所有的通道都输出低电平,单片机解码时就是利用这一点来判断一帧信号结束的。标称电压(Nominal Voltage):单节 Li-Po 电池通常为 3.7V,充满电为 4.2V,放完电为 3.0V(低于此电压可能损坏电池)。接收机输出的PWM信号(也是控制舵机、电调的PWM信号),周期一般是20ms,也有16ms的,正脉宽范围一般是1000us~2000us。定义:电池存储的电量,单位是 毫安时(mAh) 或 安时(Ah)。

2025-06-26 16:22:28 1294

原创 LVGL 配置文件解释

#if 1 /* 设置为1,以启用内容 */#ifndef LV_CONF_H#define LV_CONF_H#include <stdint.h>/********************************************************************************* 颜色设置

2024-09-30 11:56:54 1325

原创 STM32F407使用SPI协议读取ADXL345三轴加速度

1.相位和极性都配置为1。2.在对寄存器进行读时,地址高位为1;对寄存器进行写时地址高位为0。3.读取多字节时,次高位也要为1。

2024-09-12 17:48:38 1105

原创 28BYJ-48步进电机

对于28BYJ-48步进电机,线圈通常标记为A、B、C和D。通过按不同的顺序给这些线圈通电,可以使电机以不同的步进模式移动。这些模式包括:单步模式(Single Step Mode):每次只通电一个线圈,电机会以较大的步距移动。双步模式(Double Step Mode):每次同时给两个相邻线圈通电,电机的步距更小,转矩也更大。半步模式(Half Step Mode):交替使用单步和双步模式,使电机能够以更小的步距移动,精度更高。

2024-08-29 17:16:09 599

原创 inux中 GPIO 相关操作函数 (GPIOd)

当对应的硬件中断发生时,内核会调用注册的处理程序。在设备树中,*-gpios 中的 * 代表的是你定义的 GPIO 名字(label)。这个名字可以是任何你指定的有意义的字符串,用于标识特定的 GPIO。-EINVAL:表示无效的参数,通常是因为传入的 desc 无效或没有对应的 IRQ。如果中断是独占的(即未使用 IRQF_SHARED 标志),这个参数可以为 NULL。这个值应该与在 request_irq 时传入的 irq 参数相同。成功时,返回一个正数,即对应的 IRQ 号。成功时: 返回 0。

2024-08-29 12:06:37 1214

原创 Linux创建内核线程

struct;if!IS_ERR;;其中kthread_create()只是创建一个内核线程,但并没有启动,需要调用wake_up_process()来启动线程,所以内核又帮我们定义了一个宏kthread_run来帮我们搞定。内核线程创建成功后,会返回一个struct task_struct对象指针,方便我们的后续操作。

2024-08-28 16:05:29 607

原创 RTT 邮箱使用

******************************系统异常邮箱*******************************/8定义了8组邮箱。

2024-08-28 11:32:31 787

原创 stm32F4系列 CCM_RAM使用

attributeCCM_RAM 可以写任意的名字。

2024-08-28 11:19:03 2206

原创 事件集说明

事件是一种实现线程间通信的机制,主要用于实现线程间的同步,但事件通信只能是事件类型的通信,无数据传输。一个事件发生即是一个同步,事件集可以实现一对多(一个线程等待多个事件触发)、多对多(多个线程等待多个事件触发)的同步。其中,一个线程与多个事件的关系可以设为:特定事件触发唤醒线程其中任意一个事件触发唤醒线程几个事件都触发后才唤醒线程。

2024-08-28 10:58:48 557

原创 定时器实例

【代码】定时器实例。

2024-08-27 14:34:38 257

原创 看门狗实例 以及设置进空闲线程

【代码】看门狗实例 以及设置进空闲线程。

2024-08-27 14:26:22 412

原创 DHT11 协议解析

首先主机发送开始信号,即:拉低数据线,保持 t1(至少 18ms)时间,然后拉高数据线 t2(20-40us)时间,然后读取 DHT11 的响应,正常的话,DHT11 会拉低数据线,保持 t3 (40-50us)时间,作为响应信号,然后 DHT11 拉高数据线,保持 t4(40~50us)时间后,开始输出数据。

2024-08-23 22:20:35 540

原创 linux总线设备驱动模型

linux自带I2C、 SPI、 USB 等总线。但是在 SOC 中有些外设是没有总线这个概念的,但是又要使用总线、驱动和设备模型该怎么办呢?为了解决此问题, Linux 提出了 platform 这个虚拟总线,相应的就有 platform_driver 和 platform_device。Linux系统内核使用结构体表示总线match 函数有两个参数: dev 和 drv,这两个参数分别为 device 和 device_driver 类型,也就是设备和驱动。

2024-08-23 17:34:03 1791

硬件测试模板,包含具体的测试项以及各种测试要素

1

2022-11-15

STM32F407GDSP实验源代码

初学者实用,建议初学者下载好好学习,DSP各类代码等学习

2018-11-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除