百度知道 - 信息提示

日期:2025-01-14 01:16:11 人气:1

百度知道 - 信息提示

    A+
热门评论

51单片机怎么驱动直流电机c语言

51单片机驱动直流电机程序(用的是l298n芯片): #include #include #define uint unsigned int #define uchar unsigned char #define N 100 sbit s1=P1^0; //电机驱动口 sbit s2=P1^1; //电机驱动口 sbit s3=P1^2; //电机驱动口 sbit s4=P1^3; //电机驱动口 sbit en1=P1^4; //电机使能端 sbit en2=P1^5; //电机使能端 sbit LSEN=P2^0; //光电对管最左 sbit LSEN1=P2^1; //光电对管左1 sbit LSEN2=P2^2; //光电对管左2 sbit RSEN1=P2^3; //光电对管右1 sbit RSEN2=P2^4; //光电对管右2 sbit RSEN=P2^5; //光电对管最右 uint pwm1=0,pwm2=0,t=0; void delay(uint xms) { uint a; while(--xms) { for(a=123;a>0;a--); } } void motor(uchar speed1,uchar speed2) { 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; } } } void go_forward(uint speed) { s1=1; s2=0; s3=1; s4=0; pwm1=speed; pwm2=speed; } void go_back(uint speed) { s1=0; s2=1; s3=0; s4=1; pwm1=speed; pwm2=speed; } void stop() { s1=1; s2=1; s3=1; s4=1; pwm1=0; pwm2=0; } void turn_right(uint P1,uint P2) //右转函数 { s1=1; s2=0; s3=0; s4=1; pwm1=P1; pwm2=P2; } void turn_left(uint P1,uint P2) //左转函数 { s1=0; s2=1; s3=1; s4=0; pwm1=P1; pwm2=P2; } void tracking() { 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); } } void avoidance() { } void init() { TMOD=0x02; //timer0 同时配置为模式2, 8自动重装计数模式 TH0=156; //定时器初值设置100us中断 TL0=156; ET0=1; EA=1; TR0=1; //开启总中断 } void main() { init(); while(1) { tracking(); } } void timer0() interrupt 1 //电机驱动 提供PWM信号 { if(t<pwm1) en1=1; else en1=0; if(t<pwm2) en2=1; else en2=0; t++; if(t>100) t=0; } 扩展资料 L298N 是一种双H桥电机驱动芯片,其中每个H桥可以提供2A的电流,功率部分的供电电压范围是2.5-48v,逻辑部分5v供电,接受5vTTL电平。一般情况下,功率部分的电压应大于6V否则芯片可能不能正常工作。 参考资料来源:百度百科-l298n

阅读全文

单片机驱动直流电动机

你用的是12V电源,也就应该使用这个电路了。 问题是单片机输出高电平,提供的电流有限,虽经过8050放大,也难以达到使电机转动的需求。 可以再加一级放大,用8550即可,见图。 原来的1K电阻可以适当的减小,680~470欧姆左右即可。 此时,单片机输出低电平时,电机转动。 -------------------------- 加那两个电阻,是进行电流限制,以免烧坏三极管和单片机引脚。 3.3K电阻,是控制8550的基极电流,在1mA左右就基本够用; 减小到1K也可,这时,电流将近5mA了,还可以的。 1K电阻,是控制8050的基极电流的,减小到470欧姆,基极电流就能达到8~10mA,电流再增大,8050有危险。

阅读全文