自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 simulink有感HALL方波控制仿真

bldc方波有感控制仿真,加速电机控制设计

2023-02-12 22:01:07 1030 1

原创 PMSM FOC控制 Matlab/Simulink仿真 SVPWM算法

1.原理2.逻辑分析3.仿真模型4.仿真效果5.注意事项

2022-04-20 15:24:37 4481

原创 PMSM FOC控制 Matlab/Simulink仿真之反Park变换

1.Park变换的原理在经过电流PID之后输出的是Ud,Uq是2相旋转坐标系,是不能直接控制电机的,要经过反Park变换,即2r->2s变换,原理还是投影定理。2.Park变换的计算过程根据投影原理Uα=cosθ*Ud-sin*UqUβ=sinθ*Ud+cosθ*Uq这里注意一下坐标轴中用的是Id、Iq、Iα、Iβ 手误,不想更改了,原理是一样的3.Park仿真模型搭建模型输入:Uq、Ud、转子角度θ(即Id和Iα的轴夹角)输出:Uα、Uβ.

2022-04-14 18:59:07 2993 1

原创 PMSM FOC控制 Matlab/Simulink仿真之Park变换

1.Park变换的原理2.Park变换的计算过程3.Park仿真模型搭建4.仿真效果演示

2022-04-14 18:42:43 2821

原创 PMSM FOC控制 Matlab/Simulink仿真之反Clark变换

1.反Clark变换的原理因为实际控制3相永磁同步电机的电流是3相正弦电流信号,我们之前经过Clark变换把3相电流信号转成了Iα,Iβ ,还要转变回来反Clark变换又称为2s-3s变换,都处于静止状态下的坐标系;原理就是投影定理,类似于勾股定理2.反Clark变换的计算过程根据投影定理:Ia只由Ia投影决定,根据几何原理,Ia=Iα;Ib由Iα、Iβ共同投影决定,根据几何原理,Ib=cos(30°)*Iα-cos(60°)*Iβ,即是Ib=√3/2*Iα-1/2*Iβ;Ic由I

2022-04-11 17:32:54 1777

原创 PMSM FOC控制 Matlab/Simulink仿真之Clark变换

1.Clark变换的原理为什么要进行坐标系变换,因为控制系统不好控制3相强耦合系统,要转到单相直流电机中的电流,这个好控制,这个Clark就是其中变换的第一步;Clark变换又称3s-2s变换,都处于静止状态下的坐标系;原理就是投影定理,类似于勾股定理2.Clark变换的计算过程根据投影定理:Iα由Ia、Ib、Ic共同投影决定,根据几何原理,Iα=Ia-cos(60°)*Ib-cos(60°)*Ic,即是Iα=Ia-0.5*Ib-0.5*IcIβ由Ib、Ic共同投影决定,根.

2022-04-11 16:58:05 2239 2

原创 MDK-Scope联合调试 RTT模式 多通道

基本配置添加RTT的.C和.H文件到MDK工程中,RTT模式所需的文件可以到scope安装目录下找到,参见下图1图1:文件添加2.两个函数添加一是通道配置函数:SEGGER_RTT_ConfigUpBuffer(1,"JScope_u2",buf,1024, SEGGER_RTT_MODE_NO_BLOCK_SKIP);参数分析:1:是通道设定,通过实验验证只能设定为1,虽然Scope本身通道限制最大值为3JScope_u2:数据格式,JScope_是固定开头,数据类型参照下.

2022-02-10 09:53:32 2118

原创 Matlab simulink安装编译器MinGW

1.simulunk S-Function编译错误,如下提示,就是需要安装编译器支持的编译器不止这一种,还有其它,只不过这个常用2.下载编译器MATLAB Support for MinGW-w64 C/C++ Compiler - File Exchange - MATLAB Centralhttps://ww2.mathworks.cn/matlabcentral/fileexchange/52848-matlab-support-for-mingw-w64-c-c-compile.

2021-12-27 16:21:03 5403

原创 C#窗体设计 鼠标任意 拖拽 窗体大小、控件联动

1.原理2.代码编写3.演示效果

2021-12-27 11:13:41 2641 1

原创 c#窗体设计 鼠标靠近 控件显示 提示 备注 信息

1.为什么2.实现原理3.代码编写4.效果演示

2021-12-27 08:20:30 3160

原创 C# 窗体设计中 调用 控制台输出

C#窗体设计时,在调试时为了方便观察中间变量或则在节点处输出一些指示信息,使用断点调试也可以的,但是比较麻烦,所以我们可以使用控制台输出,更方便显眼。1.先建立一个窗体,我们这里只是演示,很简单,如下:只有一个控件Button2.编写Button事件,实现控制台输出信息,如下3.演示效果点击按钮输出信息...

