搜索
bottom↓
回复: 3

关于ATmega16+A3955控制步进电机问题请教

[复制链接]

出0入0汤圆

发表于 2006-10-19 14:43:03 | 显示全部楼层 |阅读模式
我最做了一个用ATmega16和带细分的驱动A3955控制两相四线步进电机的项目。由于要控制两个相同的电机因此我用到四个A3955并用到ATmega16的A口和C口作为电机控制表输出口。我按照A3955说明书提供的8细分电机控制表编写了一个测试程序,目的让两个电机不停的转动,程序如下

//ICC-AVR application builder : 2006-10-9 17:15:10

// Target : M16

// Crystal: 8.0000Mhz

#include <iom16v.h>

#include <macros.h>

#include <stdio.h>

void port_init(void)

{

PORTA = 0xFF;

DDRA  = 0xFF;

PORTB = 0xFF;

DDRB  = 0x00;

PORTC = 0xFF; //m103 output only  

DDRC  = 0xFF;

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

}

#include <stdio.h>

#define uchar unsigned char

#define uint unsigned int

//---------------------- 延时函数 ----------------------

void delay_1us(void)

{

asm("nop");

}

void delay_us(unsigned int n)

{

unsigned int i=0;

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

   delay_1us();

   

}

//----------------------电机控制表----------------------

uchar lnp, rnp;

  const uchar motortbr[] = {0x99,0xB7,0xD5,0xF3,0xF1,0xF2,0xD4,0xB6,

                            0x98,0x7A,0x5C,0x3E,0x1E,0x2E,0x4C,0x6A,

                       0x88,0xA6,0xC4,0xE2,0xE0,0xE3,0xC5,0xA7,

                            0x89,0x6B,0x4D,0x2F,0x0F,0x3F,0x5D,0x7B};

  

  const uchar motortbl[] = {0x99,0xD7,0xB5,0xF3,0xF1,0xF2,0xB4,0xD6,

                            0x98,0x7A,0x3C,0x5E,0x1E,0x4E,0x2C,0x6A,

                       0x88,0xC6,0xA4,0xE2,0xE0,0xE3,0xA5,0xC7,

                            0x89,0x6B,0x2D,0x4F,0x0F,0x5F,0x3D,0x7B};

//---------------------主函数---------------------------

void main(void)

{

   port_init(); //端口初始化

   

   lnp = 0;

   rnp = 0;





    while(1)

      {

             PORTC = motortbr[rnp];

          if(rnp == 31)

                         rnp = 0;

          else

                     rnp++;

         PORTA = motortbl[lnp];

                 

          if(lnp == 31)

                         lnp = 0;

          else

                     lnp++;

         

                delay_us(2);

                         

      }

          

}程序很简单,烧入程序后发现其中一个电机转动没有问题另一个电机却出现问题,另一个电机转动几圈以后会颤动几下后继续转动或者变为反转。说明一下两个电机的控制表是不同的因为制版时由于疏忽将两个IO口与A3955的相应口接反了,但是本人认为两个控制表均没有问题。至于为什么会出现一个电机工作不正常本人百思不得其解请那位能够帮忙分析一下

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

 楼主| 发表于 2006-10-23 20:16:04 | 显示全部楼层


可能光说大家看不懂这回附了一张3955的图大家再看看哪位高手在指点下 我觉得是不是电流的问题啊 ??

出0入0汤圆

发表于 2007-9-26 14:55:26 | 显示全部楼层
你用的 470u  和 30K 吗?

a3955太脆弱了,我烧了好几片了

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-26 23:47

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

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