搜索
bottom↓
回复: 44

拆了一个软驱,用AVR单片机直接控制其步进电机(有图片和C程序)!

[复制链接]

出0入0汤圆

发表于 2004-12-23 22:42:04 | 显示全部楼层 |阅读模式
我是用mege8L的PB0-PB3连接步进电机的四个接线端!

该步进电机的转矩很小,强烈建议不要将其从底座上拆下!!!否则没有轴承支撑,摩擦力太大,转不起来!





#include <iom8v.h>

#define uchar unsigned char

#define uint unsigned int





uchar np;

const uchar motortb[]={0x11,0x99,0x88,0xcc,0x44,0x66,0x22,0x33};//步进电机运行数据表



void delay(uchar t)// 每步延时的子程序

{

uchar i;

uint j;

for (i=0;i<t;i++)

for (j=0;j<900;j++);

}



void a_step(uchar d,uchar t) //步进电机走一步d=0 正转d=1 反转, t 越大走得越慢                           

{

if (d&0x01)

{

if (np==0)

np=7;

else np--;

}

else

{

if (np==7)

np=0;

else np++;

}

PORTB=motortb[np];

delay(t);

}



void a_turn(uchar d,uchar t)// 步进电机走一圈

{

uchar i;

for (i=0;i<96;i++)

a_step(d,t);

}



void main(void)

{

DDRB=0xff;

PORTB=0x44;

np=4;

while (1)

a_turn(1,5);//转速可以在5-25左右的范围内调节,t太小则嗡嗡作响,转不起来

}



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

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
头像被屏蔽

出0入0汤圆

发表于 2004-12-23 22:53:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2004-12-24 08:53:21 | 显示全部楼层
不错。费软驱我也有。做着玩玩。armok的疑问我也有,电源呢?

出0入0汤圆

发表于 2004-12-24 09:02:15 | 显示全部楼层
PB0~PB3就是电源

出0入0汤圆

发表于 2004-12-24 09:05:38 | 显示全部楼层
用端口的输出和吸入电流就可以,不用电源

因为m8手册上说:



端口B 为8 位双向I/O 口,其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。



端口 A,B,C,D的直流特性

当VCC = 5V

IOL = 20 mA,

IOH = -20 mA



当VCC = 3V

IOL = 10 mA,

IOH = -10 mA
头像被屏蔽

出0入0汤圆

发表于 2004-12-24 10:15:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2004-12-24 11:18:24 | 显示全部楼层
AVR能直接驱动步进电机?有点夸张。
头像被屏蔽

出0入0汤圆

发表于 2004-12-24 12:57:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2004-12-24 13:00:25 | 显示全部楼层
那个步近电机可以用2822做驱动,我用51搞定过



马达的驱动要看马达的动率了,小功率的三极管就可以

出0入0汤圆

发表于 2004-12-24 13:01:07 | 显示全部楼层
armok:

   软驱上是用lb1838驱动的
头像被屏蔽

出0入0汤圆

发表于 2004-12-24 13:10:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2004-12-24 16:21:08 | 显示全部楼层
找了些图。

这个最简单,也最不好用





这个好一些,但多了些东西







这个个人认为比较好,是一个微型打印机上控制电机的那部分电路,我从电路板上测出来的,简单,功率也不小,可惜我搞不懂他是怎么控制那个电机的,而且图上有些元件的使用也有些奇怪。





另外,有些单片驱动电路也不错啊

再者,armok应该有这方面的资料,干嘛还要人找?
头像被屏蔽

出0入0汤圆

发表于 2004-12-24 17:32:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2004-12-24 17:46:18 | 显示全部楼层
呵呵,刚好我做过类似实验...



控制那个软驱上的步进电机可能上面的图都不行。第一个我用过,没搞定,第二个是给直流电机用的(PWM那种),第三个没试过,不知道。



建议用2882,4路接到单片机和步进电机上,所有IN-接上拉和下拉电阻,阻值一样,用来调节电平,用三极管不一定好用。电路不是问题,主要是看走步,走步资料有些难找

出0入0汤圆