2021-12-24 16:16:21 3661

原创 STM32 时钟分割TIM_ClockDivision配置及使用详细说明

以STM32F4为例说明TIM_ClockDivision:时钟分割,配置寄存器是TIM1->CR1共有3种分割参数,这里CK_INT是指选择的时钟时基见图1-紫红色CK_INT是用户选择的内部时钟,比如通用定时器=84MHz(当预分频系数为0时),那么CK_INT=84MHz,若预分频系数不为0,则按照相关计算得出CK_INT大小;那么tDTS就可以对应计算了是用到定时器输入相关的功能才使用到的配置,如:外部触发输入,见图1-红色框,涉及到的寄存器TIM1-&gt

2021-11-12 15:30:50 26497 4

原创 STM32 高级定时器 COM事件

COM事件只针对高级定时器,这里以STM32F407为例1.原理2.数据手册及编程3.代码演示

2021-11-08 13:39:37 6154

原创 STM32定时器产生事件TIM_GenerateEvent

涉及到的寄存器TIMx_EGR,TIMx_SR具体见手册TIMx_EGR产生事件,TIMx_SR读取对应事件的标志位2.产生事件函数void TIM_GenerateEvent(TIM_TypeDef* TIMx, uint16_t TIM_EventSource);TIM_EventSource类型:TIM_EventSource_Update :更新事件,相当于计数到最大值/最小值后产生的更新TIM_EventSource_CC1 : 捕获比较事件TIM_...

2021-11-05 10:35:01 7106

原创 使用STM32F4浮点运算(FPU)功能开启+使用DSP库

涉及到的参数:这里以stm32F4 MDK5.2为例(1)配置开启FPU功能标志#define __FPU_PRESENT 1U //在stm32f4xx.h 系统已经配置#define __FPU_USED 1U //这个在core_cm4.h中,需要配置由图知,要先判断__CC_ARM 是否定义 ,再判断__TARGET_FPU_VFP是否定义,最后判断__FPU_PRESENT是否已经配置为1,前面3个条件都为真的情况下,才配置__...

2021-11-01 10:59:44 14555 1

原创 STM32 TIM 定时器 OCREF 输出配置 TIMx->CCER

主要说明涉及到的定时器TIMx->CCER,这里以TIM1->CCER为例,说明PWM输出与OCREF的关系,以及从OCREF开始到最后OC输出中间电路信号的控制OCREF决定了PWM输出,但高低电平相位是否一致或相反,由中间配置信号决定;看数据手册,定位到对应的寄存器手册中以CC1为例:CC1E是使能,1使能输出,0失能输出,这个简单CC1P在输出配置时:0-OC1高电平有效、1-OC1低电平有效,笔者当时看了之后也是茫然,不知道设么意思,那我们...

2021-10-27 14:40:37 7293 1

原创 一阶数字低通滤波器-C语言/matlab实现

1.一阶硬件滤波器原理:计算:实验:2.一阶数字滤波器原理:计算:实验:应用及注意事项:3.一阶数字滤波器代码实现代码:实验数据:

2021-10-18 15:02:28 15473 2

原创 PWM波转DC直流之二阶RC低通滤波器设计

1.原理2.参数计算3.电路仿真4.硬件电路测试5.参数选型的注意

2021-10-18 13:43:14 16699 3

原创 STM32 定时器同步 触发 代码 实验 验证分享

这里使用STM32F407型号,其它版本可能略有区别定时器同步可以用来BLDC的HALL、ENCODER、内部时钟相位一致定时器同步触发:主定时器配置:1、TIM_SelectOutputTrigger(TIM_TypeDef* TIMx, uint16_t TIM_TRGOSource);TIMx:根据数据手册决定,看表76/72,这里我们选择TIM4TIM_TRGOSource:输出触发源选项TIM_TRGOSource_ResetTIM_TRGOSour...

2021-10-15 14:38:19 6058 2

原创 Matlab GUI 缩放-部分控件缩放、部分控件不缩放-设计教程

这里介绍matlab gui设计之缩放,实现任意控件的缩放和不缩放设计这里考虑实际需要,缩放GUI时并不想缩放全部控件,比如只想缩放坐标轴显示的波形,而设定按钮和串口配置等保持位置和大小不变如果仅仅按照matlab上的示例和网上大部份资料,缩放配置时达不到这样的要求,这就要考虑如何实现这样的设计过程如图上示意图,波形尺寸变化,但是要按钮控件保持不变这就要有一个机制来实现,图形坐标及大小随着figure大小在变动;根据matlab特性,设计步骤如下:1.先设置总体可以缩放.

