我们正在 dsPIC 上开发电机控制器。我们打算使用 Simulink 通过 Real Time Embedded Workshop 对电机控制算法进行建模,将 Simulink 模型转换为 C 代码。
我们的固件会有一些其他的小逻辑操作,但它的主要功能是电机控制。我们想知道是否应该尝试在 Simulink 中完成所有固件或将逻辑操作分离到 C 代码中,而电机控制算法则留在 Simulink 中?有没有人建议我们应该从哪条路开始?
谢谢,布伦特
仅供参考,我刚刚构建了一个像您一样的系统,但使用的是 TI DSP。
我假设你正在做一些复杂的事情,比如矢量控制。如果是这样,这就是您要做的:在您的模型中,为您需要的每个任务/每个时间段制作一个块。这可能只是带有控制权的 PWM 中断。定义每个任务需要的所有 IO - 尝试将每个信号保持为 16 位,这在 DsPIC 上是原子的(这消除了大多数速率转换)。获取 simulink 以使每个顶级块都成为函数调用。仅在此/这些块内进行控制,并将所有硬件配置、任务调度和其他逻辑留给 C 代码。Simulink 可以生成一个 C 和 H 文件,您只需将其与其他代码一起包含在项目中。您将填写一个输入结构,调用该函数,然后返回一个带有输出的结构。保持模型清洁所有硬件依赖项。
不要相信 Mathworks 的营销人员。他们希望您在 Simulink 中完成所有工作。不要误会我的意思,它对于某些类型的事情来说是一个很好的工具。但是对于你不能在模型中做的事情(比如你好世界),他们建议使用“遗留代码工具”,就好像任何不是模型的东西都是“像完全老派一样”。限制你的模型来控制循环和信号流——这对它有好处——它会很好。
逻辑操作是否与电机控制交互,或者它们只是不相关的操作?互动的程度有助于做出决定。
如果它们不相关,那么为了可维护性,最好将它们排除在模型之外。然后,您可以更新逻辑,而无需为整个 SimuLink 模型重新生成 C。出现回归问题的可能性会更小。
如果它们与模型相关或与之交互,那么当然可以将它们保留在模型中,这样您就不会将不兼容的版本链接到构建中。