我的步进电机的C语言程序到底错在哪 我是新手

[复制链接]
3846|13
 楼主| zdp1214 发表于 2009-10-12 16:38 | 显示全部楼层 |阅读模式
#include <reg51.h>
#include <absacc.h>
#define uint unsigned int
#define uchar unsigned char

void out(uchar state);//声明一个out 函数
void delay(uint x);//声明延迟函数

main()
{
for(;;)
{  
      uchar phase=0;
out(phase=++phase&0x03);//0000--0001--0010--0011--0000
}
}


void out(uchar state)
{
code uchar table[]={0x02,0x04,0x08,0x10};
P1=table[state];
delay(8);
}

void delay(uint x)
{
uchar j;
while(x-->0)
{
for(j=0;j <125;j++)
{;}
}
}
我先将程序烧进去,将步进电机的红色对准VCC,其他对准ABCD插在板上,然后用杜邦线将ABCD于p1.1p1.2p1.3p1.4短接
机器不转....~~~~为什么
帮帮我改改 ..
zhaiweilei 发表于 2009-10-12 17:39 | 显示全部楼层
看看是不是硬件的问题,你用什么驱动?
suijinpeng 发表于 2009-10-18 15:36 | 显示全部楼层
单片机直接驱动的?
suijinpeng 发表于 2009-10-18 15:37 | 显示全部楼层
senzh01 发表于 2009-10-18 19:11 | 显示全部楼层
本帖最后由 senzh01 于 2009-10-18 19:12 编辑

单片机直接驱动不可以,没那么大的电流!仔细看看步进电机的参数!
零下摄氏度 发表于 2009-10-19 22:54 | 显示全部楼层
没有0000吧
hou 发表于 2009-10-20 00:26 | 显示全部楼层
1.参考5楼,1楼对P1口驱动能力(电流)的认识基本是空白:首先这种情况不能用I/O口直接驱动;其次,如果说你的步进电机电流小到15mA以下,可以用口线直接驱动,但是也应该用灌电流。
2.步进电机驱动方式:1楼你的步进电机应该是5出线的四相电机,四相的一端接到一个公共电源VCC上,另外的四个端子ABCD,哪一个为低电平则哪一相通电。你的控制表说明你是三相导通,(你选择的)那一相截止!这种情况下我估计你的单片机已经烧毁了。
3.延时程序中,for循环在keil编译后大概要1000个机器周期,不知道你的晶振是多高,如果是6MHz,则一个for循环需要2ms,你执行8个for循环16ms,步进电机换向速度62.5步/s。这是不是你期望的速度?
fdsfdsa 发表于 2009-10-20 12:13 | 显示全部楼层
看一看是不这儿的问题:
for(;;)
{  
      uchar phase=0;
      out(phase=++phase&0x03);//0000--0001--0010--0011--0000
}
每次都循环 phase = 0 ,那么总的来说实现不了你那个0000--0001--0010--0011--0000 吧。试下把它改为静态变量或者把phase 在循环外赋值。
cerbcm 发表于 2009-10-20 19:32 | 显示全部楼层
学习一下。。。
hou 发表于 2009-10-21 00:06 | 显示全部楼层
8楼、9楼有眼力!
wyxwgn3 发表于 2011-4-5 09:19 | 显示全部楼层
是的。电机大了,也不能直接驱动
375606426 发表于 2011-8-15 08:44 | 显示全部楼层
只能说楼主还是懂的少点,我还是头一次听说51直接驱动电机滴,学着点!:lol有时间去看看老X的讲解去!
他是这方面的高手
815415220 发表于 2011-11-2 21:10 | 显示全部楼层
来学习的,谢谢楼上各位的经验:D
815415220 发表于 2011-11-2 21:13 | 显示全部楼层
13# 375606426

“老X的讲解”在哪里啊,我想去学习一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部