找回密码
 注册
关于网站域名变更的通知
查看: 1515|回复: 1
打印 上一主题 下一主题

直流电机的PWM单片机控制实例 L298N模块ENA与ENB的说明

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-17 10:00 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
直流电机的PWM单片机控制实例 L298N模块ENA与ENB的说明! M, K; u8 ^$ A9 F5 x& D" Y
' L2 l; N1 ~* E; B3 [. [: ?! m6 E/ R

6 j/ C. d: R2 d6 w( j2 ]8 I7 |. G' @使用直流/步进两用驱动器可以驱动两台直流电机。分别为M1和M2。引脚A,B可用于输入PWM脉宽调制信号对电机进行调速控制。(如果无须调速可将两引脚接5V,使电机工作在最高速状态,既将短接帽短接)实现电机正反转就更容易了,输入信号端IN1接高电平输入端IN2接低电平,电机M1正转。(如果信号端IN1接低电平, IN2接高电平,电机M1反转。)控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。(反之则反转),PWM信号端A控制M1调速,PWM信号端B控制M2调速。可参考下图表:
5 _8 Z% c5 E# L' S8 ~
( ?& b& V. Y4 h" F3 `  X  {8 n输入部分接线图
4 k6 ~# ?( @: D" v
0 f; m, G- r- z: c; W输出部分接线图
) g; i! u* i$ z  O( Z下面是单片机源程序:

4 ^8 b' s( A6 h3 l. v. b+ U4 P#include
6 X- [! n9 j& ]) U5 y" N# `. e5 X+ u/ H" j2 d0 \
#define uchar unsigned char
" i- F% E- B% }, ~& ]' F#define uint unsigned int
5 f5 N- }+ @, z2 S% {( p#define CYCLE 20        //周期8 |. Q8 R& g1 \) }

1 v) i" f' F( t6 zsbit IN1 =P1^0;//右* c& \+ b5 ?; ?9 b
sbit IN2 =P1^1;% \( {' A9 P. n3 q! d8 M, U4 W; c
sbit IN3 =P1^2;//左
4 {+ X9 i) Q: B' E" Usbit IN4 =P1^3;2 R- s9 j. [, ?: p1 Y& o/ K, x" u6 z
sbit ENB =P1^4;
" b# ?3 y8 a" z$ [( Dsbit ENA =P1^5;5 q) W$ ?) }0 z
sbit h1 = P0^0;6 r( a1 Y- |* e+ P* a$ P# S  r0 F
sbit h2 = P0^1;$ G$ |8 a; @5 _9 r
sbit h3 = P0^2;
7 m& F' {2 ~2 M* D( j  U. K0 L$ A/ @( Xsbit h4 = P0^3;) ~. E  n7 m0 s8 t# R$ ^
sbit h5 = P0^4;
' q5 b3 a: A4 L. h
) c9 {% {# [* N" [7 j4 buchar pwm1,pwm2,flag,a;
5 l7 \* w1 k, ^' Jvoid delayms(uint xms);
. g! L; c/ X6 `8 p8 g  P1 ~$ e( {% C' z* }% B
void go();//直走
' i5 a7 s. s& \$ h. Svoid hou();
+ S0 [+ ?1 K/ a1 g4 Z8 V5 ovoid tl();//左转
, m5 J9 y3 J/ A- `# u" `void tr();//右转+ I1 w8 a& P4 t1 M8 c/ e) G$ L
void Init_Timer0(void);//定时器初始化
* g0 T- _( o& a* D6 pvoid hou()
% M; X* `( D- g" ]+ E8 t{
9 A9 [$ z8 t6 p0 H2 \6 B        IN1 = 1;//右. Y  }/ p7 a2 S) `3 A+ R) f
        IN2 = 0;
+ R3 `9 `) {# o! _- t+ L        IN3 = 1;//左' k7 x7 }& C$ i" e; X
        IN4 = 0;
! q: y& N" X+ }4 q}, u3 X+ w5 ~7 G* U
void tlz()
: b; D' N; u6 r: E9 G{
; Z* T* h" `" I2 D) Q        IN1 = 0;//右
; r  G' W( G' H. Q$ I        IN2 = 1;+ S4 _: [% P5 b
        IN3 = 1;//左
) ~, D1 D" B8 k& }        IN4 = 0;
  _! z: W. `5 U}, z3 M4 a+ @. D
void tl()
- o: u! P( G/ J8 p3 m; f6 \' w{
$ y7 c# m& Z7 N2 A4 m        IN1 = 0;//右
0 O1 {5 A+ Y% S        IN2 = 1;- T! j- x. S) K8 Y) @% y; s
        IN3 = 0;//左
7 |+ B4 ^1 z2 g7 z8 e7 j7 _        IN4 = 0;, _+ Z2 l5 x0 Z1 Z& J
}7 v' ~$ @; z' L% g/ [# j
void tr()
+ ]7 K* c9 b2 T5 U* P' S9 z2 y2 d* g{/ E2 w7 s6 A- p9 K$ f3 s8 A
        IN1 = 0;//右0 `; c0 j; ?& w" i9 e- z1 U# |2 r
        IN2 = 0;
$ d. Y" H% G4 I; }$ {, r        IN3 = 0;//左
1 f1 Q5 g- T0 G        IN4 = 1;
" t& K8 R/ W" ]. v1 ~8 @}5 C9 `+ o4 ~7 [9 b) R
void go()+ s; b* E* o( a. `5 C. U
{% G" S! f/ G+ S- l
        IN1 = 0;
" o8 r) L* e! D' u        IN2 = 1;: U! P/ p1 y1 k- S9 ~" T
        IN3 = 0;5 f! z; s* Z. w1 _
        IN4 = 1;) s1 n3 a5 d; ~! b0 p4 X! P, v
}. X1 @/ l6 {, r, E. j, p* b
void suiji()9 _& A" G  f% o2 o
{
" c: H( F; r, F( }1 Q/ o$ E8 B        if(h3==0)
  F1 P1 c; e, H; C9 Z        {4 Z; a: [: _1 E1 Q! v% |- A6 C$ A# Z
                pwm1=10;
! U4 X, z; i8 Y! N$ q: v  X8 Y4 @          pwm2=2;- f8 u( h* |1 q0 l
                tl();
. Z7 G& X$ l% A# ]  }3 `' T; ^  H1 q6 T8 P6 o0 F
        else if(h3==0&&h2==0)
+ F, v. j  i( u% p1 h        {/ Z+ P2 `" W9 p; L
                pwm1=10;' t# @+ {0 N/ _# s0 u2 d1 o
          pwm2=3;
3 d$ v9 M! I# {- s/ \                tr();1 Y' i1 E0 l$ g3 s% g) L
  }
- H  }8 U  A" a9 m) t        else if(h1==0||h2==0)
7 S$ a' X) B+ j2 M& E        {5 f. \# A# t" G: F3 i
                pwm1=10;
: _3 E0 L( f- w- X7 U- z2 O          pwm2=5;
) ~* \1 t2 I% p$ O6 r                tr();
9 E) V' R$ [* ^: D; R/ V; P9 }  }
5 Y8 C8 Q' ?- n- i% D8 a                else if(h3==0||h4==0)
& s# ]9 S8 k2 z4 k9 {. `. S2 M        {
! d) ?. v( N1 x& e. U4 l0 n6 n                pwm1=5;
6 |0 E! p: a% x4 L& U5 T          pwm2=10;
. G4 a3 V0 j- l3 e( y, v4 W                tl();, W" L) ^" A/ [6 ?6 `1 k+ F
  }
4 N+ Z1 K6 F1 s2 O; ^                else if(h5==0||h4==0). N& M$ z+ S# F: V
        {' c$ t) L" I  V3 N+ T' E
                pwm1=3;
( o, f9 F  R" g! g          pwm2=10;6 L( {; u: p3 a: q% c/ c) b
                tl();/ r" q9 _3 g9 l7 g9 z! c# \" Y! t& ]
  }" y+ r( w! C& h- y+ y: {
        else
+ @  \9 ^8 O2 j( [& n        {2 @% Y' n( i: j2 i3 ~1 l
                pwm1=3;# B+ h. a3 w/ G. M8 j
          pwm2=3;
3 r5 X% a% h: g9 s$ u( j( Z/ O                go();
& w" f2 }4 r% m  }  q/ G; u, G: T% \1 t0 E# A% S, R
}
+ ]3 h; ~1 P0 Q7 u2 h) o
" O6 l1 z* h! U! T7 v
5 Y2 g; f) U( avoid xunji()0 C/ j5 D) B) R* E! N
{
- Q: w2 b0 `& k8 I        while(h2==1&&h3==1&&h4==1&&h5==1&&h1==1)
6 s0 J) E; Z- T- Z$ [% m {
. c3 \! ]/ y+ ~$ T         pwm1=3;3 ^, z1 M8 M/ `7 y
         pwm2=3;
3 Q0 C; V+ N8 W0 T. y   go();; k1 k8 W4 Y# E/ z3 u  ?
}
; E. X, q" x. F/ A/ R4 y/ \5 `
7 A3 C( I% O) L6 o                //////////////*****************////////////////////////3 R+ v) f% x# d  e

, l9 a4 @% y6 s& b% ]* y- T% f                if(h2==0||h3==0)
8 I6 j' U: u& G% b+ S' H3 f6 T                        {
" _, ~1 Z, U' R5 Y                                pwm1=1;/ w% y, W' h% e2 n, a
                                pwm2=10;8 y) g1 u4 V! U5 O) [
                                tlz();( A$ q/ f) O5 @. m
                        }: g. A5 t6 o( F+ E9 b
                        else if(h4==1&&h5==1&&h2==0&&h3==0&&h1==0)
2 u$ ?* [0 ?2 @6 V& y                        {8 E; d9 N% j% ~
                                pwm1=10;* M- W" P1 Z& W9 E. j, m5 y1 E
                                pwm2=1;
/ j* `/ i! E9 t3 g4 T$ }) V0 v                                tr();$ i7 e' F$ P3 Q2 [
                        }9 U7 v! y3 Q$ k& m
                        else if(h4==0&&h5==1), U. H3 Q# C( @9 l1 O
                        {$ E9 a' J) b2 F2 C  S
                                pwm1=3;
6 j' V0 z; g2 R. Z- d, e. l              pwm2=3;  ^* q% i% {& f6 n& m$ M: Z9 g5 M
                                go();9 G: f" T, v. _8 _
                        }) k" d- \1 g. W, N" ]
                        else if(h5==0)
# ^" a' |7 v) K. `4 S3 O1 ?! G                        {. j9 P% _5 ?" [" A0 U
                                pwm1=3;. @1 H: J8 l7 P! q/ e1 v: q' c% H6 O
                                pwm2=3;& N+ F6 y  I1 }& x! g# M' c  K
                                tl();
) I  b4 _. E0 P+ V: f" k8 S, l                        }. m, y+ |# S3 u
                        else
- e' t3 s, d/ `+ o# u                        {( j( }0 \& Z1 X8 q7 f2 h& W) h. U" ]
                                pwm1=3;
- X0 c" [5 r5 A9 X# q" V0 [+ u5 j6 U              pwm2=3;
: G3 Z3 D0 m3 C6 G* S7 c0 |                                go();) O1 H6 X' ?6 J$ F3 C
                        }8 w, ~9 n3 C  Q8 k* j, }* K
5 Z& B- W! h* N( n5 P3 K, C3 c
                //////////////////*************/////////////////////8 @: y% m/ A7 ?& Z: l5 h/ J
* f. v/ Z' S6 j. f" p4 f) s! M
}( n; l+ b+ R! r9 w4 M6 B, b
/*******初始化函数********// m5 c3 g& ~# X0 {, Z; {  |
void init()
& ~. N/ A" e7 T1 _{ + s. ~  E9 z* v5 c, Q1 P3 ^1 `" o
        TMOD=0x20;
# Y5 s9 g% h  }8 j: {5 z* K        TH1=0xfd; # h1 l- E; Q- @# b! X" C
        TL1=0xfd; 8 O' R- r& m& ]3 _
        TR1=1;
8 @: L- Q2 @# j* m+ \        REN=1;
) J  D* K4 p0 y, q* F) d        SM0=0; # n: E# P! Z0 I& x
        SM1=1;
& _) e% v5 m" O) H. a        EA=1; , t7 Z# S$ d. C7 x/ ?  S# K
        ES=1;
0 Z" g; {1 v4 e}
* V$ [6 m, x. ?, Svoid main()
$ X- Z, E, D4 I2 R, r4 @6 Q3 O2 t3 o{+ X5 H4 X& B  @+ Z% K1 ?- R
        //uchar i;
% \+ @  `: g4 b- p+ O        Init_Timer0();! d# v, a/ {8 P( Y; b, |
  init();" ]7 ~; q! M6 E/ H& E: N
  r7 t! k6 G8 ~! m5 {
  a = SBUF;
" \0 u9 a5 N5 o                        switch(a)
, O3 q5 r9 m" R7 U1 F8 j           {# ^  o! o, \- D, S- [& v+ w1 x

3 |3 L' z* }) F, z2 g' v                        case 02:
* n# X- @/ {$ z$ a                                {6 K& M% j0 Q" M; \4 G
                                        pwm1=5;7 T' h7 K, e5 C# p2 L/ Z& a
                                        pwm2=5;6 G& W7 d( k* S$ J
                                        hou();//后
' U! w) w* |% X" W: W2 F3 `6 j                                } break;; ~0 ]# @% D2 Q6 W) O) x7 @
                        case 03:
+ g+ }1 V' C# F! K) K8 R! W+ C" a                                {
- |6 ^& d* K6 _" U& h9 u                                        pwm1=8;# e- w* g5 C% x2 D3 P3 s  q3 G+ y" g
                                        pwm2=8;
3 h( v8 S! b) J" L5 ?- k                                        tr();//右- i$ v% d7 K3 a5 _6 {# [( U
                                } break;. I) f) E5 i& T/ d% i7 C
                        case 04:" j$ I- E7 d% m$ ?: d
                                {
, S$ T  w# ^+ ]4 a* J8 c6 [( j5 C' W                                        pwm1=8;  N8 `- n' p" ]/ E0 ]  ?8 \6 N6 I
                                        pwm2=8;/ N2 |+ r1 M* D! P
                                        tl(); //左
6 f; ?( C& H. p5 a6 y- V2 T, U                                } break;
5 X$ ~- X" ^# X- e- Z  {//                        case 05:
7 `5 A$ ~* B  R7 I5 k//                        {8 K8 @* r. d8 U+ x, v1 R
//                                xunji();
( v4 P  a3 m- {, B//      }break;& d% A) f) i* o4 h+ m' z
                        case 06:
% x( Q* L1 A0 e2 }1 H& @: r1 }/ g                        {: D# [5 T7 m5 m! r8 \# X- f- D- M
                                suiji();+ e" ?+ A! _. b6 X& P
      }break;
: I6 U2 c% [& ?, I                        case 07:, W6 J2 O0 I- ?6 q. i% \: [
                        {7 C% I  Q2 q- _
                                pwm1=5;
) s, x) m8 W: v              pwm2=5;2 t9 @. l+ R4 X5 a' z' d
                                go();
. M4 e1 N" `9 G% S$ ^0 ]7 ~$ @      }break;
8 A' S( X" F: @/ v! Q4 s$ k                        case 0x08:
0 h0 m, c$ x+ o1 B2 d* W0 n+ Y* V                        {
6 [7 P. @6 u' ]6 K8 Y5 A                                IN1 = 0;//0 q; @3 |* J, S  ^
              IN2 = 0;7 N6 u# S5 }9 V- ?3 k) k! A
              IN3 = 0;//3 D) U) f. Q8 O! u& Q
              IN4 = 0;3 c2 \: u& s3 q& K# E- ?
      }
3 `9 P: ]5 y; _4 J2 Q7 k: n' s                        default:break;
/ L" w( K5 \2 A" f           } : j4 L; a, T/ W* K/ A
}/ g& ]/ m; G; Q, ?: T2 P- G5 j7 j
6 j' D" _+ t9 S+ F0 V, E6 P
////毫秒延时
. f+ c/ O  b  ?4 e) @# x6 ^1 @//void delayms(uint xms)4 ~# h+ a5 }( q% t( E
//{4 F2 G) T  D. b& c0 w0 V
//uint i, j;% O* W1 T& M+ w) t
//for(i=xms;i>0;i--)         //xms 毫秒
7 E& Q' Q% @  V+ |/ E//        for(j=110;j>0;j--);& n2 R+ m0 i' Z/ q& I+ G
//}
+ o+ G0 p* ]* Z6 E9 ?1 P
3 ~4 s9 c2 k" Y8 Y$ W2 n/*------------------------------------------------
* k: O# U1 T2 B& x0 }                    定时器初始化子程序
; e. Q3 x! j6 t; E------------------------------------------------*/
- y' s1 t, n% V, r1 p: f) r; kvoid Init_Timer0(void)
2 T. [5 |" m+ _5 X  g{5 K% j$ ]3 ]" y
TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
6 O2 p' r5 R' U" i" B //TH0=0x00;              //给定初值: z5 [. ~  C+ j0 p
//TL0=0x00;" {3 y& i. H/ [4 P+ j
EA=1;            //总中断打开
0 c6 d( a# s' O+ K( |7 B% I ET0=1;           //定时器中断打开
# J( g) C5 y# s% ]2 H% i/ S. v8 f TR0=1;           //定时器开关打开) s  \5 t2 R0 B% U
}+ a( z, i% k7 Z/ V' L
/*------------------------------------------------
' i/ E& o' e# f* x: M9 w  L! p                 定时器中断子程序$ P* Y/ G, e) `7 c) s
------------------------------------------------*/+ _: g: W1 `, J, ?6 u
void Timer0_isr(void) interrupt 1 9 D9 E; e8 J. \
{
5 ?* R3 ~+ ^3 P) R( Y) H static unsigned char count;  b8 Y0 ^& V* P1 Z% r1 T: h% w' m
TH0=(65536-2000)/256;                  //重新赋值 2ms
* j4 q) m9 @3 O0 w TL0=(65536-2000)%256;% F* F+ u. H, ]( p1 h: r
7 g' f  J5 S. z; ?( g7 j
        if (count==pwm1)
* f% w: a+ V7 t) e" x) A6 U                        {
% e: W1 R% P3 S8 ^0 s* e! S* |                         ENA = 0;                           
  ^( H/ |. }/ `/ p3 _                        }