2021-10-11 18:58:06 4991

原创 BLDC/PMSM 无刷直流电机 SPWM控制算法-讲解2-算法设计

这一篇讲解SPWM设计流程图,算法实现步骤

2021-10-06 16:58:42 2641

原创 Typedef void (*func)(void)函数指针类型使用,代码演示

Typedef 除了类似#define 宏定义;取别名;还有就是构造、声明/定义一个新型变量定义一个函数指针类型:Typedef void (*name)(void),使用对象:功能不同,但返回类型和参数类型一样的函数void:是函数返回类型*name:函数指针void:是参数类型优点:是把一类函数进行封装,调用灵活缺点:不能快速定位函数位置,即不能go to definition of…使用方法:要先声明定义函数,否则会因找不到函数报错void fun1(void);

2021-09-30 10:35:22 2439

原创 环形(循环)队列在串口通信中的使用、代码-STM32-篇2

这里以stm32为硬件平台,其他硬件平台可能就串口中断服务函数不一样,其它处理适用1.串口接收2.数据存入3.数据读出

2021-09-29 09:54:26 1185

原创 环形(循环)队列在串口通信中的使用、原理、代码-C语言-篇1

1.什么是队列2.什么是环形队列4.环形队列存取数据原理5.环形队列存取数据代码实验6.环形队列在串口中实现及注意事项

2021-09-22 19:16:31 4865 1

原创 状态机 函数指针数组形式实现 C语言

上一篇文章中 介绍了如何使用switch-case来实现状态机的设计,这一篇介绍使用函数指针数组的形式来实现。

2021-09-14 13:41:59 487

原创 状态机 switch-case方式 C语言 实现

状态机是系统变化的流程图

2021-09-06 09:20:18 1443

原创 结构体 + 联合体 + 位域 使用

