此程序是控制电机3相通电的开关程序 temp=srd_active[0]+(srd_active[1]*2)+(srd_active[2]*4)+(work_mode*8)+(pwm_mode*16); *ptrACTIVE=temp; 其中srd_active[0]=0 srd_active[1]=0 srd_active[2]=0 work_mode=1 pwm_mode=1 *ptrACTIVE不知道是什么其中srd_active的3个值是0或1,是电机3相的高低电平谁能告诉我*ptrACTIVE得的值是什么,*ptrACTIVE是什么跪求
源代码给出:
if (direct==forward)
{
switch(rotor) {
case 1:
srd_active[0]=0x1;
srd_active[1]=0x0;
srd_active[2]=0x0;
break;
case 2:
srd_active[0]=0x0;
srd_active[1]=0x1;
srd_active[2]=0x0;
break;
case 4:
srd_active[0]=0x0;
srd_active[1]=0x0;
srd_active[2]=0x1;
break;
case 3:
srd_active[0]=0x1;
srd_active[1]=0x1;
srd_active[2]=0x0;
break;
}
}
temp=srd_active[0]+(srd_active[1]*2)+(srd_active[2]*4)+(work_mode*8)+(pwm_mode*16);
*ptrACTIVE=temp;
如果rotor=2
我看的就是这个,都给出来了
继续跪求
[
本帖最后由 lnasxywzl 于 2011-6-27 16:24 编辑 ]
此帖出自
小平头技术问答
case 1:
srd_active[0]=0x1;
srd_active[1]=0x0;
srd_active[2]=0x0;
break;
case 2:
srd_active[0]=0x0;
srd_active[1]=0x1;
srd_active[2]=0x0;
break;
case 4:
srd_active[0]=0x0;
srd_active[1]=0x0;
srd_active[2]=0x1;
break;
case 3:
srd_active[0]=0x1;
srd_active[1]=0x1;
srd_active[2]=0x0;
break;
}
这段程序比较简单,比如rotor==2用二进制来表示就是010,分离出来给三个标志来记录。其他的也是一样的。把rotor的值分离出来。放在数组的三位当中去了。
第二点:
根据变量的定义SRD_xxxx,我可以知道楼主控制的是开关磁阻电机了。
这样的话,利用角度传感器得来的信号就是应该上面得出来的四个结果
1,2,3,4了。
这样我能想到的是:那个输出结构一定是控制字。
这个控制字来控制,硬件的PWM信号的。
楼主,你结合开关磁阻电机想想了。
其实要想知道更多,我觉得楼主应该把*ptrACTIVE最后被哪个函数调用
或是,作为哪个数组的标号给出。
自然就知道,他要干什么了。
我做无刷电机控制,开关磁阻只是了解啊。
你就凑合着理解。
+(work_mode*8)+(pwm_mode*16)
=srd_active[0]+(srd_active[1]<<1)+(srd_active[2]<<2)
+(work_mode<<3)+(pwm_mode<<4)
=000x xxxx
那你就把全部代码放上来,PACTIVE明显是个指针,并不需要直接调用
一周热门 更多>