51单片机控制步进电机

用一块AD0832对光敏电阻进行数据采集,将数字信号给51单片机,单片机将此数据与自己设定的数据进行比较来控制步进电机转动,求电路图和程序

第1个回答  2012-04-14
这个简单,让我来教楼主怎么玩
首先我说下思路:
我们采用P1口来采集ADC0832的8位数据,用P0.0口控制步进电机动作,利用T0的时间中断来采集P1口的ADC0832数据并做出比较后设置步进电机启动标志位start=1;并设置他的运行频率,当然,楼主没说怎么比较,我这就只是写了个简单的例子,一通百通,希望对你有帮助
下面是程序:
#include <reg51.h> //选用晶振11.0592MHz
unsigned int m=0,n=0; //设置循环的周期
unsigned char start=0,t0temp=0;
sbit Y0=P0^0; //控制步进电机的管脚
delay()
{
unsigned char i,j;
for(i=m;i>0;i--)
for(j=n;i>0;j--);
}

main()
{

//自检测T0时间设置
ET0=1;
TMOD|=0x01;
TH0=0XFC; //1ms中断扫描
TL0=0X66;
IT0=1; //下降沿触发
TR0=0; //关闭扫描
/***********************初始化完毕***********************/
//****************I/O口程序
while(1)
{
while(start)
{
delay();
Y0=~Y0;
}
}
}

void counter1(void) interrupt 1 //T0计时器中断
{
if(t0temp%4)t0temp++; //4ms时间才采集一次P0口的数据
else
{
t0temp++;
//这里就写你怎么做对比的程序,我举个例子
if(P1>150)
{start=1;n=1000;m=0;} //入错采用12M晶振,那这时候控制步进电机的输出周期就是1ms一次,也就是1000HZ
else {start=0;n=0;m=0;}
}
}
//PS:我在输出频率中用了两个全局变量m,n可以延迟很长时间,楼主可以根据需要选用,一般16位的,选用一个就可以了,另一个放弃
OK,至于电路图,我软件没有ADC0832的封装,不然就发给你了,但想来楼主完全就没必要担心,ADC0832的8位数据接到P1口,P0.0控制步进电机启动的三极管,电路图就那么简单!追问

能加Q教教我吗,毕业设计好蛋疼啊443714003

追答

当然可以

本回答被提问者采纳
第2个回答  2012-04-15
楼下的兄弟,说的挺详细了
第3个回答  2012-04-14
haha

如何用c51编写51单片机控制步进电机转动程序
A=( 50h ),SP=( 50h ),(51H)=( 30h ),(52H)=(50h ),PC=( 5030h )pc总是指向下一条指令的首地址的。但是在返回的时候得看堆栈中的数了。上面程序执行完之后:(A)=50H;sp=50H(因为在程序中,sp减了两次,后来又加了两次,在程序最后ret有在返回的时候减了两次...

51单片机可以直接驱动步进电机么
51单片机不能直接驱动步进电机,因为单片机的输出的是数字信号,不是驱动电流,所以需要外加驱动,舵机是可以通过单片机直接控制的PWM控制。51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8031单片机,后来随着Flash rom技术的发展,8031单片机取得了长足的进展,成为应用最广...

51单片机控制步进电机正反转、加减速
我本来想实现步进电机自由调速的,可现在的程序如果先加速就不能减速了,如果先减速就不能加速了并且减几下就变得很慢了 (经测试上下限都是可以正常速度运转的) 求各位路过的大侠指点#include<reg51.h>sbit k1=P1^1; \/\/启动sbit k2=P1^0; \/\/正反转sbit k3=P1^2; \/\/加速sbit k4=P1^3; \/\/减速unsigned...

51单片机步进电机正反转程序
单片机控制步进电机,我想你说的是两相步进电机,一般是控制其相序分配的顺逆从而控制正反转,一般而言,步进电机相序分配你可以做成一个数组比如step[]={0x03,0x06,0x0c,0x09},这样来说可以假设P0口是步进电机控制口,那么可以按如下方式来控制: while(1) { for(i=0;i<4;i++) { if(fx==1...

怎样用51单片机接两相步进电机驱动器来控制步进电机?
例如:用到P1^0和P1^1;把P10制低电平,P11制高电平,延时一段时间后,P10制高电平 P11制低电平,如此循环,看程序:include "reg52.h"sbit P10=P1^0;sbit P11=P1^1;void delay(unsigned int x)P10=0;P11=1;delay(1000);P10=1;P11=0;delay(1000);} }1-B1-B1A0;两相四线程序 接...

求51单片机步进电动机控制设计程序
51单片步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:(1)控制换相顺序 通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。(2)控制步51单片进电机的转向 ...

有问题请教,用51单片机来控制步进电机加压,压力传感器反馈给单片机...
点”)。解决的方法是:1》在要求不高的情况下,用弹簧连接丝杆与传感器,并且丝杆导程尽量选小点,步进驱动器细分尽量高点,弹簧的弹性系数尽量小点。2》在要求较高的场合,利用步进电机调整压缩空气压力(动态调整),再用气缸去推动传感器。我有几款产品就是利用这两种方法来解决的,效果感觉良好。

51单片机,如何给一个指令控制步进电机转动90度,再给另外一个指令,反转...
1、首先看看步进驱动器的细分设定,找出转动一圈需要的脉冲个数,再计算出转动90°需要的脉冲个数N;2、根据接线,使单片机的IO端口输出高电平或低电平,控制转动方向;3、根据需求的转动速度,设定定时器的定时常数,启动定时;4、在定时器的中断程序中,取反IO端口,如CPL P1.1,并计数。使单片机...

51单片机控制步进电机
下面是程序:include <reg51.h> \/\/选用晶振11.0592MHz unsigned int m=0,n=0; \/\/设置循环的周期 unsigned char start=0,t0temp=0;sbit Y0=P0^0; \/\/控制步进电机的管脚 delay(){ unsigned char i,j;for(i=m;i>0;i--)for(j=n;i>0;j--);} main(){ \/\/自检测T0时间设...

51单片机 关于42步进电机?
你说的这个驱动板没用过,但我经常用51单片机连接步进电机驱动器来控制42步进电机和57步进电机。因为51单片机高电平驱动能力很弱通常我是如下图这样控制输入共5V然后用单片机管脚低电平驱动。还有需要注意的地方是A+A-接的得是一个线圈的两端,这儿接的电机线电阻一般应该在100欧以下才正常 ...

相似回答