简单介绍结构体定义结构体,一般是对有相同属性的元素或成员的归纳,比如电机的电气特性:驱动电压、驱动电流、运行速度;还有比如系统报警类:过压报警、过流报警、欠压报警本人常用格式typedef struct{u8 Volt;//成员变量u8 Curr;u16 Speed;}Motor_InitTypeDef;当然,还有其它的格式,可以自行查找使用方法:Motor_InitTypeDef Motor_InitStre;//定义结构体变量Motor_InitStr...

2021-09-02 09:10:11 2671

原创 BLDC/PMSM 无刷直流电机 SPWM控制算法-讲解1-基本原理

1.讲解PWM控制原理2.讲解SPWM控制原理3.对比PWM和SPWM的区别4.SPWM算法实现原理和步骤5.注意事项6.调试过程及结果7.代码分享这里是讲解大纲,本片文章不会全部写完,后期陆续补充这里先讲点1,点21.讲解PWM控制原理PWM=Pulse Width Modulation脉宽调制,是控制应用中使用最多的方式,没有之一;其他很多的变形如SPWM,归根揭底还是PWM原理:利用等效原理或者说面积等效,即S=V1*T1=V2*T2,使用不同的电压和时间组

2021-08-25 16:17:00 4690

原创 STM32F4 ADC采样转换时间计算方法

1.中文参考手册这里以12位为例:最快15ADCCLK= ADC_SampleTime_3Cycles(最小)+12ADCCLK(固定必须)如果以21MHz ADCCLK为例 ,1个通道完成时间=15/21M=0.714us2. 软件配置中有这样一条语句ADC_CommonInitStre.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles;这条语句不影响通道间的延迟,只用于多个ADC使用时,才有效,看下图3.还有数据手..

2021-08-13 09:27:52 10310

原创 STM32 ADC 规则DMA+注入外部触发 独立模式 代码原理分享

使用STM32f407系列,其他型号可能略有差异代码编写步骤如下:1.初始化DAC的IO2.初始化DAC模块功能3.初始化DMA功能/****************************************************************************** * 功能: *******************************************************************************/void DAC..

2021-07-22 14:54:43 3252

原创 FOC PMSM 矢量控制 STM32 高级定时器TIM8 配置 代码原理分享

这里使用STM32F407,其他系列可能略有差异1.IO配置2定时器配置,FOC必须使用中心对齐模式重点说明1.OC输出模式选择,这里只介绍常用的2种TIM_OCMode_PWM1 :TIM_OCMode_PWM2 :2.频率设定计算见另一篇文章https://blog.csdn.net/yuyan7045/article/details/118388326?spm=1001.2014.3001.55013.输出极性PMSM电机控制时,输出极性是要求高电平有效,才能.

2021-07-21 16:56:09 2266 1

原创 STM32F4 DAC DMA模式,原理代码分享

说明DAC-DMA只能使用外部触发,即决定了DAC必须外部触发,其它软件触发或无触发是不行的,这也是本人亲测代码设计:1.IO口初始化2.ADC初始化3.DMA初始化注意事项说明:1.DAC触发源选择:DAC_InitType.DAC_Trigger=DAC_Trigger_T8_TRGO; 大多触发模式是和定时器相关的,注意这里没有定时器1 TIM_SelectOutputTrigger(TIM8,TIM_TRGOSource_OC1Ref);...

2021-07-20 09:31:33 2451

原创 STM32 BLDC无刷直流电机 HALL霍尔硬件接口 程序

这里是使用STM32F103系列,其他型号可能略有区别1.首先HALL的IO口初始化2.硬件HALL接口初始化3.检测到hall信号变化会触发TIM5中断,中断处理进行电机换向void HALL_IO_Init(void){ GPIO_InitTypeDef GPIO_InitStre; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); GPIO_InitStre.GP...

2021-07-13 18:24:31 9752 11

原创 滑动平均滤波

优点:对周期干扰有较好的抑制作用,平滑度较高;适用于高频振荡的系统。缺点:灵敏度低、对偶然出现的脉冲性干扰的抑制作用较差,不易消除由脉冲干扰所引起的采样值偏差,不适用于脉冲干扰比较严重的场合,比较浪费存储器的空间代码分享: for(Flow_Count=(MOV_FIL_NUM-1);Flow_Count>0;Flow_Count--) { Mov_Filter[0][Flow_Count]=Mov_Filter[0][Flow_Count-1]...

2021-07-08 16:55:53 1847

原创 STM32 ADC 多通道 转换顺序 DMA模式

1.多通道时,ADC的转换顺序程序设计,规则通道模式,这里使用的是STM32F407,其他型号可能差异,注意。void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);这个函数决定了通道转换顺序,其中参数Rank是要控制的参数,Rank=1~16;转换顺序是从小到大,依次转换;那么Rank数值可不可以重复?答案是肯定的,所有通道都可以设

2021-07-07 10:52:56 4548 1

原创 折半/二分 查找

所有查找算法步骤:1.判断有效性,查找数据是否在范围区间内2.查找算法3.查找出的结果有效性判断//输入有效性判断 if(AD<=EX_PRE_Table_AD[0]) //小于最小值,EX_PRE_Table_AD是一个数组区间 { return Err;//返回最小值 } else if(AD >= EX_PRE_Table_AD[high])//最大值检测 { return Err;//返回最大值...

2021-07-07 10:37:26 54

原创 STM32高级定时边沿对齐PWM模式,代码分享

GPIO_InitTypeDef GPIO_InitStre; RCC_AHB1PeriphClockLPModeCmd(RCC_AHB1Periph_GPIOC, ENABLE); GPIO_InitStre.GPIO_Pin=GPIO_Pin_8; GPIO_InitStre.GPIO_Mode=GPIO_Mode_AF; GPIO_InitStre.GPIO_OType=GPIO_OType_PP; GPIO_InitStre.GPIO_PuP...

2021-07-01 15:57:48 615

原创 STM32F4 高级定时器中心对齐PWM模式,代码分享

使用STM32F407TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStre; TIM_OCInitTypeDef TIM_OCInitStre; GPIO_InitTypeDef GPIO_InitStre; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENA...

2021-07-01 15:52:10 1808

原创 STM32高级定时器中心对齐PWM模式,频率设置的分享

有关STM32高级定时器中心对齐PWM输出的实验记录:计算PWM的频率公式:f=PCLK2/(TIM_Prescaler+1)/(TIM_Period+1)/2, 条件TIM_ClockDivision=0;而不是f=PCLK2/(TIM_Prescaler+1)/(TIM_Period+1),这个只针对边沿对齐;正确的计算中多除了2为什么会这样,可以看中心对齐时的计数趋势图arr-----| |.| | . | | . | | ...

2021-07-01 15:45:22 5761

原创 STM32F2-CAN通信-发送任意长度

STM32F2-CAN通信-发送任意长度,调试好的,与大家分享#include "include.h"//***********************************************************************************************************************************************...

2019-06-12 11:33:53 2518 3

空空如也

空空如也

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

TA关注的人

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