找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4518|回复: 3
打印 上一主题 下一主题
收起左侧

L298n控制步进电机

[复制链接]
跳转到指定楼层
楼主
ID:568983 发表于 2019-6-21 17:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
步进电机的使用一定要选择一个比较好的机型,最起码能在网上搜到它的相关资料。这样会给电机的参数的确定提供相关信息。我最近学了一个EM--462步进电机。这家伙可是把我气炸了,一点信息也没有,上网查都查不到。盲目的试探之后,终于能驱动它了。

对EM--462的描述:有四根线,其他信息没了。

相数:可能是四相,也可能是两相;

我开始用的驱动电路是L297搭配L298n使用,但是没搞明白,于是直接用L298N驱动了。我用L298n是这样用的:信号输入端分别从5、 7 、10 、12 脚输入,对应单片机管脚P2^0---P2^3

298的6 、11脚连接单片机的P2^4 、P2^5脚。把他们都置高,就可以工作了。

对于其他脚的连线

4--12v电源、整流桥正极;(整流桥要用两个,现在接与2、3脚一组的那个)

2、3---分别接整流桥 交流 的两个脚(不分顺序)

9--5V电源

1、8、15接地

13、14----分别接另一个整流桥的 交流的两脚 (不分顺序)

整流桥的正负极都要分别接在12V的正负极上。

请务必上网查看L298的用法。(我不会上传,如果需要的话,给我说一声,我发邮件给你,这个我会传上文件的)


2、3、13、14接在步进电机的四个脚上。关于顺序就得自己摸索了。一般来说按顺序从左至右一些依次对应2、3、13、14脚。从右至左也行,就是转的反向不同而已。可以调节的。

来看看程序:

//单八拍运作模式

#include<reg51.h>#define uchar unsigned char#define uint unsigned int

sbit a=P^0;sbit b=P2^1;sbit c=P2^2;sbit d=P2^3;sbit m=P2^4;sbit n=P2^5;


uint i=0;

//---------延时函数------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++)     for(j=0;j<=100;j++);}

//----------主函数---------------void main(){    m=n=1;//使能端???好像吧置零就不转了i=5;//调节速度while(1){     a=1;b=0;c=0;d=0;   delay(i);   a=1;b=0;c=0;d=0;   delay(i);

   a=1;b=1;c=0;d=0;   delay(i);   a=0;b=1;c=0;d=0;   delay(i);

   a=0;b=1;c=1;d=0;   delay(i);   a=0;b=0;c=1;d=0;   delay(i);

   a=0;b=0;c=1;d=1;   delay(i);    a=0;b=0;c=0;d=1;   delay(i);      a=1;b=0;c=0;d=1;   delay(i);

}   }

调延时的时间就可以控制速度了。这里是i的值

再看看单四拍

#include<reg51.h>#define uchar unsigned char#define uint unsigned int

sbit a=P2^0;sbit b=P2^1;sbit c=P2^2;sbit d=P2^3;sbit m=P2^4;sbit n=P2^5;


uint i=0;

//---------延时函数------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++)     for(j=0;j<=50;j++);}

//----------主函数---------------void main(){    m=n=1;i=5;while(1){     a=1;b=0;c=0;d=0;   delay(i);   a=0;b=1;c=0;d=0;   delay(i);   a=0;b=0;c=1;d=0;   delay(i);   a=0;b=0;c=0;d=1;   delay(i);}}

双四拍

#include<reg51.h>#define uchar unsigned char#define uint unsigned int

sbit a=P2^0;sbit b=P2^1;sbit c=P2^2;sbit d=P2^3;sbit m=P2^4;sbit n=P2^5;


uint i=0;

//---------延时函数------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++)     for(j=0;j<=100;j++);}

//----------主函数---------------void main(){    m=n=1;i=5;while(1){     a=1;b=0;c=0;d=0;   delay(i);   a=1;b=1;c=0;d=0;   delay(i);   a=0;b=1;c=1;d=0;   delay(i);   a=0;b=0;c=1;d=1;   delay(i);   a=1;b=0;c=0;d=1;   delay(i);}}

还可以控制直流电机的速度。

改改连接方式:

4脚接6V,整流桥的正负极也对应接6V的正负极

2、3一组控制一个电机,13、14一组控制一个电机

看程序

#include<reg51.h>#define uchar unsigned char#define uint unsigned int

sbit a=P2^0;//电机一sbit b=P2^1;//电机一sbit c=P2^2;//电机二sbit d=P2^3;//电机二sbit m=P2^4;//电机一使能端sbit n=P2^5;//电机二使能端


uint i=0;

//---------延时函数------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++)     for(j=0;j<=100;j++);}

//----------主函数---------------void main(){    m=n=1;i=500;while(1){    a=1;b=0;c=0;d=0;//电机一正转   delay(i);   a=0;b=1;c=0;d=0;//电机一反转   delay(i);   a=0;b=0;c=1;d=0;//电机二正转   delay(i);   a=0;b=0;c=0;d=1;//电机二反转   delay(i);   }}

这个i要大点

这个不能控制速度。控制占空比来控制速度。

以电机一为例

#include<reg51.h>#define uchar unsigned char#define uint unsigned int

sbit a=P2^0;sbit b=P2^1;


sbit m=P2^4;
//---------延时函数------------void delay(uchar z){uint i,j;for (i=0;i<=z;i++)     for(j=0;j<=100;j++);}

//----------主函数---------------void main(){    m=1;    i=5;while(1){         b=0;        //只控制正转

          a=1;        //占空比,我的理解就是转的时间和不转的时间的比值

          delay(5);//转一会时间(1)

          a=0;       //不转

         delay(10);//停一会(2)

   }//循环}

由于单片机执行的时间很短,所以,电机转的结果是你看不出有停顿,但速度变化了。

调节(1)、(2)的值就能调速度了。

以后的事情自己总结经验。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:659671 发表于 2019-12-10 09:59 来自手机 | 只看该作者
想要那个L298N的用法 谢谢楼主
回复

使用道具 举报

板凳
ID:715088 发表于 2020-4-26 20:20 | 只看该作者
虽然我看不太懂,但是支持楼主哦,加油!!!
回复

使用道具 举报

地板
ID:495287 发表于 2020-7-5 13:22 | 只看该作者
楼主码这么多字辛苦了,
而且接线还标注的这么清楚,对刚上手的非常有必要。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表