% ~$ _: x0 H" @9 |- y/ Y2 N/ A9 Z. E        if(count==pwm2): Q5 q6 X6 _6 q6 s, h; L  ~
                {' R4 K$ q) J' x6 {9 @* p
                                ENB = 0;  * \( c" O3 U! F, A" q
                }! {5 O2 s; M6 v. r/ v) l' g
                count++;
! t/ ^: }9 D/ F; k        if(count == CYCLE)       //反之低电平时间结束后返回高电平( B3 h: A" B7 E. m. N, }
                        {+ D3 }0 |$ X+ J# R2 l
                        count=0;
8 E5 {/ b8 N3 y/ I, N+ ^9 t# P                if(pwm1!=0)    //如果开启时间是0 保持原来状态
, Q+ s6 a5 x& ?+ O' X+ N8 e                {
8 h9 R/ E7 U$ ~- l% U                        ENA = 1;              0 g6 m: }$ j& A$ q6 y% Z6 q
8 C1 C, z. i% H% i0 N, S
                }0 ~0 e/ E5 e/ z; H
                if(pwm2!=0)
0 D3 ?+ k1 b, B4 ?+ t/ p/ D                {
% o3 w5 X, Q( Z) s: v* x                        ENB = 1;
0 A" q" v/ ~  K/ F                }
/ H: w4 `* C) ?: u# G" L# Y5 k      }
' e: C5 e5 g1 f0 A
) {, G0 T( v  X. R}
- D' Q1 U4 k0 J/ B. bvoid ser1() interrupt 4 1 i, G2 |7 @0 O
{
" c4 P3 Z  k  @% {2 u$ u# S        EA=0;: r  I+ [3 s8 ?
        if(RI==1)
( y* j9 _2 g  j0 R. Z        {" x8 |, p7 r; T
                a = SBUF;* @: i: M( Q: d: u* W( x
                RI=0;  p  M, h9 N4 n4 }
        }
- F! ]9 ?- E6 D  k        EA=1;. z" s5 W- q1 I' P+ E" i
}; a6 W* S$ e, F! U$ H' L& q
2 g3 K" G* i" o( W. Q
& G8 c5 ^7 J$ h' \
) x4 [2 S4 m% Y6 c- O# q3 ^" s
/********************************************************************* j/ x/ Y% o% i/ ~9 z7 J  z% `
实现功能:直流电机调试程序
+ G2 f# G9 T- R" R' f使用芯片:AT89S52 或者 STC89C52
  Z: T0 Y) i, Y晶振:11.0592MHZ' j' r" |# f* d& u  f* ]$ {