发表于 2004-12-24 17:47:14 | 显示全部楼层
如果电机线圈不串入电阻会不会过流烧坏电机或电路?

出0入0汤圆

发表于 2004-12-24 19:31:02 | 显示全部楼层
没试过....

出0入0汤圆

发表于 2004-12-25 11:32:29 | 显示全部楼层
不知道你们所说的电机的额定功率和额定电流有多大,如果是做电机正反转控制的话,可以采用L298N或是LM18245,这两款芯片都是比较好而且比较常用的电机驱动芯片,输出的电流也比较大,我对L298稍微了解得多一点,它的最大输出电流可以达到4安,但比较危险,如果想输出较大的电流可以采用多路输出并联使用,一般输出1安没什么问题。其控制也表简单,AVR单片机就可以直接驱动。

  之于14楼说的串电阻,一般是没有必要的,当然,如果你不知道该电机的额定电流的话,在做实验的时候最好还是串上电阻比较好,烧了电机就亏大了哈!
头像被屏蔽

出0入0汤圆

发表于 2004-12-25 11:39:04 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2004-12-29 22:14:47 | 显示全部楼层
L29810来块吧, LM18245好象要贵点

出0入0汤圆

发表于 2004-12-30 02:24:24 | 显示全部楼层
L298如果不配上L297就不能匹配实现其斩波恒流的效果

这样就显得贵了,可以用4个Mosfet来搭推挽,前端可以用小的bss138和bss84做Mosfet的驱动,不过我还是觉得全桥的不错,btw:armok可以到ST的网站上有不少全桥的驱动芯片

有些直接就带softstar什么的,推荐大家做马达可以去看看他们的芯片

芯片的chipblock对于驱动马达电路很有启发

出0入0汤圆

发表于 2004-12-30 08:27:05 | 显示全部楼层
建议楼上好好看看L298的使用吧!我们实验室用它来驱动足球机器人的四个行走电机(需要精确定位),一点问题都没有。不向你说得还需要297,多余吧

出0入0汤圆

发表于 2004-12-30 12:16:51 | 显示全部楼层
hehe,我一般也不用L297

但楼主要是仔细看看L298的英文文档在来说话吧!

出0入0汤圆

发表于 2005-4-9 19:55:29 | 显示全部楼层
今天弄了个软驱的电机,有没有人驱动成功的呢?

出0入0汤圆

发表于 2005-4-10 18:14:20 | 显示全部楼层
L298可以用单片机直接驱动,我买过L298曾花了14.5元一片!

现在可以到汕头立星电器买拆机的,只要1.5元一片,保用.

出0入0汤圆

发表于 2005-4-11 11:45:04 | 显示全部楼层
常用步进电机有4线5线6线

5,6 线一般我用2803或FET

4线 用L293

4线细分驱动 2916+7528



很喜欢这里气氛,学到不少东西。可惜我不会AVR,

平时用PLM和C51,程序上帮不上忙。

出0入0汤圆

发表于 2005-4-11 19:14:48 | 显示全部楼层
阿莫你的分立元件的接法不会造成短路吗?
头像被屏蔽

出0入0汤圆

发表于 2005-4-11 20:12:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

发表于 2005-5-23 12:16:33 | 显示全部楼层
用mega32三个口线驱动软驱电机.

PA2接LB1833 ENA1\2 脚;

PA1接LB1833 IN1 脚;

PA0接LB1833 IN2 脚.

*********************************************************************************

//ICC-AVR application builder : 2005-5-20 10:40:30

// Target : M32

// Crystal: 3.6864Mhz



#include <iom32v.h>

#include <macros.h>



unsigned char np;



//步进电机运行数据表

const unsigned char motortb[]={0x05,0x07,0x06,0x04,0x05,0x07,0x06,0x04};



void delay ( unsigned char t                  );// 每步延时的子程序

void a_step( unsigned char d, unsigned char t );//步进电机走一步d=0 正转d=1 反转



void port_init( void )

{

    PORTA = 0x00;

        DDRA  = 0xFF;

        PORTB = 0xFF;

        DDRB  = 0x00;

        PORTC = 0xFF;

        DDRC  = 0x00;

        PORTD = 0xFF;

        DDRD  = 0x00;

}



