- 博客(31)
- 收藏
- 关注
原创 const关键字理解
但是有一点,被const修饰后内容,后期通过指针访问地址可以直接修改,除非这个地址确实在编译器编译的时候被存入到了ReadOnly段里面。const关键字主要的作用是告诉编译器这个东西是个常量,不可被修改。或者是用来和指针玩一些奇奇怪怪的东西,这玩意面试八股文常青树。在一些函数里面进行限制,比如限制指针类型的形参等。
2025-04-11 15:59:10
259
原创 关于柔性数组
柔性数组主要是再结构体里面定义一个长度为0的数组,这里和定义一个指针式存在明显去别的。定义一个指针会占用内存,但是定义一个长度为0的数组不会占用空间。总体来说,柔性数组具有极大的灵活性,主要是用作底层接口实现,对外只需要使用一个指针实现不定长数组,减少代码的风险。以前确实没关注过这个问题,一直都是直接定义固定长度的数组,尽量减少指针的操作。
2025-04-09 14:35:41
371
2
原创 SimulinkFOC控制MTPA仿真
一般对于那种表贴式的PMSM电机,定子在D-Q轴坐标系下的D轴电感和Q轴电感是一致的,在电流环控制力矩的过程中直接令D轴的电流为0就行了,当进入弱磁区的时候,给D轴负电流去抵消一部分转子永磁体产生的磁场就行了。对于内嵌式的PMSM电机,定子在D-Q轴坐标系下的D轴电感和Q轴电感是有差异的,用表贴式PMSM的控制方式是可以的,但是并不是最优解。记录一下自己关于MTPA仿真控制,只是公式法实现(原理),查表法和曲线拟合还在实现,后面会在这里更新。实际测试结果,Q轴电流。实际测试结果,D轴电流。
2025-03-05 16:50:14
185
原创 FOC无感开环启动算法
FOC无感开环启动排除掉高频注入这种直接识别当前转子dq轴的位置直接闭环启动,大部分的常规启动方式就是三段式启动,对齐-强拖-观测器介入-观测器误差稳定后平滑过渡-闭环。这里就只写出I/F(V/F)启动的角度输出的代码,力矩就是一条y=kx+b的直线,没什么好说的。这里的逻辑是我搭建的Simulink仿真的逻辑。该开环启动算法是在1ms的周期执行的实测如下。simulink仿真如下图。
2025-03-04 17:21:23
486
原创 滑膜观测器建模仿真
记录一下自己仿真滑膜观测器,具体的电机模型见前面的,有感FOC仿真。这里就记录一下滑膜观测器,滑膜观测器的原理我前面给出过文章。电角度跟踪测试,实际使用加上一点角度补偿就可以了。实际转速跟踪,里面那个蓝色的是实际转速。
2025-03-03 18:34:11
192
原创 Simulink仿真有感BLDC控制
整个文章很长,还请大家耐心看完,我会从Simulink控制参数和仿真建模全部截图展示出来,保证通过这个建模可以理解有感BLDC的控制原理。建议先去补充simulink的一些基础操作支持。
2025-02-18 15:01:35
556
2
原创 从Simulink使用Embedded Coder生成代码
1、利用Simulink搭建自己的控制模型,然后在上方工具栏的APP中选择Embedded Coder,在打开的新的C代码的工具栏里面选择快速向导,会弹出一个操作框,系统就选自己的simulink模型,输出根据需求来选就可以。部署会自动辨识你的模型,可以不用管。选中下面那个,再value行双击,然后点击右侧的三个点,点击浏览,进入设置区域,然后选择该变量,右键选择转换为参数对象。模型还存在一些内部模型,它们的对象接口一般是不开放的,为了能够进行访问,需要显示配置,具体操作如下。然后点击生成代码就好了。
2025-02-17 14:58:53
467
原创 Matlab基于C语言的代码生成
在report的界面的工具栏上会有一个package打包的按钮,在执行命令生成完代码后的report界面里点击该按钮可以将整个生成的代码打包出来,包括没有显示一些依赖关系等。matlab存在输入的灵活性,所以转化成C语言的代码时会存在问题,所以有两种方式来确定C语言函数的输入,一个按最大的大小控制输入,另一个方式是输入变量时同时输入大小。matlab生成C语言代码有两种主要的方式,一个是提高阅读性(代码量较大,运行时间较长),另一种是提高运行效率(代码量小,运行时间短,阅读性差)
2025-02-17 13:15:48
596
原创 Simulink控制设计考量
然后设置仿真的工况点的时间,大部分控制都是阶跃信号(可以根据自己实际的控制模型选择对应的线性化模型),生成响应图,然后再阶跃图中右键特征可以看到系统的响应时间,超调量,稳态时间等。最后我们可以根据这个模型来用simulink的PID模块进行调节,导入刚刚的线性化模型,利用调整工具调节,然后显示参数可以查看调节的效果,然后点击更新模块到PID模块里面。对于线性系统的拟合可以用线性化工具,先用线性化管理工具确定系统的输入和输出,一般都是闭环的负反馈控制,所以线性化管理器中的输入选择输入扰动,输出选择输出测量。
2025-02-16 15:58:03
212
原创 Matlab中StateFlow状态机建模梳理
4、在流程图中使用到的数据需要指定其类型,是input、output、Local,同时在调试流程图时可以在symbols的列表框显示。during:在entry后到State执行到了一个正确的Transition条件,跳转到其他State的过程中会一直执行的操作。1、创建StateFlow,创建多个State,同时必须要有一个默认的Transition指向其中的一个State。exit: 在State执行到了一个正确的Transition条件,跳转到其他State前执行的操作。1)条件判断+执行动作。
2025-02-16 11:08:52
359
原创 Simulink的离散数学关系建模和连续数学关系建模梳理
对于离散的数学关系(差分方程),存在y(k) = f( y(k - 1) ),则可以按照以下的思路进行建模处理。2)确定所需的数量即推导关系,y(kn) = f( y(kn - 1)),n=1,2,......N。3)添加相关的模块Unit Delay,左侧输入为y(k),右侧输出为y(k-1)4)将方程右侧的等式利用simulink的数学公式实现。5)设置所有推导关系的离散系统的初始条件和采样时间。1)将最高阶的导数关系列到等式左侧,其余的放在右侧。1)将y(k)写于等式的左边,其他的写于等式的右边。
2025-02-14 15:51:19
198
原创 MATLAB入门
这里记录一下MATLAB的一些基本操作,包括变量建立,文件保存,以及一些基础的数据关系,逻辑运算和数据分析操作。具体可以参考MATLAB官方的学习课程,MATLAB入门之旅。
2025-02-13 09:54:34
332
原创 FOC控制算法滑膜观测器实现
接下来就是锁相环来解析出角度,锁相环就是这个系统,这个我实话实说是网络上找的,我本来是打算直接反正切得到角度然后用一个位置式的PI系统去跟踪输出角度,但是网上找了一圈都没有这样做的,找了一圈全都是锁相环然后配这个图。函数实现,这几个宏定义第一个是阻尼系数一般都是0.7,第二个是角速度相关的这个实际要根据自己的实际的来调试,反正我这里测试的角度是500ms走完360°电角度,所以我选择4Hz。测试结果,最上面的角度是虚构的开环角度,然后假定电机的q轴电流为1A,实际滑膜观测器的输出。
2024-09-21 15:01:10
2031
2
原创 C语言数据逆序操作处理
此文用于记录用C语言开发进行嵌入式开发,对位操作的相关处理手段。以下是详解假设data = 0x59 ,二进制表示位 0101 1001第一步操作:将前后四位进行交换data << 4 变成了 1001 0000 ,data >> 4变成了 0000 0101 ,将 1001 0000 和 0000 0101进行位或处理,有1为1,全0为0。得到的结果为 data = 1001 0101。可以发现四位已经交换了。第二步操作:将数据两两进行交换第一步操作之后
2021-03-06 13:12:49
1018
原创 QT发布exe文件供给客户使用
使用QT开发完上位机后,就面临这发布交付给客户的问题。可以发现直接在windows下启动QT编译生成的可执行文件,会发现提示缺少DLL库的错误。第一种解决方案是去设置系统的环境变量,将QT安装目录下的相关路径配置好,再次去执行生成的文件就可以运行,这种方法不推荐,感兴趣的自己去百度。这样做在自己的PC上玩玩还行,发布软件后还要客户去安装QT,配置环境变量?那是找死。本人更推荐第二种方法,将可执行文件复制出来到一个新的空文件夹下,打开64位或32位的控制台,这个根据自己QT中配置构建环境去选择。利用控
2021-01-30 14:03:05
294
原创 CAN波特率计算
Can控制器器只需要进行少量的设置就可以进行通信,就可以像RS232/48那样使用。其中较难设置的部分就是通信波特率的计算。CAN总线能够在一定的范围内容忍总线上CAN节点的通信波特率的偏差,这种机能使得CAN总线有很强的容错性,同时也降低了对每个节点的振荡器精度。实际上,CAN总线的波特率是一个范围。假设定义的波特率是250KB/S,但是实际上根据对寄存器的设置,实际的波特率可能为200~300KB/S(具体值取决于寄存器的设置)。简单介绍一个波特率的计算,在CAN的底层协议里将CAN数据的每一位时
2021-01-30 10:05:46
2568
1
原创 QTCreator导入DLL的问题
初次使用QT编写上位机,遇到了问题。留个记录,供以后参考。使用QTCreator开发芯片烧录的上位机软件。QT的版本为开源的使用mingW编译器,用的VS2019编写的下位机USB驱动的dll库。开发完界面及文件功能后,往QT导入DLL库,发现运行出错,报错程序运行异常,后面发现该问题是QT编译器是32位而本人开发的USB驱动是64位的,好家伙直接重新开始写32位的USB驱动。再次导入DLL库,编译出错。确定了是编译器不同,mingw和MSVC两者对于函数的编译结果不太一样,于是开始更换QT的版本,这也是网
2021-01-29 18:41:45
1015
原创 ssm整合
本篇内容是基于上篇的基础完成的。上篇内容:https://blog.youkuaiyun.com/javacode123456/article/details/106342332在maven的框架搭建完毕后便可以开始着手ssm框架的整合。首先是进行spring和mybatis框架的整合。1、利用maven去下载相关的jar包。在这里给出porm.xml相关代码 <properties> <!-- spring版本号 --> <spring.version>
2020-05-25 22:16:25
352
原创 maven+ssm框架的实现
基于MyEclipse2017使用maven来帮助快速搭建SSM框架。1、maven的下载及配置。这里不多赘述,网络上有很多的实现教程。2、框架搭建(1)创建一个MavenWeb工程。红色圈起来的部分因人而异,可以自己命名。项目搭建完毕后会出现The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path的错误,是因为缺少jar包,我们可以在porm.xml中添加依赖
2020-05-25 21:45:24
310
原创 MyEclipse解决创建mavenweb工程没有src/main/java文件夹的问题
创建maevn web项目,在选择maven_archetype_web原型后,默认只有src/main/resources这个Source Floder。 按照maven目录结构,添加src/main/java、src/test/java等Source Floder时,会报目The folder is already a创建mavenweb项目,在选择maven_archetype_web原型后,默认只有src/main/resources这个Source Floder。 按照maven目...
2020-05-24 16:44:00
811
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人