驱动郑拆宽用的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以内的电机了欢迎分享,转载请注明来源:内存溢出
评论列表(0条)