//call this routine to initialise all peripherals

void init_devices( void )

{

    //stop errant interrupts until set up

        CLI(); //disable all interrupts

        port_init();



        MCUCR = 0x00;

        GICR  = 0x00;

        TIMSK = 0x00; //timer interrupt sources

        SEI(); //re-enable interrupts

        //all peripherals are now initialised

}



void delay ( unsigned char t )// 每步延时的子程序

{

    unsigned char i;

    unsigned int j;

    for (i = 0 ; i < t ; i++ )

        {

        for ( j = 0 ;j < 800 ; j++ )

                ;

        }

}

void a_step ( unsigned char d, unsigned char t) //步进电机走一步d=0 正转d=1 反转 t // 越大走得越慢

{

    if ( d & 0x01 )

    {

        if ( np == 0 )

                {

                    np = 7;

                }

        else

                {

                    np--;

                }

    }

        else

        {

            if ( np == 7 )

        {

                    np = 0;

                }

        else

                {

                    np++;

                }

    }

    PORTA = motortb[np];

    delay(t);

}

void a_turn (unsigned char d, unsigned char t)// 步进电机走一圈

{

    unsigned char i;

        for ( i = 0 ; i < 96 ; i++ )

        {

            a_step ( d, t );

        }

}





void main ( void )

{

    np = 4;

    while (1)

        {

        a_turn ( 1, 1 );

        }



}

*********************************************************************************





出0入0汤圆

发表于 2005-6-10 10:14:49 | 显示全部楼层
好,我也来玩玩!

出0入0汤圆

发表于 2005-6-11 08:47:08 | 显示全部楼层
用2803控制

出0入0汤圆

发表于 2005-6-15 10:38:18 | 显示全部楼层
刚刚拆了一个5"软驱,取出步进电机,测量绕组电阻约50 OHM,串联了100 OHM电阻,PB0-3驱动,一切顺利.

出0入0汤圆

发表于 2005-7-6 02:41:47 | 显示全部楼层
请教大家,软驱中控制盘片转动的电机,是步进电机吗?好像也是4根线

出0入0汤圆

发表于 2005-7-13 13:15:04 | 显示全部楼层
4根线,双极性的。

现在市面上大都是双极性的驱动IC。单极性的比较少啊?

哪位可以推荐几个。

出0入0汤圆

发表于 2006-3-21 13:00:21 | 显示全部楼层
我想用L298N驱动步进电机 高手帮我做一下 要求很简单 我是新手做不来

Protel 全图都搞上来还有怎么过程都说下 谢谢了!用到的芯片市场上要买的到的哟~~

出0入0汤圆

发表于 2006-5-19 09:41:31 | 显示全部楼层
上面程序的时序对吗?

应该是 A+ 到 A-   B+ 到 B-

       A- -  A+   B+ -  B-

       A- -  A+   B- -  B+

       A+ -  A-   B- -  B+

出0入0汤圆

发表于 2006-9-1 21:25:47 | 显示全部楼层
软驱步进我用2051,推2003驱动过,单速度上不能走的过快,否则就会有叫声

出0入0汤圆

发表于 2006-9-7 22:55:55 | 显示全部楼层
把这电机安在了4驱车的方向控制轮上了。







不过下面的图有什么特点?

出0入0汤圆

发表于 2006-9-10 09:08:09 | 显示全部楼层
请问直接用PC口驱动软区的那个电机 不会烧坏单片机吧????

出0入0汤圆

发表于 2008-9-27 20:32:38 | 显示全部楼层
不错,明天试试

出0入0汤圆

发表于 2011-10-20 22:40:44 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-25 21:09:21 | 显示全部楼层
呵呵,我用89c2051和ULN2003也驱动过,不过转动一圈的时候有嗒嗒声,不知道是什么原因。

正面 (原文件名:20110515025-40%.jpg)


背面 (原文件名:20110515026-40%.jpg)

出0入0汤圆

发表于 2011-10-25 21:31:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-7-17 12:18:09 | 显示全部楼层
不管用啊!怎么回事?

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-10-3 10:27

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

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