打印

怎么用C语言控制步进电机

[复制链接]
4006|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
464912516|  楼主 | 2009-7-20 15:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
huangqi412| | 2009-7-20 15:35 | 只看该作者

都转了,接下来是具体参数的问题了,跟C语言无关...

使用特权

评论回复
板凳
腾腾| | 2009-7-20 16:29 | 只看该作者

给你一个例程

// P1_0为脉冲输出端,P1_1为方向输出端
//2相1.8度步进电机,16细分状态下正转1圈后反转1圈
//本测试程序运行在8051系列单片机环境下
#include<reg51.h>
#define unit unsigned int
sbit P1_0=P1^0;
sbit P1_1=P1^1;
unit time;
int m;
delay(){
for(m=0;m<10000;m++){;}
for(m=0;m<10000;m++){;}
for(m=0;m<10000;m++){;}
for(m=0;m<10000;m++){;}
for(m=0;m<10000;m++){;}
}
void timer0(void) interrupt 1 using 1{
if (time<=3200) /* 16细分×200脉冲/周 = 3200 个脉冲/周   如果是其他细分数,请改换相应的数据*/
{                            
  TR0=0;
  P1_0=!P1_0;
  for(m=0;m<30;m++){;}
  P1_0=!P1_0;
  time++;
}
  else {
  TR0=0;
  time=1;
  P1_1=!P1_1;
  delay();
 
  }
TH0=(65536-500)/256;
TL0=(65536-500)%256;
 
  TR0=1;
}
void main(void){
time=1;
TMOD=0x01;
P1_0=0;
P1_1=0;
delay();
 
TH0=(65536-500)/256;
TL0=(65536-500)%256;
EA=1;
ET0=1;
TR0=1;
do {} while (1);
}

想调速度的话,调整定时器设置

使用特权

评论回复
地板
腾腾| | 2009-7-20 16:30 | 只看该作者

用芯片驱动,不难

采用TA8435,速度的大小,取决于输入脉冲频率的高低

使用特权

评论回复
5
thanksgiving| | 2009-7-21 12:46 | 只看该作者

MARK

使用特权

评论回复
6
xwj| | 2009-7-21 13:10 | 只看该作者

发脉冲,调整发脉冲的速度即可

非常非常容易的

使用特权

评论回复
7
腾腾| | 2009-7-21 13:31 | 只看该作者

xwj大侠给我们普及一下步进电机的东东吧

期待~

使用特权

评论回复
8
5880527| | 2009-7-21 15:26 | 只看该作者

这玩意要转起来容易

但转得很好不容易,加速度要快,又不丢步,足够你研究大半年的了

使用特权

评论回复
9
古道热肠| | 2009-7-21 16:52 | 只看该作者

细读TA8435文档,应该不难

使用特权

评论回复
10
腾腾| | 2009-7-21 17:28 | 只看该作者

芯片类的驱动都不难,做好PCB即可

速度这块要靠控制

使用特权

评论回复
11
5880527| | 2009-7-22 09:13 | 只看该作者

是吗?

就做个最简单的梯形加减速好了,不要去整网上流传甚广的什么爬两步速度又保持几步

使用特权

评论回复
12
爱学小生| | 2009-10-15 13:31 | 只看该作者
这么复杂???

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

24

帖子

0

粉丝