步进电机297 298驱动程序

步进电机297 298驱动程序,第1张

最近正好自己在搞一个小车,经过测试了,可用,有不懂得地方再联系:

驱动郑拆宽用的l298n。

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar rec_int_flag=0

void delay_ms(uint x)

void motor_con(uchar angle,uchar speed ,uchar back,uchar direction)

uchar code Fan[8]={0x0a, 0x0b, 0x09, 0x0d, 0x05, 0x07, 0x06, 0x0e}

//1010 ,1011, 1001 ,1101,0101,0111,0110, 1110

uchar code Zhen[8] ={0x0e, 0x06, 0x07, 0x05, 0x0d, 0x09, 0x0b, 0x0a}

// 1110 ,0110 ,0111, 0101,1101,1001,1011,1010

void main()

{

while(1)

{

motor_con(1,20,0,2)

if(rec_int_flag==1)

{

while(1)

}

}

}

void delay_ms(uint x)

{

uchar i,j

for(i=0i<xi++)

for(j=0j<120j++)

}

void rev_int(void) interrupt 0

{

rec_int_flag=1

}

/***********************************************************

函喊亮数说明:

direction==0时御逗左轮动,为1时右轮动,为2时直行。

转动角度为(7.2度*angle)。

back==1时代表后退,back==0时代表前进。

speed用于延时speed毫秒来调速。

P0为左轮电机,P1为右轮电机

***********************************************************/

void motor_con(uchar angle,uchar speed ,uchar back,uchar direction)

{

uchar m,n

switch(back)

{

case 1: //判断前进后退与否 0代表前进

{

for(m=0m<anglem++) //前进角度

{

for(n=0n<8n++)

{

if(direction==0) P1=Fan[n]//左转右转或直行。

else if(direction==1) P0=Fan[n]

else {P1=Fan[n]P0=Fan[n]}

delay_ms(speed) //调速

}

}

}break

case 0:

{

for(m=0m<anglem++)

{

for(n=0n<8n++)

{

if(direction==0) P1=Zhen[n]

else if(direction==1) P0=Zhen[n]

else {P1=Zhen[n]P0=Zhen[n]}

delay_ms(speed)

}

}

}break

default: break

}

}

如果有一个电机只能正转,可能是以下两种原因:

1.程序没有写对,L298N有一个输出脚神悄只袭瞎樱能输出低电平,建议你可以将其它写反来,即:原来拍丛是高的改为低,原来低的写成高,这样就能反转了;

2.可能是L298N芯片的问题,就如上面所说的那样,有一个输出脚只能输出低电平。

当然还可能有一个问题,那就是你电路搞错了,这个我就说不清楚了,你仔细看看看吧。

首先检查芯片是否正常,其次要匹配一下尺指橡陵旁自举电容等的参数,如果信号没给错的话 一般都不会有问题,所以,检查一下程序输出是否有问题,或者电源输出不足以逗正驱动电机,298输出基本可以驱动30v以内的电机了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12366475.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存