单片机驱动两个步进电机

2020-02-05 08:55发布

单片机驱动两个步进电机,速度单独可以调节的,麻烦哪位给个思路,谢谢了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
our2008
1楼-- · 2020-02-07 04:03
留个联系方式:控制N个都可以。
hyc07209
2楼-- · 2020-02-07 04:48
下面是我根据楼主  chenyuqiu 陈工 的提示写的伪代码,希望能帮到你,具体也可看这个帖子    STC11F16XE驱动4个步进电机(软件实现16细分)http://www.ourdev.cn/thread-4440711-9-1.html

*
最小细分数=|设定位置和现在位置的绝对值|÷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)
*/

小黑鱼1148
3楼-- · 2020-02-07 07:53
hyc07209 发表于 2012-5-30 19:21
下面是我根据楼主  chenyuqiu 陈工 的提示写的伪代码,希望能帮到你,具体也可看这个帖子    STC11F16XE驱 ...

写的不错 学习啦
wmsky
4楼-- · 2020-02-07 08:31
 精彩回答 2  元偷偷看……
hawk666
5楼-- · 2020-02-07 09:21
用LS单片机,支持SVPWM/PWM,还有多核,可以同时独立控制多个电机。需要详细资料可以随时和我们联系。QQ:66474360
raxb
6楼-- · 2020-02-07 12:55
随便一个单片机就搞定了,N个都可以

一周热门 更多>