找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3909|回复: 0
收起左侧

想智能小车电机驱动+pwm

[复制链接]
ID:110612 发表于 2016-3-24 19:18 | 显示全部楼层 |阅读模式
智能小车驱动电路是一个全桥驱动电路, Q1,Q2, Q3, Q4四个三极管组成4个桥臂, Q5 控制Q2Q3的导通和关断, Q6控制Q1 Q4 的导通和关断,驱动电路分别用于后轮动力驱动电路和前轮方向驱动电路。当1管脚为高电平, 2管脚为低电平时时Q1 Q4 导通, Q2Q3截止,电动机带动车轮运转; 1管脚为低电平, 2管脚为高电平时时Q1Q4截止, Q2Q3导通,电动机带动车轮反向运转。

56013547_1.gif


L298来控制的  51单片机怎么驱动直流电机c语言


#include

#include

#defineuint unsigned int

#defineuchar unsigned char

#defineN 100



sbit s1=P1^0; //电机驱动口

sbits2=P1^1; //电机驱动口

sbits3=P1^2; //电机驱动口

sbits4=P1^3; //电机驱动口



sbiten1=P1^4; //电机使能端

sbiten2=P1^5; //电机使能端



sbitLSEN=P2^0; //光电对管最左

sbitLSEN1=P2^1; //光电对管左1

sbitLSEN2=P2^2; //光电对管左2

sbitRSEN1=P2^3; //光电对管右1

sbitRSEN2=P2^4; //光电对管右2

sbitRSEN=P2^5; //光电对管最右







uintpwm1=0,pwm2=0,t=0;



voiddelay(uint xms)

{

uinta;

while(--xms)

{

for(a=123;a>0;a--);

}

}





voidmotor(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;

}

}

}



voidgo_forward(uint speed)

{

s1=1;

s2=0;

s3=1;

s4=0;

pwm1=speed;

pwm2=speed;

}



voidgo_back(uint speed)

{

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(uint P1,uint P2) //右转函数

{

s1=1;

s2=0;

s3=0;

s4=1;

pwm1=P1;

pwm2=P2;

}



voidturn_left(uint P1,uint P2) //左转函数

{

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);

}

}



voidavoidance()

{



}



voidinit()

{

TMOD=0x02;//timer0 同时配置为模式2,8自动重装计数模式

TH0=156;//定时器初值设置100us中断

TL0=156;

ET0=1;

EA=1;

TR0=1;//开启总中断

}



voidmain()

{

init();

while(1)

{

tracking();

}

}



voidtimer0() interrupt 1 //电机驱动 提供PWM信号

{

if(t<pwm1)[ align]
en1=1;

else

en1=0;

if(t<pwm2)[ align]
en2=1;

else

en2=0;

t++;

if(t>100)

t=0;

}



回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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