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