公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
张华
Level 2
Level 2
10 replies posted 5 likes given 10 sign-ins

我用IMC302A,用脚本命令系统在上电后启动电机,如:

/*Task1 init function*/
Script_Task1_init()
{
    int autoStart;
    autoStart = 0;
}
 
/*Task1 script function*/
Script_Task1()
{
    if(autoStart == 0)
    {
        autoStart = 1;
        TargetSpeed = 200;
        Command = 1;
    }
}
电机可以启动,但是只按MCEWizard中设置的最低转速运行,不按指定的TargetSpeed运行。
 
参照MCEDesigner里的Function,把控制模式啥的都加上,
/*Task1 init function*/
Script_Task1_init()
{
    int autoStart;
    autoStart = 0;
}
 
/*Task1 script function*/
Script_Task1()
{
    if(autoStart == 0)
    {
        AngleSelect = 2;
        CtrlModeSelect = 2;
        TargetSpeed = 180;
        Command = 1;
    }
    if(autoStart == 1499)
    {
        Command = 0;
    }
    if(autoStart < 1500)
    {
        autoStart = autoStart + 1;
    }
}
也还是一样,电机能转起来,计时到的时候也能停,但是设置TargetSpeed不生效。不只是为什么?

 

0 点赞
1 解答
LinGuohui
Moderator
Moderator
Moderator
500 replies posted 50 likes received 250 solutions authored

应该是PFC打开太早了。Script代码上电后会自动运行,你在AutoStart == 0时打开PFC, 这时很多上电初始化操作可能还未完成。 你可以增加延迟,比如autoStart = 10? MCEDesigner 打开PFC时,上电已经过去好几秒了。

在原帖中查看解决方案

8 回复数
LinGuohui
Moderator
Moderator
Moderator
500 replies posted 50 likes received 250 solutions authored

你好,

帮忙提供下配置MCEWizard 的 .mc2和Script 文件。

0 点赞
张华
Level 2
Level 2
10 replies posted 5 likes given 10 sign-ins

_0-1685352407988.png

转速不对大概有点眉目。上图是MCEDesigner,关于StartMotor Function,中的寄存器TargetSpeed,右面表里有一项,Scaling,比例。如果我要转速度V,单位rpm,写在script文件里的数值,要除以这个系数。

例如我另一个电机,这个Sacling为0.4272461,欲转2400rpm,命令里需要写2400/0.4272461=5617。

试了一下是对的。

还请大神帮我看看为何script中一启动PFC就报DC over volt错误?

0 点赞
LinGuohui
Moderator
Moderator
Moderator
500 replies posted 50 likes received 250 solutions authored

是的,转速需要最大转速和最大计数值16383进行转换。

TargetSpeed(RPM)/max Speed(RPM)  = Speed count / 16383

张华
Level 2
Level 2
10 replies posted 5 likes given 10 sign-ins

如何提供?拖曳不进来。*.mc2格式不支持。*.mcs也不支持。

script比较短,如下:

/************************************************************/
/*Script user version value, should be 255.255*/
#SET SCRIPT_USER_VERSION (1.00)
#SET SCRIPT_TASK1_EXECUTION_PERIOD (5)
/*Defines number of lines to be executed every 10ms in Task1*/
#SET SCRIPT_TASK1_EXECUTION_STEP (200)
/************************************************************/
 
/*Task1 init function*/
Script_Task1_init()
{
int autoStart;
autoStart = 0;
}
 
/*Task1 script function*/
Script_Task1()
{
if(autoStart == 0)
{
PFC_Command = 1;    //有这行就报警
}
if(autoStart == 99)
{
TargetSpeed = 200;  //这行不起作用
Command = 1;
}
if(autoStart == 1499)
{
Command = 0;
}
if(autoStart < 1500)
{
autoStart = autoStart + 1;
}
}
0 点赞
LinGuohui
Moderator
Moderator
Moderator
500 replies posted 50 likes received 250 solutions authored

你可以将相关文件压缩后,即可拖到这里附件。

张华
Level 2
Level 2
10 replies posted 5 likes given 10 sign-ins

试验了一下,又是先启动了PFC,后启动motor,PFC会退出。但是具体条件搞不清了,先不管他。

我在想是不是一上电时启动PFC易出问题?让script在上电后很长时间启动PFC,可以启动了。

然后让script在启动PFC后很长时间启动motor,也可以了。

后来试了一下,与上电无关,因为板子没有下电。初始化500ms后启动PFC不能成功,750ms后能够启动PFC,中间的时间长度没有试,通过script计数实现延时。

0 点赞
张华
Level 2
Level 2
10 replies posted 5 likes given 10 sign-ins

在script里启动PFC:

PFC_Command = 1;

立刻在MCEDesigner里看到Motor和PFC都报警了,都是DC over voltage。但是在MCEDesigner里是能PFC就没问题。

不知为何。似乎用Scropt发命令还有一些隐含的条件。

0 点赞
LinGuohui
Moderator
Moderator
Moderator
500 replies posted 50 likes received 250 solutions authored

应该是PFC打开太早了。Script代码上电后会自动运行,你在AutoStart == 0时打开PFC, 这时很多上电初始化操作可能还未完成。 你可以增加延迟,比如autoStart = 10? MCEDesigner 打开PFC时,上电已经过去好几秒了。