|
发表于 2016-1-17 17:03:50
|
显示全部楼层
本帖最后由 myqiang1990 于 2016-1-17 20:46 编辑
时隔4年,我来给大家解释一下楼主的代码是怎么加速的吧~其实楼主的加速方式是:定频率,变细分(改变步距角)的方式加速的~也就是说~楼的细分是在1-16细分之间变化,最高速是1细分,最低速是16细分,变速的方式是通过改变步距角方式实现的~那个表,只是楼主判断减速点的位置,就是减速的步数~并非是加速表!楼主根本没有通过改变定时器频率的方式进行加速,而是定频率,变步进角的方式实现加速的~
楼主判断升一个频率点或者将一个频率点的方法是:每当当前位置转过了一个步进角(1.8度,即16细分,即16微步后,会变一次速度~)代码如下,下面这句代码就是干这事的 >> 4 等于/16,即对16求正:
c = wPanMotorNowPosition >> 4;
if (c != cPanDriveValue)
{
cPanDriveValue = c;
Uln2803Drive(0, -c);
}
cPosition &= 0x3f;//这句话是保证速度在16细分4周期内变化,16*4=64,因为一整完整的正弦波是4周期,16细分的话,就是64
wTemp = wTableUnl2803DriveValue[cPosition & 0x0f]; //这句话是判断电机细分点在4周期中的,哪一个周期里~
后面的代码我也不理解,不过不太重要了~其他的代码都好理解~~
不是研究舞台灯光的,可能对楼主的加速方式不太了解,因为舞台灯光应用中,一个MCU要控制多路的步进电机,而且还得控制成本,所以一般MCU的得控制多达10几路的电机进行各自的加减速~所以~大家都去找一些另类的加速方式,其中定频率,变步距角的方式,是最简单,最有效,最省MCU时间,省MCU空间的,的一种梯形加速方式~~ |
|