L298N驱动电路如何驱动直流减速电机正转?
Void delay unsigned char ms unsigned char i; while ms-for i 0; i & lt; 120; i + + ; you“ unsigned char ms” ,char character,you use delay (5000) in the main function below; wrong。 应该是整数
l298n直流电机驱动程序 l9110直流电机驱动模块
arduino的L298N电机驱动模块如何和直流电机接线?
ENA和ENB都可以插,只是没找对位置,接线看第二幅图,要接上板载5V
只接一个电机的话 将数字3、4脚接L298模块的的IN1和IN2(逻辑输入)脚,10接ENA脚(通道A使能)。电机接OUT1和OUT2输出口,把控制板上的GND和VCC分别接到L298N驱动模块上的供电GND和板载5V使能。如下图
输入代码
#define IN1 3 //定义IN1为3口
不要乱试哦
ENA是使能针脚,接到arduinio随便一个引脚上就行
程序要先把ENA连接的那个引脚设为高电平,要不然不会转
P.S:跳线帽在你不知道是干嘛用的情况下千万不要拔,我经常忘了之前是插到哪的。。。
cai na yi xia ba
提高PWm的值就行了,等效电压不够,所以不转。
用L298N驱动直流电机,电路图的一个问题。
我们知道,当电感线圈通电后再断电时,绕组两端会产生一个比电源电压高N倍,极性与电源电压相反的反向电压,这就是自感电动势。这个反向电压就会加在L298的功率开关器件上,将L298的功率开关器件击穿烧坏,所以要建立一个泄放通道,将绕组自感电动势所产生的高压和电流释放,以保护功率开关器件。
D1、D6,D2、D5两组的作用分别为:A电机正转时,OUT1为正,OUT2为地,电流从OUT1经A绕组流向OUT2。当切断电流,电机停转时A电机绕组的感生电压使OUT2为正,OUT1为负(就象一组电池),这时接在正端(OUT2)的D2会正向导通;而接在负端(OUT1)的D5也导通将负端接地。为感生电流提供泄放通道向C1、C2充电。这时,C1、C2作为储能器件将自感电流吸收储存。
反转时与正转相反,当电机反转后断电时D1和D6起作用。
电路中的二极管在为L298提供保护同时,也为感生电流向电源电路充电提供通道。C1、C2不但是滤波电容,也是储能器件。
51单片机怎么驱动直流电机c语言
51单片机驱动直流电机程序(用的是l298n芯片):
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineN100
it s1=P1^0;//电机驱动口
its2=P1^1;//电机驱动口
its3=P1^2;//电机驱动口
its4=P1^3;//电机驱动口
iten1=P1^4;//电机使能端
iten2=P1^5;//电机使能端
itLSEN=P2^0;//光电对管左
itLSEN1=P2^1;//光电对管左1
itLSEN2=P2^2;//光电对管左2
itRSEN1=P2^3;//光电对管右1
itRSEN2=P2^4;//光电对管右2
itRSEN=P2^5;//光电对管右
uintpwm1=0,pwm2=0,t=0;
voiddelay(uintxms)
{uinta;
while(--xms)
{for(a=123;a>0;a--);
}}
voidmotor(ucharspeed1,ucharspeed2)
{if(speed1>=-100&&speed1<=100)
{pwm1=abs(speed1);
if(speed1>0)
{s1=1;
s2=0;
}if(speed1==0)
{s1=1;
s2=1;
}if(speed1<0)
{s1=0;
s2=1;
}}
if(speed2>=-100&&speed2<=100)
{pwm2=abs(speed2);
if(speed2>0)
{s3=1;
s4=0;
}if(speed2==0)
{s3=1;
s4=1;
}if(speed2<0)
{s3=0;
s4=1;
}}
}voidgo_forward(uintspeed)
{s1=1;
s2=0;
s3=1;
s4=0;
pwm1=speed;
pwm2=speed;
}voidgo_back(uintspeed)
{s1=0;
s2=1;
s3=0;
s4=1;
pwm1=speed;
pwm2=speed;
}voidstop()
{s1=1;
s2=1;
s3=1;
s4=1;
pwm1=0;
pwm2=0;
}voidturn_right(uintP1,uintP2)//右转函数
{s1=1;
s2=0;
s3=0;
s4=1;
pwm1=P1;
pwm2=P2;
}voidturn_left(uintP1,uintP2)//左转函数
{s1=0;
s2=1;
s3=1;
s4=0;
pwm1=P1;
pwm2=P2;
}voidtracking()
{if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0))//没有检测到
{go_forward(100);
}if((LSEN1==1)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0))//左一检测到
{turn_left(40,80);//左转右轮》左轮
delay(N);
}if((LSEN1==0)&&(LSEN2==1)&&(RSEN1==0)&&(RSEN2==0))//左二检测到
{turn_left(40,60);//左转右轮》左轮
delay(N);
}if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==1)&&(RSEN2==0))//右一检测到
{turn_right(60,4);//右转左轮》右轮
delay(N);
}if((LSEN1==0)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==1))//右二检测到
{turn_right(80,40);//右转左轮》右轮
delay(N);
}if((LSEN1==1)&&(LSEN2==1))
{turn_left(0,100);
delay(1000);
}if((RSEN1==1)&&(RSEN2==1))
{turn_right(100,0);
delay(1000);
}}
voidoidance()
{}
voidinit()
{TMOD=0x02;//timer0同时配置为模式2,8自动重装计数模式
TH0=156;//定时器初值设置100us中断
TL0=156;
ET0=1;
EA=1;
TR0=1;//开启总中断
}voidmain()
{init();
while(1)
{tracking();
}}
voidtimer0()interrupt1//电机驱动提供PWM信号
{if(t
en1=1;
else
en1=0;
if(t
en2=1;
else
en2=0;
t++;
if(t>100)
t=0;
}扩展资料
L298N是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。
参考资料来源:百度百科-l298n
52单片机与l298n驱动两个直流电机,并且调整一个电机的速度的程序…
图中可以再接个电机,以下程序是我以前做的小项目用到的,是无线发送接收控制小车的里面有控制两个电机,用的是PWM控制电机的速度,可以参考下。肯定是可以用。
#include"reg52.h"
#include"Allhead.h"
typedef unsigned char uchar;
typedef unsigned char uint;
//数码管0-9编码
uchar seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~~9段码
//数码管位选
#define V_TH0 0XFF
#define V_TL0 0XC0
#define V_TMOD 0X01
it P0_6 = P0^6;
it P0_7 = P0^7;
it P2_7 = P2^7;
it P1_0 = P1^0;
//it P3_1 = P3^1;
//it P3_2 = P3^2;
//it P3_3 = P3^3;
it led2=P2^2;
it led1=P2^1;
it led0=P2^0;
///////////////////////系统初始化函数/////////////////////////////
void init_sys(void);
void Delay5Ms(void);
void Display(uchar m);
void Forward(void);//向前走
void Left_Turn(void);
void Right_Turn(void); //向右走?
void Left_Turnlittle(void);
void Right_Turnlittle(void); //向右走?
void Speed_Down(void);
void Speed_Up(void);
void Camare_Left(void);
void Camare_Right(void); //向右走?
void Camare_Up(void);
void Camare_Down(void);
/主函数/
unsigned char ZKB1,ZKB2,ZKB3,ZKB4,uchar_ctr;
unchar Getsign=0x00;
void main()
{//led0=0;led1=0;led2=0;
for(uchar_ctr=0;uchar_ctr {RevTempDate[uchar_ctr]=0x00; }//count=0; NRF24L01Int(); //Max232Int();//串口初始化 init_sys(); // ZKB1=18; /占空比初始值设定15 18 22/ // ZKB2=10; /占空比初始值设定/ // ZKB3=18; /占空比初始值设定15 18 22/ P0_7=0; while(1) {NRFSetRXMode(); //设置为接收模式 GetDate(); //开始接受数 Getsign=RevTempDate[0]; if (Getsign==0x01) //传输图像数据回去 {Delay5Ms(); //Right_Turn(); }if (Getsign==0x02) //小车不动 {Delay5Ms(); TR0=0; ET0=0; EA=0; }if (Getsign==0x03) //小车前进 {Delay5Ms(); Forward(); }if (Getsign==0x04) //小车左移 {Delay5Ms(); Left_Turn(); }if (Getsign==0x05) //小车右移 {Delay5Ms(); Right_Turn(); }if (Getsign==0x06) //小车加速 {Delay5Ms(); Speed_Up(); }if (Getsign==0x07) //小车减速 {Delay5Ms(); Speed_Down(); }if (Getsign==0x08) //小车左转一点 {Delay5Ms(); Left_Turnlittle(); }if (Getsign==0x09) //小车子右转一点 {Delay5Ms(); Right_Turnlittle(); }if (Getsign==0x10) //让摄像头中间 {Delay5Ms(); ZKB1=20;ZKB2=1;ZKB3=20;ZKB4=20; }if (Getsign==0x11) //让摄像头向左转 {Delay5Ms(); Camare_Left(); }if (Getsign==0x12) //让摄像头右转 {Delay5Ms(); Camare_Right(); //向右走? }if (Getsign==0x14) //让摄像头向上转 {Delay5Ms(); Camare_Up(); }if (Getsign==0x13) //让摄像头下转 {Delay5Ms(); Camare_Down(); //向右走? }if (Getsign==0x20) //初始状态 {Delay5Ms(); ZKB1=20;ZKB2=1;ZKB3=20;ZKB4=20; //向右走? }for(uchar_ctr=0;uchar_ctr {RevTempDate[uchar_ctr]=0x00; }} }/ 函数功能:对系统进行初始化,包括定时器初始化和变量初始化/ void init_sys(void) /系统初始化函数/ {/定时器初始化/ TMOD=V_TMOD; TH0=V_TH0; TL0=V_TL0; ZKB1=20;ZKB2=1;ZKB3=20;ZKB4=20; // TR0=0; // ET0=0; // EA=0; TR0=1; ET0=1; EA=1; }void Forward(void)//向前走 {Delay5Ms(); ZKB1=20; //占空比初始值设定16 20 24 ZKB2=130; ZKB3=20; ZKB4=20; TR0=1; ET0=1; EA=1; }void Left_Turn(void) //向左走 {Delay5Ms(); ZKB1=17; //占空比初始值设定16 20 24 ZKB2=135; TR0=1; ET0=1; EA=1; }void Right_Turn(void) //向右走 {Delay5Ms(); ZKB1=24; //占空比初始值设定22 27 34 ZKB2=135; TR0=1; ET0=1; EA=1; }void Speed_Down(void) {Delay5Ms(); ZKB2-=10; if (ZKB2>=251) ZKB2=250; if (ZKB2<=59) ZKB2=60; TR0=1; ET0=1; EA=1; }void Speed_Up(void) {Delay5Ms(); ZKB2+=10; if (ZKB2>=251) ZKB2=250; if (ZKB2<=59) ZKB2=60; TR0=1; ET0=1; EA=1; }void Left_Turnlittle(void) {Delay5Ms(); ZKB1-=1; if (ZKB1>=24) ZKB1=23; if (ZKB1<=16) ZKB1=17; }void Right_Turnlittle(void) // {Delay5Ms(); ZKB1+=1; if (ZKB1>=25) ZKB1=24; if (ZKB1<=16) ZKB1=17; }void Camare_Left(void) {Delay5Ms(); ZKB3+=1; if (ZKB3>=39) ZKB3=38; if (ZKB3<=6) ZKB3=7; }void Camare_Right(void) //向右走? {Delay5Ms(); ZKB3-=1; if (ZKB3>=39) ZKB3=38; if (ZKB3<=3) ZKB3=4; }void Camare_Up(void) {ZKB4-=1; if (ZKB4>=39) ZKB4=38; if (ZKB4<=3) ZKB4=4; }void Camare_Down(void) {Delay5Ms(); ZKB4+=1; if (ZKB4>=39) ZKB4=38; if (ZKB4<=3) ZKB4=4; }//延时 void Delay5Ms(void) {unsigned int TempCyc = 1000; while(TempCyc--); }void Display(uchar m) {P0=seg[m]; }/中断函数/ void timer0(void) interrupt 1 using 2 {static uchar click=0; /中断次数计数器变量/ TH0=V_TH0; /恢复定时器初始值/ TL0=V_TL0; ++click; if (click>=1000) click=0; if (click<=ZKB1) /当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整/ P0_6=1; else P0_6=0; if (click<=ZKB2) P0_7=1; else P0_7=0; if (click<=ZKB3) P2_7=1; else P2_7=0; if (click<=ZKB4) P1_0=1; else P1_0=0; } l298n并没有改变电机的转速,它只是起到放大电压的作用(单单的单片机电压过小无法驱动电机,所以需要l298n将电压稳到12v,否则电机不会转,或是转的慢),只要依照相应的端口接上就可以使用了。 扩展资料: 基于单片机的芯片及其他电子元器件与控制外部电路的集成PCB板组合在一起的控制器叫单片机控制板,通常它是应用于一些简单的工业控制当中。应用C语言或者其他的控制语言来编写控制动作流程以达到工业控制的终目的,相比而言较为经济实惠。 PLC(Programmable logic Controller) 目前国内还有一些做C语言编程的PLC的,也有叫单片机型PLC,它将内部资源的功能定义,整个程序运行的架构,单片机外围电路特性的匹配等等都已做成一个成套的系统了 参考资料来源: 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。单片机控制pwm直流电机,用l298n驱动,l298n是怎样改变电机转速的。