搜索
bottom↓
回复: 7

用avr-51實驗板做的步進電機實驗...

[复制链接]

出0入0汤圆

发表于 2005-4-9 14:04:17 | 显示全部楼层 |阅读模式
本實驗用的步進電機為6線四相, 實現控制步進電機的正反向, 加減速的控制.



//ICC-AVR application builder : 2005/4/9 上午 12:31:21

// Target : M16

// Crystal: 4.0000Mhz

#include <iom16.h>

#include <macros.h>



#define uchar unsigned char

#define uint unsigned int



const uchar step[ ] ={0x11,0x99,0x88,0xcc,0x44,0x66,0x22,0x33}; // 1-2相方式 步進電機驅動代碼

//const uchar step[ ] ={0xcc,0x66,0x33,0x99,0xcc,0x66,0x33,0x99}; // 2相方式 步進電機驅動代碼

uchar j;turn;

uint s;  



void port_init(void) //初始化端口

{

PORTA = 0xFF;

DDRA  = 0xFF;

PORTB = 0x00;

DDRB  = 0x00;

DDRC  = 0xFF;

PORTD = 0x00;

DDRD  = 0x00;

}



void init_devices(void) //初始化裝置

{

CLI();

port_init();



MCUCR = 0x00;

GICR  = 0x00;

TIMSK = 0x00;

SEI();

}





void delay(uint t) // 長延時

{

  uint m,n;

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

  {

    for (n=0;n<100;n++);

  };

}



void delay_2(uint t) // 短延時

{

  uint i;

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

}



void scan_key()  // 按鍵掃瞄

{           

  if ((PIND & 0x01) == 0) // 減速

  {

    PORTA = 0xfe;

    delay_2(1000);

        s = s-100;

  }

  

  if ((PIND & 0x2) == 0) // 加速

  {

    PORTA = 0xfe;

    delay_2(1000);

        s = s+100;

  }

   

  if ((PIND & 0x4) == 0) // 改變轉向

  {

    PORTA = 0xfe;

    delay_2(1000);

        turn = ~turn;

  }

  

  while((PIND & 0x07) != 0x07);        // 判斷按鍵是不是放開

  PORTA = 0xff;             

}



void main(void)

{



init_devices();



turn = 0x01;

j = 0;

s = 1000;

  

  for (;;)

   {            

         

         scan_key();               

                 

                 if ((turn & 0xff) == 0x01) // 判斷方向, turn == 0x01 時為正轉

                   {

                     j++;

             if (j>8){ j = 0;};       

                   }

                   else

                   {

             if (j==0){ j = 8;};                  

                     j--;

                   }      



         if (s <= 50){ s=1000;}; //

                     

         PORTC = step[j]; // 步進驅動信號輸出

         PORTA = 0xfd; // 開led 顯示

             delay(s);    // 延時, 用來控制速度

                 PORTA = 0xff; // 關led 顯示



   }

}





實驗板接線:



PC0 ----> JH1.1

PC1 ----> JH1.2

PC2 ----> JH1.3

PC3 ----> JH1.4



PD0 ----> JG5.K4

PD1 ----> JG5.K3

PD2 ----> JG5.K2



PA0 ----> JA.1

PA1 ----> JA.2



步進電機接線:

JH2.1 ----> 步進電機 A 相

JH2.2 ----> 步進電機 B 相

JH2.3 ----> 步進電機 A~ 相

JH2.4 ----> 步進電機 B~ 相

AB相的中心抽頭接電源正極.

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2005-4-9 17:22:46 | 显示全部楼层
avrboy 單片小子:

步进电机是不是用5V的?从光驱上拆下来的可以用吧?

出0入0汤圆

 楼主| 发表于 2005-4-10 14:42:41 | 显示全部楼层
沒錯,是5v的, 在3.5" 軟驅的拆下!

出0入0汤圆

发表于 2005-4-28 19:01:48 | 显示全部楼层
如果是2相电机,就用下面这个吧?

const uchar step[ ] ={0xcc,0x66,0x33,0x99,0xcc,0x66,0x33,0x99};

出0入0汤圆

 楼主| 发表于 2005-4-28 21:11:21 | 显示全部楼层
如果是2相电机,就用下面这个吧?

const uchar step[ ] ={0xcc,0x66,0x33,0x99,0xcc,0x66,0x33,0x99};  

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

並不是這樣的, 這只不過是把四相步進電機用2相同時激勵的方式驅動.

如果用兩相的步進電機,要用橋式驅動方式!

出0入0汤圆

发表于 2005-8-21 16:13:55 | 显示全部楼层
请单片王子,下次用protel画现连接图,那样就可以令我们的新手们更快理解你的程序了

出0入0汤圆

发表于 2005-8-23 11:17:38 | 显示全部楼层
请记好:一定要用L298驱动,不然力量太弱,只能推动主轴,不能推动磁头。{0X60,0X66,0X06,0X56,0X50,0X55,0X05,0X65}

BIT  7:NC       BIT 6:  A相enable

BIT  5:A相+    BIT 4:  A相-

BIT  3:NC       BIT 2:  B相enable

BIT  1:B相+    BIT 0:  B相-

其实在这里ENABLE可以不用。

出0入0汤圆

 楼主| 发表于 2005-8-23 12:37:45 | 显示全部楼层
我的實驗是6線四相的步進電機, 用lm2003 驅動就足夠了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 21:48

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

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