2020-02-05 08:55发布
hyc07209 发表于 2012-5-30 19:21 下面是我根据楼主 chenyuqiu 陈工 的提示写的伪代码,希望能帮到你,具体也可看这个帖子 STC11F16XE驱 ...
最多设置5个标签!
*
最小细分数=|设定位置和现在位置的绝对值|÷255×速度设定值;
switch(State)
{
case 空闲:
时间片计数器=0;
象限计数器 =0;
开始细分数初始=16;
if(有位置差)State=启动;
break;
case 启动:
if((时间片计数器==0)||(时间片计数器==现在细分数))
{
象限计数器++;
if(象限计数器==3)
{
象限计数器=0;
距离差--;
}
if(现在细分数!=最小细分数)
{
现在细分数--;
if(象限计数器&0x01)//如果象限值是单数,sin值从90°开始取
时间片计数器=现在细分数;
else 时间片计数器=0;
}
else
State=匀速;
}
if(象限计数器&0x01)时间片计数器--;
else 时间片计数器++;
正弦值=tab[现在细分数][时间片计数器];
余弦值=tab[现在细分数][现在细分数-时间片计数器];
break;
case 匀速:
if((时间片计数器==0)||(时间片计数器==现在细分数))
{
象限计数器++;
if(象限计数器==3)
{
象限计数器=0;
距离差--;
if(距离差剩下不多了)//留一点距离用来减速
State=减速;
}
if(象限计数器&0x01)//如果象限值是单数,sin值从90°开始取
时间片计数器=现在细分数;
else 时间片计数器=0;
}
if(象限计数器&0x01)时间片计数器--;
else 时间片计数器++;
正弦值=tab[现在细分数][时间片计数器];
余弦值=tab[现在细分数][现在细分数-时间片计数器];
break;
case 减速;
if((时间片计数器==0)||(时间片计数器==现在细分数))
{
象限计数器++;
if(象限计数器==3)
象限计数器=0;
if(现在细分数!=16)
{
现在细分数++;
if(象限计数器&0x01)//如果象限值是单数,sin值从90°开始取
时间片计数器=现在细分数;
else 时间片计数器=0;
}
}
if(象限计数器&0x01)时间片计数器--;
else 时间片计数器++;
正弦值=tab[现在细分数][时间片计数器];
余弦值=tab[现在细分数][现在细分数-时间片计数器];
break;
default:
break;
}//end switch(State)
*/
写的不错 学习啦
一周热门 更多>