|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
直流电机的PWM单片机控制实例 L298N模块ENA与ENB的说明1 r. l+ U- F1 c$ ~: @
0 t) G- ^ w( P1 r2 O( K# s" P3 ^$ f; t
使用直流/步进两用驱动器可以驱动两台直流电机。分别为M1和M2。引脚A,B可用于输入PWM脉宽调制信号对电机进行调速控制。(如果无须调速可将两引脚接5V,使电机工作在最高速状态,既将短接帽短接)实现电机正反转就更容易了,输入信号端IN1接高电平输入端IN2接低电平,电机M1正转。(如果信号端IN1接低电平, IN2接高电平,电机M1反转。)控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。(反之则反转),PWM信号端A控制M1调速,PWM信号端B控制M2调速。可参考下图表:
3 \) j; @6 O+ B/ y1 O) l
# ]6 r/ m2 Q1 {" u' o
输入部分接线图3 J' z8 _9 G( `( D( j- [
/ x7 N. P6 A- N2 D8 w9 a
输出部分接线图
8 v6 b1 ?( R2 C; ]1 _/ A0 M下面是单片机源程序:
& m v5 \# j# d5 r" N# @3 t#include 1 S* ^# ~( M/ l# ~0 }( f3 |5 e
+ a# j! b' b$ f4 E' z
#define uchar unsigned char
/ ]. S5 ^" R: e/ k#define uint unsigned int1 N8 U# G: U/ U5 p7 V" d
#define CYCLE 20 //周期
; x. v/ y1 ~# W8 A$ C8 ]) G+ l1 u* }. ^" d( `
sbit IN1 =P1^0;//右
8 X+ K8 P" X! {% t! ^ R, _sbit IN2 =P1^1;
$ W/ k j( I+ {) s; L( @7 y8 tsbit IN3 =P1^2;//左
+ G0 p6 @% [9 p( n8 Ksbit IN4 =P1^3;8 x) K4 S" p5 l) k
sbit ENB =P1^4;' R6 ~5 ^4 G: Z( Q- O) N5 m
sbit ENA =P1^5;
s+ b4 m" g+ l# l8 V0 D2 Y3 [9 _7 Esbit h1 = P0^0;# w8 ` \# L+ S7 h
sbit h2 = P0^1;5 P/ m! U' R$ p9 x/ X' h
sbit h3 = P0^2;
+ ~* g( S+ W( Q9 qsbit h4 = P0^3;
s# H. W& ^5 z6 R; ksbit h5 = P0^4;: W& c: Q+ v, \* \
/ w, o, l5 B3 \) O& r! v
uchar pwm1,pwm2,flag,a;
& G( l1 S, b. R1 avoid delayms(uint xms);0 R- ~; S4 d/ a1 U$ N/ u/ [2 g( Y
) G. F9 k8 d* L% T/ B
void go();//直走4 B, S: A3 z n! {
void hou();3 w# O% I8 ]2 c. _' r, ]- H' E
void tl();//左转
+ C+ U2 F$ q( j! `0 bvoid tr();//右转+ ]1 t+ k7 k" T6 Q4 A# i! z4 z
void Init_Timer0(void);//定时器初始化
1 C! P( e% d4 `% Ovoid hou()
2 G: [' Q" m# F5 s{+ R( `* Y8 d/ D% m
IN1 = 1;//右$ }% h; m8 A2 P
IN2 = 0;
' ^9 P! a9 c" [5 c IN3 = 1;//左
, X5 b1 X/ }, u, O- g8 Q IN4 = 0;
5 F0 n9 n; d2 L}- s; W/ m' i, E9 [& D" B) `
void tlz()
`' E5 i: [3 K, w4 S" p{
+ p3 q5 j: X9 V+ e4 F1 g1 x1 k IN1 = 0;//右0 p% L+ j/ a6 e. F
IN2 = 1;. j" M3 v3 {3 G) E0 \
IN3 = 1;//左
5 T5 ?3 a# Y+ ]0 k4 R9 C3 @, H IN4 = 0;
0 b# q* }3 R3 s9 v1 k- G}! [2 F2 H+ U2 Q/ O6 f/ I
void tl()
' b7 E# x% m- M' a/ J{: E9 S0 |- A( A- e
IN1 = 0;//右
- n9 b0 E$ o# E4 s/ U IN2 = 1;2 O- Y/ H% E- Q1 ]. \. f# b; ~
IN3 = 0;//左9 j D+ j1 n3 T; L2 y, O+ a
IN4 = 0;( q' V) q; j. Q5 l3 Z
}
: X" S7 M- N/ Z0 b. s) a! uvoid tr()
4 X0 X3 ~" d6 w0 i" G A! ]$ B{- O0 @0 j+ V8 `2 V# b1 m
IN1 = 0;//右
* n( p" c6 h3 F$ V! t7 K IN2 = 0;
4 |5 u+ w9 |6 O- Y IN3 = 0;//左( |# _' G+ A( M( ^
IN4 = 1;3 R) K& p( T/ d) L- E$ A7 |/ A: A+ Y
}( A z7 P1 \6 g: s" ]5 M
void go()8 x& H: }$ L" a% E/ v
{& I; j9 U- E) S9 w3 W
IN1 = 0;
) I2 |2 n8 m+ o+ R) \" d: j IN2 = 1;
1 D; E5 Z- @) U; C" `" f IN3 = 0;# k) d: x! H3 t! M% b# |0 v
IN4 = 1;
4 H# u: n1 C* `* x9 K}
' t8 k. m& x& T. ovoid suiji()6 i# `! @: n; G2 B3 _
{" a5 y: c' ]3 y9 Z, J/ z: I& E& {
if(h3==0)
9 E4 d# j6 u, O; |. l {9 @. w6 O I. a+ _& a2 D
pwm1=10;
: N5 _$ G$ D. H' d+ j pwm2=2;
5 h* E d% I) @/ h- m7 n( T# H( \ tl();
1 ^0 c) J1 v9 D8 X) r6 [ }# g" v5 W" c8 u; W
else if(h3==0&&h2==0)$ l: g- G7 C) b: \) D
{* T; x" W# o; X- h7 Q: p6 l$ R3 I% e ?
pwm1=10;
- b, ], b" ~) m' |0 x% M4 ^ pwm2=3;+ `" R$ ^- I* P& _( g' V
tr();# j" A: A* _3 ~7 \! Q9 K1 _7 Q! F3 v+ Z; v
}
% u9 y! U, l: ?1 O1 Q else if(h1==0||h2==0)
+ c" a1 \) q/ x {
: \) d& I |& Y% } pwm1=10;# C9 }( n6 G4 ]! M7 h+ e. |5 ^5 N' _
pwm2=5;
$ N& A2 o: I* `, r4 Z) X tr();* m: h2 H* ^( p0 L3 v
}
3 L& F5 K9 i6 _ else if(h3==0||h4==0)4 B1 X& [ C2 K: Q& k% I! _7 _
{
1 q, K" Y* }: T, I pwm1=5;' } n2 B* Z* x0 R! C* _- \9 X5 D4 ~
pwm2=10;. q; W g4 i1 `. e1 ?) U
tl();! M: S8 ~3 k3 ?$ B
}
1 r9 r8 o+ s C4 I1 | ?. c9 X else if(h5==0||h4==0)
! u) R! G, V4 A9 v {+ C% p$ g( o; l: e7 l0 ]8 @3 A
pwm1=3;1 h+ T; F& q$ M; d* |
pwm2=10;: G C8 z: b [1 R
tl();; ?2 e2 o: O+ e5 O
}
) y2 U' M+ E, X2 ] else( Q ^3 m |# ]7 `" J) m! u: P) D
{
& d, f4 O+ `9 C5 Z pwm1=3;8 y+ U6 ]' a/ t
pwm2=3;
) E+ \- {% U' d+ J; l% u: K/ { go();* U( u3 t$ J: f- L. i5 f! h/ P
}" ]. `$ }7 s# j: J% X! E
}
! j5 c4 ~# c5 F/ L$ F8 m! ~5 ^
; X; I0 T- E; g( @$ K
- z- z/ g' P; h: vvoid xunji()3 p5 o' ?, J5 n$ G
{2 p6 {( {$ v+ L D8 h4 k, f
while(h2==1&&h3==1&&h4==1&&h5==1&&h1==1)
8 G1 ?8 i* X; o$ f" G! P {$ M3 U/ n. B/ H2 v7 [
pwm1=3;# k7 ^& D: E! J! G
pwm2=3;% C4 G% [# M0 [. x: s- J
go();
3 }" t. v% x7 h" { }
; h* E* |$ r$ T0 m8 B! r5 o1 s+ [4 k3 h& Z5 L7 V. r6 I4 ^
//////////////*****************////////////////////////! A3 p9 l) M/ b0 V! A% S
( H( R* k" e& S3 @. u$ `/ O8 l9 n: p
if(h2==0||h3==0)
2 o2 c0 T& E8 w1 f! c+ \. \3 P# A$ V {
* m( n. L& G* D; e pwm1=1;
$ V3 F# [# O% \8 p& L pwm2=10;$ T8 U4 w2 w0 [
tlz();7 F. E! j; \# J1 w) N' D9 ?
}
% g3 W5 L4 H, _6 l+ S- k% b/ i else if(h4==1&&h5==1&&h2==0&&h3==0&&h1==0)
) Y+ t8 m$ D# V* K! v0 a5 I( X9 w4 e {7 _" u+ v7 X6 I
pwm1=10;: _) Z) R3 d' [9 s) C& q+ ~1 Z
pwm2=1;6 B- h6 U0 Q1 B8 x9 q. t
tr();
2 N% n+ @* ~& Z( a% X4 u }
+ M$ e7 S0 T2 W! X6 M7 ` else if(h4==0&&h5==1)
) E E/ i* l. M; K2 [& ^) u {
( ~ E6 n( N! o/ U5 ~$ @ pwm1=3;" P4 K. v4 U5 M- Z. b0 w8 Z
pwm2=3;
a4 y. \& V% y go();* Q6 _3 d6 k$ _7 }. g; W
}# p6 q4 D0 m# I" f# J
else if(h5==0)$ g0 ~! N# C' W$ n
{
/ ]# H2 s0 V" C, i5 ]' R! y pwm1=3;: J4 t. V) W2 r
pwm2=3;$ a# l3 G1 M! p! c+ F+ e
tl();
f6 N% Q) @9 | }1 J1 Q# ~: t J& ?3 L* Z5 e
else
$ a( U7 `4 b9 W7 `0 P1 | {2 h8 ]/ A5 L+ Z$ B g% {
pwm1=3;
y; `8 X! k7 z: H9 [7 x pwm2=3;
+ e# [* r; C- l0 U8 d; Q go();
# N( X$ ]# P: |9 \) g9 q2 b2 Y }# Z$ s! U' T: l( o4 N2 Y+ L
& D2 E! q# u4 h //////////////////*************/////////////////////
' s# j9 m$ Z) r) `! l; A; b) }" ]/ [; r* R/ f! L
}
% c" o" Y3 u& \% d7 ~( O3 O$ V/*******初始化函数********/
% S7 m8 _$ N* x! a5 \# T' y/ Kvoid init()
( q+ Q% G' P/ Q' w5 m9 F{
, _& S- d+ f/ u( ^0 a T0 [, D- J TMOD=0x20; 8 @# f5 V6 E" s6 Z0 M. {! C
TH1=0xfd;
4 L$ `' T7 Y U! P( ~' D TL1=0xfd;
# o/ a6 S5 e) l) h3 C TR1=1;
$ `0 a' N" A0 S. A' E. b REN=1; ( g7 ?8 k& E4 @+ _
SM0=0;
- W/ d& x( H1 P: q SM1=1;
1 i5 ]9 F: {( y: n5 @) x) G; D EA=1;
0 D+ S. Z- ^* z' U" h; z ES=1; ! d% d" ?& ], r, ~
}3 l) Q8 b4 a+ ?0 C( u N4 D; ~/ Z
void main()
$ W8 C. {0 ` @; h" ?& V' i{
/ ^4 P9 q+ x1 l, n+ r3 W //uchar i;
& w# Z1 H+ h' t1 y3 T, j- C Init_Timer0();3 z5 b8 B: f# x v: G4 `
init();
! ~( _7 t/ A4 y' ^
: G) a% H, Z% } f a = SBUF;
' N( w. T0 N" N5 D switch(a) 4 y) k! `. b7 w1 h. w& t: I0 Z
{, M8 V8 [! Z/ }) ~" L
) u& j6 M) u9 R& K# X6 H" ~ case 02:& ?3 F/ d3 g( h$ z( r t
{
( y9 ~) ]# O7 c F8 R$ m8 S pwm1=5;. ]* P" y% o4 D6 a8 ~
pwm2=5;
0 X- a5 s8 w- D/ u6 Y. c hou();//后
) R c! ?8 {1 g } break;& c( Z2 {1 Z' j/ A7 l0 K- J
case 03:
' G, D4 t8 D4 |$ o' X3 R0 |* f {
' p# {/ M3 A* [: @$ F6 O- P2 J pwm1=8;; l, e) q$ E9 Y! U/ U8 b" t
pwm2=8;8 c" W( D) Q+ \, s! u) P
tr();//右
$ _7 G8 x* X' h4 w+ q4 P. _ } break;
6 R2 G, O, F. s9 y! {* y case 04:2 ^% p+ y% P4 e3 g6 h+ l& S
{6 q! w+ q" A3 r0 Q8 n
pwm1=8;
8 B0 y. m& y/ D) W6 } pwm2=8;
5 I4 X1 b0 E, h4 u# j0 e/ ?0 t! I tl(); //左) H5 g- G1 Z X% I. j
} break;
" d- R7 L4 K5 X% h9 x6 ~" ?2 p// case 05:
2 K$ E' d: t+ Y8 S! r ], x: y" ]' O// {- ?9 E- z; j% g- @! t3 }
// xunji();: x5 W/ d( v& `. e
// }break;
" R* v# n3 ]3 j8 L% ]) i case 06:! j/ g6 y# F) Y; R
{6 P8 X9 z) }# h7 F5 m5 ]' T
suiji();
9 v& ?9 g6 N' V7 x5 ?+ @ }break;, X, T; K2 M4 @; N# {
case 07:7 N5 V0 e9 R4 N& ~% ^
{
' w1 w0 Z( d# Z3 r1 x! a' U pwm1=5;# f- a& W+ R' w G' x$ S
pwm2=5;
, }# I* R' \' h" S6 ]! r7 p go();
5 E) `9 g* e: p9 I7 v9 v( D }break;
& s. K8 P/ x1 i$ ^! |3 _ case 0x08:
. x! ?3 B, ^- i& z+ ~- N! F {( z% |5 c+ B2 C
IN1 = 0;//- O3 \. G" y$ x5 E& |
IN2 = 0;
& u# a) N1 ], J3 o; v% ?3 a IN3 = 0;//
( v! E& [7 s& ~& V" \9 [ IN4 = 0;
( y2 ]( k1 q2 z) o }
& F% x3 m6 i2 f4 X. i- R3 L' v, e default:break;
: i5 }( T: v) J; H. b; B0 P } ( F$ ^4 |; o4 u' e
}
. E& ~# h1 ]- H( N4 ~' T1 ]" p& p; s4 m7 H
////毫秒延时/ t7 l( g1 [! z& Y+ _
//void delayms(uint xms)# f, s) R: y( i
//{
/ w: |; ?5 {- V ^; _/ A. \//uint i, j;, f& ]" D$ r+ T. c. X
//for(i=xms;i>0;i--) //xms 毫秒
4 d' X! I8 v/ y, r// for(j=110;j>0;j--);0 R, `$ W8 J( O% E5 ~ Y; P; r
//}
( \3 e) q: F/ X1 r6 ^+ j I: o) f; [8 U- g
/*------------------------------------------------5 A* c. B. W3 Q8 ?# A
定时器初始化子程序1 N! v Z* t$ \/ \ t+ Y
------------------------------------------------*/
+ x3 N+ U; ~/ w8 H4 | |5 Hvoid Init_Timer0(void)
0 L. ^/ }/ q7 Q3 m& ?1 K" |! P{
7 H- U- x9 k7 V* _7 B/ k1 r/ f TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
/ ~# B% Y2 `: z5 ` //TH0=0x00; //给定初值4 \8 \( @/ N' v5 Z" _0 a4 P3 {8 ^
//TL0=0x00;
6 z/ ~4 t; q9 ^3 u4 G6 d% S1 l& d EA=1; //总中断打开( o6 N; p: B* I/ R5 Z
ET0=1; //定时器中断打开
! l! U3 U: ~5 ] TR0=1; //定时器开关打开
" {. \, e8 C: V8 K3 f" ?$ _$ {( K' N}: L) `" @1 n9 x* d. h6 o( b" U
/*------------------------------------------------
3 v+ N4 L6 r7 ^9 C0 n 定时器中断子程序
3 H6 e0 \9 a3 k------------------------------------------------*/
# A+ S% d' B8 z7 d5 O( m7 E7 svoid Timer0_isr(void) interrupt 1
' z6 |7 _* T- ~0 e0 P! y{3 z, B. {; F l4 Z8 Z4 }
static unsigned char count;
0 a( v" E( t4 e' d/ ^' y& I8 W TH0=(65536-2000)/256; //重新赋值 2ms# q9 c: B, g' v" @( F2 G
TL0=(65536-2000)%256;& l! @/ X- u0 ?" [
. @% S& o8 d6 G8 O3 Z+ ?) E
if (count==pwm1) & m9 {" ~% H7 n* D* s' n8 J7 M7 f
{
/ j$ \. N: v. S: N' v p$ |( v7 b ENA = 0;
7 k5 ~" e i! o$ A4 f# Z" @ { }5 h7 X) z N6 G) t5 V A" v
if(count==pwm2)- L/ R4 A3 F- b$ K( N
{( T; a! ]! A! b
ENB = 0; 7 V" x" k, [% R7 i4 L c9 Z
}
) p& J; d1 d. r r9 c0 T count++;
! O- b r& m9 I7 v, X if(count == CYCLE) //反之低电平时间结束后返回高电平
: D5 k. g; V8 A7 h {
( s2 z7 P9 s k6 H count=0;/ n% w* e2 T$ l& B) l3 B' G
if(pwm1!=0) //如果开启时间是0 保持原来状态
6 G* K2 e4 [, w6 U% ?; h8 D {# U, q W5 a3 H) K: z4 V
ENA = 1; $ K0 F, H5 t( k# a; y6 ^& }
; w% }. D& r/ U$ X0 t7 l5 v) J1 q
}* Y, Y9 D7 g) C* U) q8 `6 J# X
if(pwm2!=0)
; \1 j$ U; I0 ~) R7 E4 v& Q {
# f1 @5 \/ d* z, ^ ENB = 1; 9 v+ B4 d: ~1 Y5 Z2 F
}, O; ]; m- e. t$ Z k( V
}
4 W3 {) ~9 d* H+ H$ k1 A( b3 ?
1 S# x) i0 m! ~}/ b Z& S3 C m0 j
void ser1() interrupt 4
3 c, Z# ]0 j: i5 m8 s Q: J! k{
& c6 O; R6 B; H1 L EA=0;
( N) [# T( r, p+ T3 \* T if(RI==1)
2 B/ h- W0 q* [3 H6 Q3 Q {( K' j) U4 K7 |: p
a = SBUF;
8 ?$ U; |$ f2 a8 O. [3 f1 V6 ~ RI=0;
7 V8 y7 F9 j1 m- `* Y- Z }- d B' y' g% E2 g
EA=1;
) m2 u+ O' Y2 g; x) Z, u X}8 [) j" f/ O/ R# S8 |- ?( F
0 q2 j V& Z* ^, x1 k
4 q( B4 K) \* ?, u
: G2 e- d }) V( w! k7 L/********************************************************************; D, E+ X, m: C9 o8 `8 k; m
实现功能:直流电机调试程序4 Y. h4 I* F Y: ^$ y
使用芯片:AT89S52 或者 STC89C52
$ Z1 l9 D- l7 D' @- k" p- }- K% w) ]晶振:11.0592MHZ
F: ~# b9 m1 V9 A编译环境:Keil2 H/ O3 N: [8 _( M' Q* G& ?
【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
. s, r, @& p6 E% T7 C*********************************************************************/" R# Z0 z2 l. Z
#include
) q0 H* a, ?+ f3 ]5 W#define uchar unsigned char//宏定义无符号字符型
, @) c7 ^; P' f u#define uint unsigned int //宏定义无符号整型; Q2 B l1 i/ c' g; h S
sbit P2_0=P2^0;//M1启动) G& M6 u6 K3 R# f7 ^( a6 `
sbit P2_1=P2^1;//M1停止
. e* b$ }6 [7 r9 Xsbit P2_2=P2^2;//M2启动/ s! @' ]# E: t+ c+ }
sbit P2_3=P2^3;//M2停止0 ]9 a+ j' ]; C& m! z! `# V+ T
sbit P1_0=P1^0;//M1! Y5 C1 C/ s+ }# e5 K3 g! W" j
sbit P1_1=P1^1;//M1 _! x, a* S* k4 L6 p9 |
sbit P1_2=P1^2;//M2
2 H3 |0 l2 v2 _/ s* Z$ Msbit P1_3=P1^3;//M2' u% l% `+ l, z1 {; x0 h" K) u' f+ u A
/********************************************************************- \2 ]) J' o0 N& |
延时函数
! v8 E6 V w! I*********************************************************************/6 |( c# k, N: [& E& A4 H
void delay(uchar t)//延时程序9 @2 i* h' {% L2 l% N. u7 u/ B% [3 e
{" T% |& |2 p; h7 e1 V4 W" M" C
uchar m,n,s;& P3 \( {5 f( K
for(m=t;m>0;m--)
9 e6 s4 q M. o6 t3 @, }! ^: L" Dfor(n=20;n>0;n--)% b6 J2 d- V) O- Q* I
for(s=248;s>0;s--);8 E2 @; @7 t& [ I( M
}
/ N( @: F/ Q* ]2 M# h: p( [/********************************************************************
. I( }1 i# F8 u6 B! m 主函数
/ e, U5 j' o4 d/ ?* k" ]1 e*********************************************************************/5 w% v- m5 J1 Z" x1 Q; ~0 ]7 _
main(). L" `$ g" d9 i; C; ]" l! d8 W
{; P n: D! L: q8 o, L
while(1)
* \* `, m p1 y5 Q. t {$ C* t* C. z% E' N
if(P2_0==0){delay(3);if(P2_0==0)//M1启动! h' q5 q+ g* j# Y
{
. I n/ D. _5 }; o$ j- y; I P1_0=1;
8 v/ X" G9 I. N9 @9 \ a, R P1_1=0;# B d0 ^7 B' \1 u
}}" w8 t/ P2 j# X) M1 Q
if(P2_1==0){delay(3);if(P2_1==0)//M1停止$ a/ Y# O) c4 y; T* E2 ~
{! A7 B( b; r5 S! D: z; k/ C+ j( Q
P1_0=1;# I: Y9 _. l# d% R% k/ B
P1_1=1;
% D$ m. N7 d) J/ ^6 C; ], b( ~+ K' Q5 j }}$ k. r8 W2 v8 \5 S5 T
if(P2_2==0){delay(3);if(P2_2==0)//M2启动
' | g- ~' c2 w% m9 C* m {! |$ r, A7 O( h1 ^. V4 f
P1_2=1;
# I, P' v- I6 V2 E: R, U# z P1_3=0;
! ^3 U7 w# o" M5 s2 y, d) @3 ^! v }} ]6 _+ E" Y. q7 U" i/ K
if(P2_3==0){delay(3);if(P2_3==0)//M2停止
1 T( I' W: u) m2 Z, @ {/ @$ `4 l- E( w8 A* ~
P1_2=1;/ W# s6 V% W$ `! O. R3 }
P1_3=1;
% ~1 g6 J. u C- Q2 J, t/ O* w$ Z6 \ }}3 X4 o' a7 w7 c( M6 c
& [/ D$ S; F, H9 R5 y( A# C
2 U4 _: Y6 i8 S0 S$ q3 B% h3 m…………余下代码请下载附件…………
. p7 [( { M4 j+ ]1 T; x" l; Z) A( }; k! T. G5 V9 m
* s9 P8 a( M) I6 F) `
/ A- j$ U7 r J" d6 q问:Ena 和Enb是分别接两个直流电机么?直流电机的剩下那端接哪儿?$ c$ E+ e* K7 T$ \9 {
5 c" w( e4 s+ V m2 W答:$ X; n9 D# S: t I8 w; t$ ?: t
不是直接接连个电机 他两端是脉宽调制 举个例子 如果你要实现两个电机不同的转速来达到智能小车转弯的效果你可以这样$ N( J7 T0 O! ^4 O. y c
四个输入端接在单片机的四个管脚 四个输出端接在两个直流电机 两个使能端也接到单片机的两管脚(就是ENA,ENB)通过写程序来控制/ l$ \3 t* ?3 a0 F n
电机的转速写程序的方法有很多的简单说明一下定义一个变量j 然后让j++;当j=20ms的时候吧j清0;送给高电平定义一个i 叫i++;让i=10ms的时候* f7 d4 }1 S4 D$ ]1 _, ?% T
i=0;送低电平,这就实现了电机转20ms听10ms的过程,由于扫描很快就实现了电机的减速,而你必须在你的单片机的使能端管脚送一个低电平3 ^( ^& Z8 F7 y$ c, a
减速机要ENA=0;(让此管教的电压小于2.5v)他才能执行电机调速的过程,ENB=1是另一个电机全速运行,哪一个电机减速运行就实现了差速转弯了
: M( ]4 z/ A9 R" L2 E% M$ a 这只是我自己的理解 也不知道该怎么说希望你能看懂吧。
. [% \8 v, t0 h & \: X' j3 g+ ]( s U4 q) J
' s" ]" {/ l5 y6 t2 T: c
+ {# F) i+ l+ L; ?# q0 E2 c7 ~) D! d& w! f. P
& @4 l+ j1 P# u7 F# l' d |
|