我是靠谱客的博主 淡淡长颈鹿,最近开发中收集的这篇文章主要介绍【控制原理】使用C语言模拟simulink算法仿真,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在上几篇文章中建立了ADRC算法的仿真,后续肯定是要在实物上进行验证,在编写C代码的过程中突发奇想,如果我可以用C语言来模拟simulink的传递函数,不就可以验证代码的准确性了,相当于不用在实物上实际测试就可以检查算法代码的正确性。说干就干,直接开撸验证。

首先必然是需要先将算法代码给编写好,之后就可以模拟simulink中的积分环节。假设我们的控制对象为:G = 1 / (s + 0.5),那么我们就可以根据此传递函数转化为微分方程来进行C代码的编写。

G = 1 / (s + 0.5) ==> x1_dot = -0.5*x1 + u;y = x1;

整个工程我只分了2个模块,5个文件:

这里对于传递函数来说,输入的话,也就是控制量u,输出的话,就系统状态x1。之后就会遇到积分的问题,关于积分的方法的话,有许多种,欧拉法进行积分,或者龙格库塔进行积分,我都进行了测试,因为我这里没有增加干扰,所以效果看不大出来,理论上是龙格库塔积分会效果更好一些:

上述代码的话,将控制 u 传进来,经过运算就会将系统输出 y 传出去。

main.c的话,也比较简单,也就是调用ADRC算法代码,之后调用sFun函数来进行模拟:

之后我们可以看一下结果:

我打印的时候只打印了四个:目标,控制量,实际状态,观测器ESO的输出状态,这里需要用逗号分割开,不进行分割的话,后续不好在excel中查看。之后我们可以将数据复制过来,新建一个excel表格,然后复制:

此时数据全在一列下,我们需要将数据分割开,点击数据->分列:

选择分隔符号:

选择“逗号”:

之后就可以看到已经分成了四列,之后就可以查看波形图了:

我们可以将目标与实际系统输出波形图打印出来:

也可以将实际跟随与观测器的输出打印出来看看:

我们可以将原matlab的仿真打印出来对比一下,参数,采样时间,观测器参数,控制器参数,仿真时间我都设置得跟C代码一样,C代码中的循环次数是2000次,时间周期T写的是0.004秒,所以总的仿真时间应该设置成8秒:

可以看出C代码中的响应与simulink仿真没有大的差别,以后就可以愉快的用这种方式来验证C代码啦!

最后

以上就是淡淡长颈鹿为你收集整理的【控制原理】使用C语言模拟simulink算法仿真的全部内容,希望文章能够帮你解决【控制原理】使用C语言模拟simulink算法仿真所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部