编译环境:Keil
- V% W  I6 a/ a/ Y/ _' g; N% Q) W【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
! H" c4 U0 x1 x3 H$ d/ X*********************************************************************/
3 F4 _. \# i& W2 N#include
+ Q1 y6 q+ r0 X$ w0 a. B#define uchar unsigned char//宏定义无符号字符型  p  q/ j4 s- j3 s+ k
#define uint unsigned int  //宏定义无符号整型: [% |, p4 O: U+ \/ t
sbit P2_0=P2^0;//M1启动
; k0 S& K0 {8 Z+ {8 V& b8 [sbit P2_1=P2^1;//M1停止7 }& d( m+ d( F% j+ ~9 K; I/ L" D2 Z
sbit P2_2=P2^2;//M2启动
3 O9 e. ]! R( ~7 d6 [sbit P2_3=P2^3;//M2停止' l, z5 j$ A+ y% l; T
sbit P1_0=P1^0;//M1
1 |5 h- [2 I: `- t9 Fsbit P1_1=P1^1;//M15 @9 |/ X# k+ q6 ]2 F; U  k9 y
sbit P1_2=P1^2;//M20 l: Y' f3 f1 G! f% W
sbit P1_3=P1^3;//M2
  q0 _6 L' }( Q% G% v" M/********************************************************************" V! r* z2 q# \0 p
                            延时函数
; {! T0 c0 y2 D& r& ?*********************************************************************/
1 |* c& D3 [* x; @! {, e4 vvoid delay(uchar t)//延时程序5 L# _5 |6 j9 e& ?3 V1 Z
{
: ?4 w# t% d' m7 ^uchar m,n,s;2 e  k8 _* ~& _- l1 x
for(m=t;m>0;m--)
0 s! r& b" n. R2 sfor(n=20;n>0;n--)6 }" g4 m. ~" F+ w8 Q
for(s=248;s>0;s--);
$ N2 j9 n8 U$ t8 `}: K( f$ m; F+ d5 {8 v) ^) T7 B
/********************************************************************
$ I- l  \/ F& b$ c* I. s                            主函数$ F( U! W) A5 V" Z! Z9 D
*********************************************************************/
; o* A) _) C+ X* y: x, j: t. zmain()
, U* s. G1 `+ K" r; z% y; D{
) ]( H1 t3 A' g' N9 {0 ~while(1)0 g$ ], p& B/ P
   {
) G, D, w- N* Y       if(P2_0==0){delay(3);if(P2_0==0)//M1启动
/ z2 z- f" X% g7 ^         {
7 F3 `  ~' e% Z5 l! Y% p# t) ?" T, b                 P1_0=1;                                    2 t" W' U, y: v* Q( c
                        P1_1=0;$ \$ R7 D' v, i! V, m+ Q  F7 o
          }}+ L6 R$ X! M& [! d2 A: H; C: H% f
       if(P2_1==0){delay(3);if(P2_1==0)//M1停止+ t7 c) |& n8 U" G- D
         {
5 M- V; Q' N. b7 k                 P1_0=1;
) }' F4 v6 k. u) C0 c                         P1_1=1; * l' p: K% t  n8 @8 k
                  }}
