永发信息网

ULN2003输出 控制12V步进电机

答案:2  悬赏:50  手机版
解决时间 2021-04-01 07:48
  • 提问者网友:骑士
  • 2021-04-01 03:26
ULN2003输出 控制12V步进电机
最佳答案
  • 五星知识达人网友:上分大魔王
  • 2021-04-01 04:45
明显缺少循环,试试下列程序:
void main()
{
while(1) {
p2=1;
p3=0;
p4=0;
p5=0;
a=1000;
while(a--);
p2=0;
p3=1;
p4=0;
p5=0;
a=1000;
while(a--);
p2=0;
p3=0;
p4=1;
p5=0;
a=1000;
while(a--);
p2=0;
p3=0;
p4=0;
p5=1;
a=1000;
while(a--);
}
}
---------------
由百度Hi得知,电机已经正常转动了。
另外要求正反转的控制,程序如下:
#include //k可以用
unsigned int a ;
sbit p2=P2^0;
sbit p3=P2^1;
sbit p4=P2^2;
sbit p5=P2^3;

sbit Key = P1^0;

Zheng()
{
p2=1;
p3=0;
p4=0;
p5=0;
a=1000;
while(a--);
p2=0;
p3=1;
p4=0;
p5=0;
a=1000;
while(a--);
p2=0;
p3=0;
p4=1;
p5=0;
a=1000;
while(a--);
p2=0;
p3=0;
p4=0;
p5=1;
a=1000;
while(a--);
}

Fan()
{
p2=0;
p3=0;
p4=0;
p5=1;
a=1000;
while(a--);
p2=0;
p3=0;
p4=1;
p5=0;
a=1000;
while(a--);
p2=0;
p3=1;
p4=0;
p5=0;
a=1000;
while(a--);
p2=1;
p3=0;
p4=0;
p5=0;
a=1000;
while(a--);
}

void main()
{
while(1) {
if(Key == 0) Zheng();
else Fan();
}
}
----------
实测:a等于1000时,延时有13ms多,不知楼上的1ms是怎样推算出来的?
另外,楼上说:“但单片机到uln2003之间最好加上上拉电阻。”
这是不行的,要加,也应该是加上“下”拉电阻,以保证uln2003输出高电平,否则四个线圈都可能有电,很可能会把电机烧了。
全部回答
  • 1楼网友:大漠
  • 2021-04-01 05:06
你的图接法没有问题,但单片机到uln2003之间最好加上上拉电阻。
估计是程序的问题,步进电机每步之间延时时间控制在5ms,电机运行比较好。
你的a才等于1000,推算下延时大概在1ms左右,这样电机很难转起来的
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