搜索
bottom↓
回复: 20

单片机驱动两个步进电机

[复制链接]

出0入0汤圆

发表于 2010-10-27 08:20:15 | 显示全部楼层 |阅读模式
单片机驱动两个步进电机,速度单独可以调节的,麻烦哪位给个思路,谢谢了!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2010-10-27 10:39:12 | 显示全部楼层
期待中!!!

出0入0汤圆

发表于 2010-10-27 10:56:21 | 显示全部楼层
w 我也想知道思路。。,MARK 。。

出0入0汤圆

发表于 2010-10-27 11:47:20 | 显示全部楼层
有两个298驱动两个4相得步进电机!用PWM信号控制速度!

出0入0汤圆

发表于 2010-10-27 11:50:50 | 显示全部楼层
新手路过,正在做单片机驱动步进电机~
路过,顺手顶起
顺便弱弱问一句:楼主说的好像不太清楚~“单片机驱动两个步进电机,速度单独可以调节的”,仿佛使用两个PORT,写两段不同的程序就可以了~
勿喷~

出0入8汤圆

发表于 2010-10-27 12:30:33 | 显示全部楼层
用297+298配合吧,可以吧单片机资源空下来的。要是直接驱动的话,基本做不了其他什么事情了

出0入0汤圆

发表于 2010-10-27 12:38:11 | 显示全部楼层
还是用专用DRIVE IC 方便 !

出0入0汤圆

发表于 2010-10-27 13:10:11 | 显示全部楼层
没错,L297+L298配合驱动步进电机用MCU来控制的话,非常简单。MCU只需要输出频率信号的高低就能控制步进电机的转速

出0入0汤圆

发表于 2010-10-27 13:10:27 | 显示全部楼层
估计LZ是要驱动两个轴。貌似还有插补功能(速度单独调节)

出0入0汤圆

 楼主| 发表于 2010-10-27 14:11:30 | 显示全部楼层
谢谢大家了,用L297+L298硬件复杂了点,MCU只通过2803驱动单独调节两个步进电机的速度,我现在用两个定时器做,中断嵌套会出现问题,电机要么有一个不转,要么电机就会卡。。。

出0入8汤圆

发表于 2010-10-27 14:52:21 | 显示全部楼层
回复【10楼】liuguang  
   谢谢大家了,用l297+l298硬件复杂了点,mcu只通过2803驱动单独调节两个步进电机的速度,我现在用两个定时器做,中断嵌套会出现问题,电机要么有一个不转,要么电机就会卡。。。
-----------------------------------------------------------------------

这就要看你选择了,硬件复杂,软件就简单了;你选择了简单的硬件,注定软件编写就麻烦了。

出0入0汤圆

发表于 2010-12-20 14:23:41 | 显示全部楼层
路过顶一个,偶做过给个意见:
步进电机驱动看你设计是否价格考虑,如果价格没问题要外加驱动芯片,如果有问题直接用带有PWM的mcu,2路PWM输出就OK 了,至于电机一个转 一个不转 在于你程序了,一些仪表上基本上就有2步进电机,都能正常工作的,2路中断测量,电机转动也用中断去控制就OK

出50入10汤圆

发表于 2010-12-20 22:39:02 | 显示全部楼层
留个联系方式:控制N个都可以。

出0入0汤圆

发表于 2012-5-30 19:21:40 | 显示全部楼层
下面是我根据楼主  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)
*/

出0入0汤圆

发表于 2012-6-29 17:32:46 | 显示全部楼层
hyc07209 发表于 2012-5-30 19:21
下面是我根据楼主  chenyuqiu 陈工 的提示写的伪代码,希望能帮到你,具体也可看这个帖子    STC11F16XE驱 ...

写的不错 学习啦

出0入0汤圆

发表于 2012-6-29 17:52:17 | 显示全部楼层
下面是我根据楼主  chenyuqiu 陈工 的提示写的伪代码,,頂上

出0入0汤圆

发表于 2012-7-3 10:28:32 | 显示全部楼层
用LS单片机,支持SVPWM/PWM,还有多核,可以同时独立控制多个电机。需要详细资料可以随时和我们联系。QQ:66474360

出0入0汤圆

发表于 2012-7-3 11:56:17 | 显示全部楼层
随便一个单片机就搞定了,N个都可以

出0入0汤圆

发表于 2012-7-4 09:47:55 | 显示全部楼层
"hyc07209 "写得非常的好,学习了!

出0入0汤圆

发表于 2012-7-4 10:56:34 | 显示全部楼层
用uln2003驱动,再用两个定时器分别控制电机就行了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-29 00:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表