第一:你的伺服电机是什么样的?是不是就是舵机?如果是舵机——SG90——它的控制是这样的:知识:舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:
0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2.0ms-----------135度; 2.5ms-----------180度; 程序是这样的: void DJZD (void)//舵机转动子函数 { unsigned char i;//舵机信号脉冲次数 for (i=0;i<75;i++)//通过试验,从0度转动到180度,至少要循环75次 { DJ=1; Delay50us(GT); DJ=0; Delay50us(DT); } DJ=0;
} GT=20;DT=380;转动到45度
GT=30;DT=370;转动到90度,其它角度自己可以算。
这里的角度是固定的,不存在45度加45度的说法。注意!!!
第二:步进电机——以下以四相五线步进电机为例
知识:我的步进电机参数为:步距角5.625度,是减速电机1:64;即是说:每一次脉冲,电机转动角度为5.625/64度
所以,转动45度,就应该有45*64/5.625=512次脉冲。
程序如下:
- void Motor() //电机旋转子函数
- {
- unsigned char i;
- for(i=0;(i<8);i++) //四相单双八拍
- {
- if (jd==0) //jd为0则停转
- {
- Rotation=0xf0;
- break;
- }
- if (k==0)
- {
- Rotation=FFW2[i]; //输出正转的相
- }
- else
- {
- Rotation=FFW1[i]; //输出反转的相
- }
- Delay(Time); //Time改变这个参数可以调整电机转速
- jd--;
- }
- }
复制代码
其中,变量jd(角度)在主程序中就应该赋值512,若再加45度,则可以再来一次就行。这里的角度,是可以累加的,不是固定的。其它角度自己可以算,当然要注意自己的步进电机参数。
|