首先介绍一下l297的一些核心工作模块
其核心组成部分是脉冲分配器:l297接受单片机传来的信号,并将信号转换为步进电机的工作电流。我们权且将其分为单片机层和电机层。
L297设有两个pwm斩波器控制绕线系统:pwm斩波器工作于电机层,可以将恒流源调节为电机绕组中的电流。具体参考l297pwm工作电路
变换器是一个重要组成部分,由一些三倍计算器加某些组合逻辑电路组成,其功能就是把half/full,cw/ccw,clock的变化为斩波器的相序,工作于单片机层。
关系可以这样来理解:half/full,cw/ccw,clock信号->输出逻辑产生相序->pwm->进行输出。
由此可见因此它只需要时钟、方向和模式输入信号便能控制步进电动机。从上位机接受方向,模式,时钟(步进脉冲)。
下面进入编写程序的部分:
1 首先是方向和模式两个简单变量接口的设置,一共3种模式。半步方式(四相八拍);基本步距,单相激励(单相四拍);基本步距,两相激励。也就是说如果我们设置成为半步,就会产生一个四相八拍的相序;同理后面两种情况。就是说我们的四个输出口a,b,c,d就会有一个1,0的变化,具体参考8格雷码变换。
//以四相八拍为例,进行正转波形的输出
sbit enable=P1^0;
sbit hf=P1^1;
sbit cw=P1^2;

enable=1;
hf=1;
cw=1;
2 麻烦来了,1中的过程完成了什么呢,如果说1中的过程已经将波形都进行输出了,我的clk是不是没用了呢?可是你有没有注意到,我们只是让297输出了这样的一组波形,并没有对输出的时间,次数进行设置,当我们的使能输入口enable为1时,是不是就可以工作了呢?答案当然是否定的,有谁愿意使用这样一个不听人话的驱动呢。因此尽管我对l297的输出波形进行了设置,但是我依然没有允许他进行工作。这就是我下面要进行的工作
sbit clk=P1^3;

下面我将我的pwm程序移植过来
void Init_Timer0(void){
TMOD |= 0x02; //模式设置
TH0 = (65536-500)/256; //初值的设定与单片的分频器有关
TL0 = (65536-500)%256;
EA = 1; //启动定时器
ET0 = 1;
TR0 = 1;
}
void Timer0_isr(void) interrupt 1{
TH0 = (65536-500)/256;
TL0 = (65536-500)%256;
unsigned char time; //设置一个全局变量
time++;
division = 4;
if(time<division){ //产生高电平
clk = 1;
}else{
clk = 0;
}
if(time==10){
time = 0;
}
}
上述程序说明了什么呢,在clk给高电平的时候297才工作,给低电平的时候便不会工作。这样便完成了对297步进电机的控制。
这是真的吗?
到这里,有没有小伙伴抱着这样的疑问:我需要给297产生一个pwm吗?怎么能没有pwm呢,我没读过资料,你不要骗我。哈哈,这说明你没有好好看书啊。我们驱动的是步进电机,步进电机是如何工作的呢,通过脉冲,一个脉冲走一步。那我给pwm做什么,即便pwm给的高电平处的时间再长,它会走两部吗。
好吧,下面我们就从步进电机的完善开始说起:
步进电机其实和三相电源有些类似,组成是围绕电磁物理原理展开的。首先我要为大家介绍的是步进电机的转子和定子。
转子是步进电机外面的一环,这个很容易理解,因为电机要转动嘛。
然后是它的驱动原理:仔细观察步进电机的图纸,你会发现其实他的转子和定子并不是一一对应的,当某一个转子和定子对应的时候,其它的其实是错位的。多么惊讶,事实上也正是应为如此,在297的驱动里,你得delay太大的话显得毫无意义,当你输入的只是一个脉冲的话,你能获得的只是一个相序。也就是说你得步进电机的某一相会牢牢的和定子结合,天呐,那它还怎么样转动呢。
因此我们又得到一个结论:通过变换器产生的相序,将你得clk信号很好的分配出去了。

ok,既然如此,那么我就对我的错误程序进行订正:
void Timer0_isr(void) interrupt 1{
TH0 = (65536-500)/256;
TL0 = (65536-500)%256;
unsigned char time; //设置一个全局变量
time++;
if(time==预定值){ //产生高电平
clk = ~clk;
time = 0;
}
}
这样看起来程序就精简多了,你发现了什么,对,我们的程序又回到了最初的部分,也是最简单的部分,这就是297的妙用。
什么,我的time有什么作用,这里我先卖个关子,小伙伴们自己想一下,我的步进电机的快慢要如何实现啊?

posted on 2014-05-08 10:58  archieve  阅读(852)  评论(0编辑  收藏  举报