0 X3 m* [4 `' Y" l' S            if(P2_2==0){delay(3);if(P2_2==0)//M2启动
4 j  [# Y" B  }) y! M& p; V1 i         {
8 Z5 Z4 u; k8 K. f                 P1_2=1;) p. {! J8 P, f! K9 i/ `; c* w" T4 S
                          P1_3=0;
  @) }8 a9 B% c: N- y          }}/ f  f; g3 K4 ?$ M
       if(P2_3==0){delay(3);if(P2_3==0)//M2停止
7 \; I' l: I4 Y+ `  u         {
! [. _8 y; q6 Z; \# G  J2 d. v. V                 P1_2=1;
$ L! c1 v3 C% s" B' [                         P1_3=1;
6 l* B# l3 n$ O! \' _$ Y+ \6 Q                  }}5 Q$ m" e8 @, v  z- B# p
' D+ T7 ]5 i  N' N: x% ]

: h" F9 M7 X1 ^7 w, V/ Y…………余下代码请下载附件…………
5 t& {; g& Z, L7 R$ H
5 m1 T  P2 U( x) Q) \0 z. ~7 a9 X1 r: A. X2 g
$ O# W3 k8 {, d
问:Ena 和Enb是分别接两个直流电机么?直流电机的剩下那端接哪儿?
2 Q( Z4 j# ^/ K6 U' m
9 q) D, d# Z3 Y+ I) Q答:
/ S9 L2 F3 g9 G
不是直接接连个电机  他两端是脉宽调制  举个例子  如果你要实现两个电机不同的转速来达到智能小车转弯的效果你可以这样0 E8 h4 }6 z% R8 `" A; X" m3 v7 ]' Q
四个输入端接在单片机的四个管脚   四个输出端接在两个直流电机  两个使能端也接到单片机的两管脚(就是ENA,ENB)通过写程序来控制
+ q. @7 c' [" R/ W6 b电机的转速写程序的方法有很多的简单说明一下定义一个变量j  然后让j++;当j=20ms的时候吧j清0;送给高电平定义一个i  叫i++;让i=10ms的时候
3 V9 r1 `$ P# j0 Ai=0;送低电平,这就实现了电机转20ms听10ms的过程,由于扫描很快就实现了电机的减速,而你必须在你的单片机的使能端管脚送一个低电平) [0 n+ n0 g6 J- v" ]0 z) x# L# Q& F
减速机要ENA=0;(让此管教的电压小于2.5v)他才能执行电机调速的过程,ENB=1是另一个电机全速运行,哪一个电机减速运行就实现了差速转弯了9 b3 _1 U9 `) O% x- l
    这只是我自己的理解   也不知道该怎么说希望你能看懂吧。! h! Q9 S' a8 d4 f
/ \4 ^" X3 g3 R% I1 J; k

: I, M$ ]/ {* X+ q8 U
; p6 ~4 S# a* q) W; V# D) J
游客,如果您要查看本帖隐藏内容请回复
( B2 o9 J: t, Q/ X
6 k- |; L' G3 }) H9 x4 }
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 04:23 , Processed in 0.187500 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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