用51单片机产生PWM控制直流小电机

用单片机产生PWM控制直流电机我用L298N驱动集成芯片,好像用定时器吧,用C语言写一段程序,PWM是哪端输入,ENABLE,还是IN1,IN2,控制小车直行两个电机正转,和转弯不要急转,采用PWM,谢谢,望高手回答!
回答的好在加分哦,呵呵!

PWM是从IN1,IN2输入

给你张图,不晓得看得清不

C程序等有空心情好再给你写

还有单片机带PCA的话不用定时器的

有自带PWM模块的

温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-04-13
#define setbit(x,y) (x|=(1<<y))
#define clrbit(x,y) (x&=~(1<<y))
#define getbit(x,y) (x&(1<<y))
void forward(unsigned char speedl,unsigned char speedr)
{
unsigned char j;
setbit(P0,4);
clrbit(P0,3);
setbit(P0,7);
clrbit(P0,5);
for(j=0;j<=100;j++)
{
if (j<speedl) {setbit(P0,2);}
if (j<speedr) {setbit(P0,6);}
if (j>=speedl) {clrbit(P0,2);}
if (j>=speedr) {clrbit(P0,6);}
delayus(2);
}
}
void back(unsigned char speedl,unsigned char speedr)
{
unsigned char j;
setbit(P0,3);
clrbit(P0,4);
setbit(P0,5);
clrbit(P0,7);
for(j=0;j<=100;j++)
{
if (j<speedl) {setbit(P0,2);}
if (j<speedr) {setbit(P0,6);}
if (j>=speedl) {clrbit(P0,2);}
if (j>=speedr) {clrbit(P0,6);}
delayus(2);
}
}
/*
P0.2,P0.6接L298N的ENA、ENB;P0.3,P0.4,P0.5,P0.7接L298N的IN1A,IN1B,IN2A,IN2B;
就是用软件模拟PWM,以100个循环为周期,当数量小于你设定的速度数值的时候,电机通,反之,电机断。
*/本回答被提问者采纳
第2个回答  2019-06-02
#define
setbit(x,y)
(x|=(1<<y))
#define
clrbit(x,y)
(x&=~(1<<y))
#define
getbit(x,y)
(x&(1<<y))
void
forward(unsigned
char
speedl,unsigned
char
speedr)
{
unsigned
char
j;
setbit(P0,4);
clrbit(P0,3);
setbit(P0,7);
clrbit(P0,5);
for(j=0;j<=100;j++)
{
if
(j<speedl)
{setbit(P0,2);}
if
(j<speedr)
{setbit(P0,6);}
if
(j>=speedl)
{clrbit(P0,2);}
if
(j>=speedr)
{clrbit(P0,6);}
delayus(2);
}
}
void
back(unsigned
char
speedl,unsigned
char
speedr)
{
unsigned
char
j;
setbit(P0,3);
clrbit(P0,4);
setbit(P0,5);
clrbit(P0,7);
for(j=0;j<=100;j++)
{
if
(j<speedl)
{setbit(P0,2);}
if
(j<speedr)
{setbit(P0,6);}
if
(j>=speedl)
{clrbit(P0,2);}
if
(j>=speedr)
{clrbit(P0,6);}
delayus(2);
}
}
/*
P0.2,P0.6接L298N的ENA、ENB;P0.3,P0.4,P0.5,P0.7接L298N的IN1A,IN1B,IN2A,IN2B;
就是用软件模拟PWM,以100个循环为周期,当数量小于你设定的速度数值的时候,电机通,反之,电机断。
*/
相似回答