FOC--有感--clion

news2025/1/15 16:43:14

配置CLion用于STM32开发【优雅の嵌入式开发】 - 知乎

TIM1_CH3N是TIM1_CH3的互补输出通道。TIM1是一个高级定时器,具有互补输出功能。TIM1_CHx是PWM的主通道,而TIM1_CHxN则是PWM的互补输出通道。

开漏输出和推挽输出:

输出电平能力:

推挽输出:可以输出高电平和低电平。当推挽输出的一个GPIO引脚输出高电平时,该引脚会通过一个上拉电阻连接到VCC(电源电压),从而输出高电平;当输出低电平时,该引脚会通过下拉电阻连接到GND(地),从而输出低电平。

开漏输出:只能输出低电平,无法真正输出高电平。当开漏输出的GPIO引脚需要输出高电平时,它不会直接连接到VCC,而是需要借助外部的上拉电阻来将电平拉高到VCC。因此,开漏输出需要外部电路的支持才能实现高电平输出。

电路结构:

推挽输出:推挽输出的电路结构通常包括一对互补的MOSFET(金属氧化物半导体场效应晶体管),其中一个MOSFET用于输出高电平,另一个用于输出低电平。当输出高电平时,上拉MOSFET导通,下拉MOSFET截止;当输出低电平时,上拉MOSFET截止,下拉MOSFET导通。

开漏输出:开漏输出的电路结构通常只包括一个N沟道的MOSFET,用于输出低电平。当需要输出高电平时,MOSFET截止,需要外部上拉电阻将电平拉高到VCC。

推挽输出不考虑外部电路可以输出高低电平,开漏输出若想输出高电平则需要在外部电路中使用上拉电阻。

HAL库的灵魂是句柄,通过设置一系列的句柄和结构体来集成。

获取u ,v,w三相电流其实仅需要获取任意两项电流即可,剩余的一项可以根据基尔霍夫电流定律获得。

motor->ib 通常表示一个结构体或类的指针成员访问。这里的 -> 符号用于通过结构体或类的指针访问其成员。下图中函数中的motor是值函数形参的foc_data *motor

使用HAL库开发STM32:ADC基础使用_hal_adc_start-CSDN博客

SPI配置,SPI_CSN为片选引脚。

clion通过配置config文件可以使用DAP,ST-link等多种下载器进行下载。

FOC全过程:

使Id的值为0,Iq的值为电机沿切线方向的有效控制量。

SVPWM即为6个MOS组成的全桥整流,只是在空间矢量角度对三相进行控制的,使三相的输出电压接近正弦波。共可以组合出8中矢量电压:

【STM32】Hal库学习——PWM驱动电机_hal_tim_pwm_start-CSDN博客

PWM频率计算公式 f = 定时器时钟频率 / [ (Period+1) *(Prescaler) ]= 72M / (7199+1) *1 = 10k HZ

USART的异步收发和同步收发的区别:(一般使用异步收发

异步收发:在异步通信中,发送方发出数据后,不等接收方发回响应,接着发送下一个数据包的通讯方式。也就是说,发送方和接收方不需要共享一个时钟信号。异步通信的效率相对较低,因为需要在每个数据包前后添加额外的同步信息,如起始位、结束位和校验位等。此外,异步通信的双方时钟允许误差较大。同步收发:在同步通信中,发送方发出数据后,需要等待接收方发回响应以后才发下一个数据包的通讯方式。也就是说,发送方和接收方需要共享一个时钟信号,以协调数据的传输。同步通信的效率较高,因为只需要传输实际的数据,无需额外的同步信息。但是,同步通信的双方时钟允许误差较小

static 关键字并不意味着变量的值永远不会改变。static 的主要作用是控制变量的生命周期和可见性,而不是其值的不变性。

生命周期:对于局部变量,static 关键字使得变量在程序的整个执行期间都存在,而不仅仅是在每次函数调用时。这意味着变量在函数调用之间会保持其值。对于全局或命名空间范围的变量,static 意味着该变量只在其定义的文件内可见。

可见性static 关键字限制了变量的可见性。在文件作用域中,只有定义该变量的文件可以访问它。在函数作用域中,只有该函数的代码可以访问它。

值的不变性static 关键字并不保证变量的值不变。变量的值是否改变取决于你如何编写代码。你可以像对待非静态变量一样修改静态变量的值。例如:

c复制代码

#include <stdio.h> 

static int counter = 0; // 静态全局变量,初始化为0

void incrementCounter() {

counter++; // 静态变量的值可以改变

}

int main() {

printf("Initial counter value: %d\n", counter);

incrementCounter();

printf("Counter value after increment: %d\n", counter);

return 0;

}

在这个例子中,counter 是一个静态全局变量,并且它的值在 incrementCounter 函数中被递增了。因此,静态变量的值确实可以改变。如果你想要一个值永远不变的变量,你应该使用 const 关键字,而不是 staticconst 关键字表示变量的值在初始化后不能被修改。例如:

c复制代码

const int constantValue = 42; // 常量,值不能改变

尝试修改 constantValue 的值将导致编译错误。

uint8_t是一个无符号8位整型数,其取值范围是从0255

uint32_t是无符号32位整型变量,其取值范围为0到4294967295

 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);代码的意思是:将GPIOBGPIO_PIN_0端口上的引脚重置(设置为低电平)。

