Simulink搭建的控制算法如何变成真正的控制器?
这个问题,转换下,就是如何将Simulink代码转成C/C++代码,下载到控制器;
整个过程大概可以分为以下几个步骤,Simulink代码编写、代码转换、代码优化、代码编译、代码部署与测试。
- Simulink代码编写
一切看官方,官方其实都是会提供很多学习资料,如何构建模型,搭建仿真平台,官方学习即可。
学习链接:
https://ww2.mathworks.cn/en/videos/getting-started-with-simulink-part-1-building-and-simulating-a-simple-simulink-model-1508442030520.html
- 代码转换
主要是将Simulink代码转换成目标控制器(比如STM32、DSP等)所支持的编程语言。目前主要还是以C/C++为主。
Simulink官方也提供了相关的办法,直接转换。
最为关键的工具箱:Simulink Coder(以前称为 Real-Time Workshop(R))从 Simulink 模型、Stateflow(R)图和 MATLAB(R)函数中生成并执行 C 和 C++ 代码。生成的源代码可用于实时和非实时应用程序,包括仿真加速、快速原型和硬件在环测试。您可以使用 Simulink 调整和监测生成的代码,或在 MATLAB 和 Simulink 之外运行代码以及与代码交互。
参考链接:
https://ww2.mathworks.cn/help/dsp/ug/generate-c-code-from-simulink-model.html?requestedDomain=cn
https://tristan-ka.github.io/IBOAT_RL/_downloads/SIMULINK_TO_C__PYTHON.pdf
https://github.com/mathworks/C_Code_Integration
- 代码优化
转换后的代码,只是控制算法的那部分代码。对于整个控制器软件开发来说,只是其中的一小部分内容,需要将该部分算法内容融合进去。比如整个软件系统包括底层驱动部分、通信部分、伺服控制、数据采集、中断处理等等;
需要更好地将控制算法融入到整个软件代码工程中,而避免引起不必要的麻烦!
以STM32工程为例,
需要完善整个工程代码,比如库文件、CAN通信文件、BSP板级文件、UCOS操作系统文件、用户自定义文件等。
STM32学习链接:
https://wiki.st.com/stm32mcu/wiki/Category:Getting_started_with_STM32_:_STM32_step_by_step
https://deepbluembedded.com/stm32-arm-programming-tutorials/
代码编译
代码编译的过程,其实就是对整个工程存在的一些问题进行解决。目前来说,基本上在安装编译器的过程中,都会安装相应的编译工具。直接使用编译器自身的功能即可!
以Keil编译器为例,相关的调试,编译等工具如下,
关于keil的学习资料
https://developer.arm.com/documentation#numberOfResults=48&sort=relevancy&f:@navigationhierarchiescontenttype=%5BKnowledge%20Base%20Article%5D
https://www2.keil.com/docs/default-source/default-document-library/mdk5-getting-started.pdf
https://www.keil.com/appnotes/files/apnt_268.pdf
代码部署与测试
最后就是代码的烧录或下载,需要借助代码烧写工具来完成。比如常用的ST-LINK,J-link或串口烧录等。
软件功能的测试,来验证算法的准确性。就是系统测试过程,这个过程也是问题最多,最需要耐心的过程!最难的也是这个过程,算法关键参数的调节。
参考链接:
刘金琨 《机器人控制系统的设计与MATLAB仿真》