HAL_SPI_Receive(&hspi1,(uint8_t *)&data_RX[0],1,1000);   使用配置好的hspi1 SPI接口,从SPI总线接收1个字节的数据,并将其存储在data_RX数组的第一个位置。如果在1秒内没有接收到数据,函数将超时并返回一个错误。

if (a == 1 || b == 1)   ||表示或     ;     if (a == 1 && b == 1)  &&表示与  ;  if(!a)  !表示非

有符号的 16 位整数 short 类型的取值范围是从 -32,768 到 32,767。

switch (mode) {

        case 1://速度变化

     

            if(i>=0xfff) {

                i=0

            }break;

        case 2://速度梯度变化

            motor->iqPID.outMax=6.9f;

            i++;

            if(i>=0x2ff) {

                i=0;

                if (HAL_GPIO_ReadPin(KEY1_GPIO_Port, KEY1_Pin) == GPIO_PIN_RESET) {

                    motor->tar_speed += 0.1f;

                }

            }

            break;

HAL_UART_Receive_IT(&huart3, (uint8_t *)Buffer, 1);初始化UART3模块以通过中断方式接收1字节的数据,并将该数据存储在Buffer中。当UART3接收到数据时,将触发一个中断,然后可以在相应的中断服务函数中处理接收到的数据。

void UART3_IRQHandler(void)  

{  

    HAL_UART_IRQHandler(&huart3);  

}  

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  

{  

    if(huart->Instance == USART3)  

    {   // 处理接收到的数据  

        // Buffer[0] 现在包含接收到的字节  

        // ...

        // 重新启动中断接收,如果需要的话  

        HAL_UART_Receive_IT(&huart3, (uint8_t *)Buffer, 1, HAL_MAX_DELAY);  

    }  

}  

  // 在某个初始化函数中  

HAL_UART_Receive_IT(&huart3, (uint8_t *)Buffer, 1, HAL_MAX_DELAY);

结构体中的struct:结构体中定义结构体,以及结构体中结构体的使用:

直流有刷电机选型时候关心的参数:

在PCB设计中,"VBUS" 通常表示一个电源总线,特别是当它用于USB或其他类似的接口标准时

多层PCB设计过程中内层的信号线层通常选用正片层,并且也许铺铜处理。

永磁同步电机是一种利用永磁体产生磁场的同步电机,具有高效率、高功率因数、良好的起动性能等特点。而伺服电机则是一种能够精确控制位置、速度和加速度的电动机,广泛应用于需要高精度和高性能控制的机械设备中。

实际上,永磁同步电机可以被视为伺服电机的一种类型。伺服电机通常包括交流伺服电机和直流伺服电机,其中交流伺服电机又可以分为同步型和异步型。而永磁同步电机则属于同步型交流伺服电机的一种。

永磁电机里,为什么电动车上永磁同步电机居多,无人机上直流无刷电机居多?这两个电机类型可以互相替代吗?

永磁电机采用正弦波控制,扭矩更大;

链接:https://github.com/ohBrooks/MY_FOC_Driver

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1442622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HiveSQL——共同使用ip的用户检测问题【自关联问题】

注&#xff1a;参考文章&#xff1a; SQL 之共同使用ip用户检测问题【自关联问题】-HQL面试题48【拼多多面试题】_hive sql 自关联-CSDN博客文章浏览阅读810次。0 问题描述create table log( uid char(10), ip char(15), time timestamp);insert into log valuesinsert into l…

2.6日学习打卡----初学RabbitMQ(一)

2.6日学习打卡 初识RabbitMQ、 一. MQ 消息队列 MQ全称Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保 存消息的容器。多用于系统之间的异步通信。 同步通信相当于两个人当面对话&#xff0c;你一言我一语。必须及时回复 异步通信相当于通…

猫头虎分享:2024龙年IT行业热门技术大全

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Python爬虫之文件存储#5

爬虫专栏&#xff1a;http://t.csdnimg.cn/WfCSx 文件存储形式多种多样&#xff0c;比如可以保存成 TXT 纯文本形式&#xff0c;也可以保存为 JSON 格式、CSV 格式等&#xff0c;本节就来了解一下文本文件的存储方式。 TXT 文本存储 将数据保存到 TXT 文本的操作非常简单&am…

Maui blazor ios 按设备类型设置是否启用safeArea

需求&#xff0c;新做了个app&#xff0c; 使用的是maui blazor技术&#xff0c;里面用了渐变背景&#xff0c;在默认启用SafeArea情况下&#xff0c;底部背景很突兀 由于现版本maui在SafeArea有点bug&#xff0c;官方教程的<ContentPage SafeAreafalse不生效&#xff0c;于…

【web前端开发】HTML及CSS简单页面布局练习

案例一 网页课程 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

二阶系统的迹-行列式平面方法(trace-determinant methods for 2nd order system)

让我们再次考虑二阶线性系统 d Y d t A Y \frac{d\mathbf{Y}}{dt}A\mathbf{Y} dtdY​AY 我们已经知道&#xff0c;分析这种二阶系统。最主要的是注意它的特征值情形。 &#xff08;此处没有重根的情形&#xff0c;所有是partial&#xff09; 而特征值&#xff0c;也就是系…

Java异常的处理 try-catch-finally

目录 什么是异常通过if-else处理异常用if-else堵漏洞的缺点 try-catch例第一种处理第二种处理第三种处理第四种处理 try-catch-finally例 System.exit(0);//终止当前的虚拟机执行 什么是异常 Exception&#xff1a;在程序的运行过程中&#xff0c;发生了不正常的现象&#xff0…

探索未来:集成存储器计算(IMC)与深度神经网络(DNN)的机遇与挑战

开篇部分&#xff1a;人工智能、深度神经网络与内存计算的交汇 在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为科技领域的一股强大力量&#xff0c;而深度神经网络&#xff08;DNN&#xff09;则是AI的核心引擎之一。DNN是一种模仿人类神经系统运作…

【Java八股面试系列】并发编程-并发关键字,线程池

目录 并发关键字 Synchronized synchronized最主要的三种使用方式&#xff1a; 具体使用&#xff1a;双重校验锁单例模式 synchronized 底层实现原理&#xff1f; synchronized锁的优化 偏向锁 轻量级锁 重量级锁 Mark Word 与 Monitor 之间的关系 总结 偏向锁、轻量…

2024年【高压电工】报名考试及高压电工操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年高压电工报名考试为正在备考高压电工操作证的学员准备的理论考试专题&#xff0c;每个月更新的高压电工操作证考试祝您顺利通过高压电工考试。 1、【单选题】 高压电动机发生单相接地故障时,只要接地电流大于()…

苹果mac电脑如何优化系统?保持不卡顿呢

再强悍的性能和优秀的操作系统&#xff0c;但长时间使用后&#xff0c;有时也会出现卡顿的情况。为了让你的苹果电脑保持高效运行&#xff0c;我们将深入探讨导致电脑卡顿的原因&#xff0c;并提供苹果电脑如何优化系统的解决方案&#xff0c;帮助你优化系统。 过多的启动项 …

第十七篇【传奇开心果系列】Python的OpenCV库技术点案例示例:自适应阈值二值化处理图像提取文字

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列短博文目录前言一、自适应阈值二值化处理图像提取文字轮廓的初步示例代码:二、扩展思路介绍三、调整自适应阈值二值化的参数示例代码四、对二值化图像进行形态学操作示例代码五、使用轮廓特征进行筛选示…

C++ 中的模型预测控制(01/2)

目录 一、说明二、MPC原理说明三、分解算法的来源并显示关键特征&#xff0c;四、C 实现说明五、平衡 Q 和 R六、资源下载地址 一、说明 以下文章介绍了应用模型预测控制器的简单控制系统方法。本文讨论了这种控制的基本机制&#xff0c;该机制适用于各种工程领域。 MPC 涉及对…

书生·浦语大模型第三课作业

基础作业&#xff1a; 复现课程知识库助手搭建过程 (截图) 进阶作业&#xff1a; 选择一个垂直领域&#xff0c;收集该领域的专业资料构建专业知识库&#xff0c;并搭建专业问答助手&#xff0c;并在 OpenXLab 上成功部署&#xff08;截图&#xff0c;并提供应用地址&#x…

【QT+QGIS跨平台编译】之三十一:【FreeXL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、FreeXL介绍二、文件下载三、文件分析四、pro文件五、编译实践一、FreeXL介绍 【FreeXL跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台编译】:Linux环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台…

如何在Sprint中管理UI测试?

作为iOS团队&#xff0c;我们编写3种类型的UI测试。如果你问这些是什么&#xff1b;快照、冒烟和回归测试。那么这些测试到底是什么&#xff1f;让我们稍微谈谈这些。 快照测试快照测试是检查UI中的某些内容是否损坏的测试。 首先&#xff0c;它将所需的视图图像保存在某处&am…

如何部署一个高可用的 Linux 集群?

部署一个高可用的 Linux 集群需要经过多个步骤和考虑因素。以下是一个简要的指南&#xff0c;帮助您了解如何部署一个高可用的 Linux 集群&#xff1a; 确定需求和目标&#xff1a;在开始部署之前&#xff0c;您需要明确高可用性的定义和目标。对于一些组织而言&#xff0c;高…

单片机学习笔记---串口向电脑发送数据电脑通过串口控制LED

目录 串口向电脑发送数据 每隔一秒串口就发送一个递增的数给电脑 电脑通过串口控制LED 波特率的具体计算 HEX模式和文本模式 前两节是本节的理论基础&#xff0c;这节开始代码演示&#xff01; 串口向电脑发送数据 接下来先开始演示一下串口单向发送一个数字给电脑&…

Swift 初见

Swift 初见 学习swift的记录 控制台输出 print("hello world")可以无分号&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 变量声明 let 常量声明 如果在常量声明后再次修改他会报错 var 变量声明 一个常量的值&#xf…