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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
直流电机的PWM单片机控制实例 L298N模块ENA与ENB的说明5 w0 n' M6 u; R: n

9 v0 I( u; r9 B4 q  c
5 b4 X9 N2 X7 p- \$ q1 B
使用直流/步进两用驱动器可以驱动两台直流电机。分别为M1和M2。引脚A,B可用于输入PWM脉宽调制信号对电机进行调速控制。(如果无须调速可将两引脚接5V,使电机工作在最高速状态,既将短接帽短接)实现电机正反转就更容易了,输入信号端IN1接高电平输入端IN2接低电平,电机M1正转。(如果信号端IN1接低电平, IN2接高电平,电机M1反转。)控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。(反之则反转),PWM信号端A控制M1调速,PWM信号端B控制M2调速。可参考下图表:& F$ y1 [. |# v

7 y: u" s/ Z9 ~; E0 p: q输入部分接线图
, S7 k; h# L" f& `7 j# a  r: o0 Y ) c7 I& _/ c' r6 T
输出部分接线图
: g% k# `0 _7 R  n$ f: I/ z下面是单片机源程序:

  {. e" V$ }4 x7 O+ o#include
, J% j6 q7 l1 y6 [7 H3 B' b0 D9 k$ n5 k+ z0 D6 H& |# F
#define uchar unsigned char% l& P; J7 W) [; h# z8 ~
#define uint unsigned int& J: S8 S" ~, T0 u, ~! b1 t
#define CYCLE 20        //周期
* d3 B" M, ?/ j' N5 D' R+ s9 p9 c" n: E* ?1 L' u/ Q1 m& h
sbit IN1 =P1^0;//右
, X8 c0 a) {' n! r4 |# @sbit IN2 =P1^1;! `* Z1 A4 s" p
sbit IN3 =P1^2;//左' G9 w2 |( p3 E2 j
sbit IN4 =P1^3;
. V" F7 S( `* Q% ], B+ V, t$ J7 Psbit ENB =P1^4;
; x5 d: [& M  D" q! Z% hsbit ENA =P1^5;) Y' c! k* [' M; D  C* W
sbit h1 = P0^0;9 H; c- F/ T1 P  w  C( }
sbit h2 = P0^1;
9 @8 P  D6 E9 ~% Nsbit h3 = P0^2;
) T' r9 f" m; \) Asbit h4 = P0^3;
$ O6 z: a1 x7 S% F- Y/ f6 e( vsbit h5 = P0^4;% ]* Y" r9 {. o0 Z6 h5 x
7 k, X4 P3 K1 J+ v
uchar pwm1,pwm2,flag,a;
5 w& A' B9 A$ P) H1 i9 H" h+ z2 gvoid delayms(uint xms);2 R8 L, S4 u5 \# W, j1 I) R

: q0 J& o$ r" [. K7 X, V; t& e5 }, Fvoid go();//直走" R4 V, e+ W& P% o" R
void hou();6 S/ T. X" i) X: ]
void tl();//左转
* G3 @/ ~4 g/ j5 evoid tr();//右转" S5 s( v4 K- g6 @8 z+ A
void Init_Timer0(void);//定时器初始化
( I+ \/ ~8 M" L% \void hou()# e6 a2 D/ ?6 m* \: d3 T, ^  b$ x
{
  e5 U2 n# _8 }        IN1 = 1;//右
3 `" K# G& F7 ^1 p/ X2 o; ]( \        IN2 = 0;4 r4 H4 J0 M( K- m+ ^; E  \/ [3 l1 e
        IN3 = 1;//左
# W0 L$ K- e% k        IN4 = 0;
1 C. S, |6 l' }, h, ]8 R8 p}
, L& K, c5 L4 U5 u$ X- a4 F  Evoid tlz()
. I( E# x+ g+ ~/ M4 T* ^{" P- e' {9 f8 B# y) s
        IN1 = 0;//右1 H7 h3 ^& ^# m( x$ {$ C; E
        IN2 = 1;6 k! v$ k0 Q6 ]1 F8 D9 x6 _/ B
        IN3 = 1;//左
# q9 c. ]9 A9 ]) @        IN4 = 0;
2 x7 g6 r* b' H' L4 v/ p' {}
5 E) W; z0 s$ I: L' Z3 @void tl()
0 k+ Q. F$ T& A% U8 T{( u: m# D1 @/ o- q+ {% I* n
        IN1 = 0;//右
' X3 @4 \/ E/ i' d( v/ U2 S        IN2 = 1;
- h; o) {8 k/ b. i        IN3 = 0;//左
% \: {1 S8 F$ T! `  J        IN4 = 0;
0 t: c/ I" N6 g. Z, o! n$ ]  t}- u# B+ [% u0 w. @4 B  x
void tr()
% \0 e; v1 q# }{0 G, a+ P8 Y3 q4 ]5 a% e
        IN1 = 0;//右
$ b6 f. n0 _) J+ s  {. U# T% N( ]0 `        IN2 = 0;2 t* B" s9 _8 y  f
        IN3 = 0;//左
$ y, w) d) L$ i" j- c5 G        IN4 = 1;
. L: \9 y) h$ k& `% D}2 K, F: E/ c* ^2 `3 s3 o! p
void go()
, `# d8 P* H5 t' x4 \0 I$ y{
/ R1 L0 X) A, Y9 C! F# v6 {, j        IN1 = 0;% v% ]+ x8 ~" l4 l! q
        IN2 = 1;
! w# l6 s3 x4 \+ c9 y        IN3 = 0;
3 I. m% n4 K3 I1 k& u        IN4 = 1;$ m5 x# R& |' @+ g4 e6 m% p
}, v" ~' e; G/ \" `: A3 q
void suiji(); a0 _6 p/ H/ M/ p& o# m
{# T" J6 K* c* x  H
        if(h3==0)( V# E3 A3 y4 R" ?  W- k
        {$ D, s- r0 U( A' D
                pwm1=10;4 _; b7 M: L2 L4 G
          pwm2=2;0 a) m5 V5 B& e, m1 {
                tl();2 t7 c+ H# Z, q; Q8 M& p
  }
5 x1 D" @5 a7 k9 O& ^2 r' k        else if(h3==0&&h2==0): Z  ?# U$ A% S+ W+ J0 j8 n' \
        {
. `. C: v, Z6 h( r                pwm1=10;, ]$ C' ~' I! V
          pwm2=3;
+ J3 H, T( K7 ]5 p4 r4 P                tr();6 r( x1 k9 r$ G2 w6 F
  }. {; p  @& K8 f  \- c. }1 v6 Q
        else if(h1==0||h2==0)$ H7 Z& u$ S6 ^4 X1 }4 l. R
        {
# x9 A8 U! M5 r6 }  k, b                pwm1=10;
7 Q) _% k: t; x          pwm2=5;2 L5 R6 N! h2 _0 W+ t) q) X
                tr();
  h) \* M" I7 }! ^: s  R  }
# B9 [0 f6 z! C- h- L, b                else if(h3==0||h4==0)
  N6 K6 F5 O8 w4 T1 `7 i        {
2 q0 w% Z9 l) \- S/ ]/ o/ k                pwm1=5;, D0 P  Y/ ~; ^
          pwm2=10;
0 n: J$ u0 k  p/ b                tl();
) d7 Y5 A/ X. I* T8 N' m$ n8 [  }
/ R* s. \, U" D, ?                else if(h5==0||h4==0)
  \9 e; z# M3 r* {+ B1 o! v1 ~        {+ r( q% A( K8 A+ A2 x& T
                pwm1=3;9 M0 l' @1 B& x; X) q+ C
          pwm2=10;1 x! A) H/ }$ o4 a  d  v  a9 A
                tl();
5 b/ {0 `" Y2 h3 h; e6 V  }2 S5 D# G" G8 ]8 Z" M
        else, V4 x5 C8 ?3 ~# H5 _
        {! E' H0 y) c$ y4 }( |* Q
                pwm1=3;1 H5 h: U: `' |  @) A: W) }2 S( G1 Q
          pwm2=3;4 C5 u/ q- C6 }- p9 A; f0 Z
                go();
3 ]3 C& q; Z: D  C+ L3 _  M: ?& c  }" f4 {$ p/ o; ~4 l! |6 t, U
}
' l7 J& H% A- ?5 B. X# |# g* m1 z. w4 j) t1 m

2 i0 \) }, |9 F$ q7 Tvoid xunji()' B. X& L" R3 E: y
{7 x! w1 ?; }4 h! o
        while(h2==1&&h3==1&&h4==1&&h5==1&&h1==1)6 g2 N3 M) {% k! Q2 h
{
" V, _* J& k2 P  k( M& Y         pwm1=3;0 U. j/ j, E2 }
         pwm2=3;
6 v0 `3 B6 ]% J( T; T   go();
4 C$ h. Z% E  j0 U8 ` }
6 e4 t. J4 B4 b8 l: W; G) C3 s3 C8 n9 ]; f
                //////////////*****************////////////////////////8 J: Z5 [% f* J% W+ `" a3 p& H* C

' H' c6 |. T+ p# X1 E( i! r7 r4 f% K, ^                if(h2==0||h3==0)
% E/ q- E) I1 ~& h4 ~                        {
* r8 W6 }7 }! Y+ U' N/ ?4 G* T9 d                                pwm1=1;
# c3 q* k' N3 H2 v; O7 S* g4 b                                pwm2=10;
' f5 u2 p! K4 M                                tlz();) x5 t# n7 E. N( }
                        }$ |# P7 e( V7 x) p" g
                        else if(h4==1&&h5==1&&h2==0&&h3==0&&h1==0)3 F6 p# ^" E4 Z, u: T
                        {1 v6 s: P$ O1 z2 `: S0 W, g- G
                                pwm1=10;
  Z/ e9 X3 a0 e- u" {) ]& ]                                pwm2=1;% m$ V" f3 o+ V& H  [
                                tr();
4 L% X+ `0 y, n3 S1 c; Z/ u                        }6 K4 e' n% a4 C
                        else if(h4==0&&h5==1)
0 x1 Y0 ]% ?1 D6 W' K2 F6 Y2 e                        {! E( H& H7 |0 b4 I2 z. P' Y6 [
                                pwm1=3;
: j/ R/ K. J; j/ W# t              pwm2=3;
; F+ J& b( V" D1 e- {                                go();
! Y  R% L1 @4 k; Q( n3 x                        }  N2 V, L& F( Q  {7 @* n
                        else if(h5==0)
8 d9 j( G3 U: @" `  V                        {' Q2 h) L) t& W, R: r
                                pwm1=3;
* b& C, N; M4 }& U                                pwm2=3;3 x- S6 Y$ z9 o0 w, y
                                tl();/ M2 P/ V1 s* [
                        }
9 a1 ]0 r, c. d* m                        else
: U: K6 f1 l! L                        {: @- o7 U4 F4 x; \- L1 K7 x+ K7 b
                                pwm1=3;
3 T: D5 d6 d7 d' g( k. g! t              pwm2=3;1 _2 G* `5 q* C7 |8 g; p& ^
                                go();
7 F+ l0 `8 r8 S( B                        }
/ b& S: Y5 }) l. Z: Z' |- D
3 T  B7 m- h) d6 x" w: z5 P/ @                //////////////////*************/////////////////////
. i; U! V' t1 d, M: c
: G, B* [* ?6 @# D}
- Q( C6 s# p/ K% X) G/*******初始化函数********// g) }( P8 W! E, k
void init() 5 T. w; O% J: }
{
- V* I/ j6 X% W; Z( n! {8 S0 F        TMOD=0x20; 1 |* ?% K# }" w$ o4 f
        TH1=0xfd;
9 Q8 n1 @8 F2 x3 H* T; |2 `        TL1=0xfd; 5 L- q$ p4 [  {( \4 r: g2 M" U
        TR1=1; ' E9 J4 _! p9 P$ `7 Y+ b8 j
        REN=1; ( I0 r$ z! a3 |7 H" p
        SM0=0;
8 ~1 P6 K2 r) e5 n  g+ R4 `8 D        SM1=1; * [# E. W9 b. F, _2 \
        EA=1;
# ~: T' u! |4 a) s2 I        ES=1; " }# _. m* ^4 [, }, g, a$ B
}& ]9 {: Z4 N# U
void main()/ _# x* e4 L& z1 v$ I& I, Q
{8 B3 I% c4 V' R, [7 ^  Z8 y% f/ K7 ?
        //uchar i;$ C6 K4 |9 r1 ^) d2 J8 z
        Init_Timer0();9 @  p# j' M8 W8 F7 v! b
  init();
1 F& ~& }; _( g- I
0 y1 x) M) B3 x; X' Z+ b  a = SBUF;
% |4 k. X) k& ^/ q0 n0 t! Q; D9 s3 u                        switch(a) . ~; U1 v& I7 s. F. s; |" b4 K. ]
           {1 I' g, G  L4 v7 q- B7 u+ _4 u

4 _6 F  @. M' ~  {: g4 w                        case 02:+ K2 r5 b0 l+ l& y, |
                                {' z" f5 @1 S% \& k* U) ]) C
                                        pwm1=5;
/ a, i. |, M& n& P8 o' M                                        pwm2=5;/ n6 J& _4 B( q
                                        hou();//后+ G6 D! |( {0 l- [2 p, c+ G7 O
                                } break;
" F; u9 T4 `4 q' E: w9 B8 N; T                        case 03:
$ E% t- P+ |9 h0 }: Y' g; ]' `) K( ]                                {
9 n/ l& R8 J/ z: N2 Q- i0 U5 q1 `6 F                                        pwm1=8;
# C/ y0 h# _0 f2 r; r9 U6 f  P                                        pwm2=8;  Y$ f  w6 Y( a0 L
                                        tr();//右
9 ^& ?/ ^# Z# o/ v2 e" |                                } break;
: }+ n3 Q9 O: m, X3 J) E5 P- n                        case 04:
3 r( L* v% }+ O, D                                {! D7 e/ `8 e0 i' J/ i  @5 |# R
                                        pwm1=8;
, g2 m$ n; p. V1 c8 \$ d                                        pwm2=8;! j. {( z  U- V/ v, j" s7 [
                                        tl(); //左
( M; H  Z. w& x3 n1 K9 {0 F' p                                } break;
  V3 [' C1 N) c6 r0 W4 L//                        case 05:
! N6 B4 g# @9 K4 u8 Z1 {& M//                        {5 U, {5 A% @6 `- ?+ f; b
//                                xunji();& s+ v7 [3 i( S$ n" _* Y3 \
//      }break;3 f3 [) w, X# n4 N+ T
                        case 06:
7 `- T0 J- I/ @8 L4 w. f6 t2 C6 u                        {
% L9 P! w# ]' c+ o                                suiji();& X2 f# V9 `' e. v8 x# c
      }break;
' b( O% [; R0 h1 z                        case 07:
& S- y* I' P7 c2 K6 a* D+ h( y                        {0 ?* q# D: D/ l! i$ q* c' \# t
                                pwm1=5;
( a0 o! Z; I7 z' `8 [% {" V+ Q4 E              pwm2=5;
$ C- T7 V$ I, z1 B2 q                                go();- s8 B0 s* n8 u; S" m' J: f( B
      }break;
: L. N6 i! l; `$ Z" C' V" X0 Z                        case 0x08:9 S# Y+ y: l$ s7 b7 n
                        {
% Y" \! k3 ]% u6 e- l, s& h                                IN1 = 0;//
" \- z. p4 I. Z# }) o/ Z              IN2 = 0;: P+ P6 d6 q- R1 @5 ?9 P+ B
              IN3 = 0;//4 d( }5 u7 E1 {; h  N$ g$ @0 A1 L
              IN4 = 0;
5 u# U( c2 n# ]4 W( ?. Z      }
( \, k3 r$ n& E* a1 L+ @& c9 @1 Q                        default:break; % n6 T* M, l0 T$ B7 |' D: y
           }
! [+ O4 `5 H/ b/ c9 b8 h  h0 y( {}
# ?, k; Q& W# K" B0 w3 Q0 L' V* g# l$ l
////毫秒延时
6 P4 h$ u% B8 [+ c4 d0 V//void delayms(uint xms)
& u3 F+ \9 a" L2 x. {  p. h9 V//{7 t5 F7 C: _# Y, B% _5 V  W2 K
//uint i, j;) }' I; D, D* B$ r
//for(i=xms;i>0;i--)         //xms 毫秒
4 d1 x: |* q, K( v* c4 z//        for(j=110;j>0;j--);
( n1 H6 V! f) Q+ ~//}, a: k) }* i' e; ?. W
5 ?8 n1 p* c7 s4 F' _
/*------------------------------------------------3 {9 s3 Y% r* V$ S; j0 [" [1 h, o
                    定时器初始化子程序
, ~/ e9 i/ U  f9 \7 j! k/ T------------------------------------------------*/
- |5 D8 g( e# [% }( P2 v6 f" qvoid Init_Timer0(void)2 v& m1 |/ F4 u6 }! {1 P
{
2 p& a- T% b3 w5 H: |0 D TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     ! M7 J4 a" R. V( J+ d% A0 Z
//TH0=0x00;              //给定初值
% [+ Y% s+ k6 `1 z8 k( g% d //TL0=0x00;3 b8 o9 z3 y' Q3 N7 j" M8 P
EA=1;            //总中断打开
0 e2 a- q5 A7 Z0 }. T/ d ET0=1;           //定时器中断打开" j2 x" U7 j0 u+ S
TR0=1;           //定时器开关打开( d" [3 _: l1 F3 s# [$ Y
}; m2 D$ W: g! }3 Z/ V
/*------------------------------------------------) z- d; m) B( I# {* |
                 定时器中断子程序0 T2 h+ m; j- o5 F+ G
------------------------------------------------*/# z7 r7 Z9 m" w' ?1 ^# d2 ~
void Timer0_isr(void) interrupt 1   c, ^% Y/ p% ?; i6 B0 V2 n
{
: }7 V' q% Y: L# C$ M  J! x static unsigned char count;
' t+ @& \1 k% V- R- H. A TH0=(65536-2000)/256;                  //重新赋值 2ms
' a8 W; G8 @2 ? TL0=(65536-2000)%256;
( s/ ]- B" f. E  r" i; C
7 l3 K: O4 |# y" Q% z! c2 c        if (count==pwm1)
0 E( q0 F- j! c                        {
8 a+ \8 J" U, k6 h& I% a                         ENA = 0;                           
; x9 Q7 a; b, t* q! y5 z                        }
+ K8 o4 W  o( K! v" c        if(count==pwm2)
8 l' G/ t& G7 [$ o+ ]/ Y/ m                {. P$ `3 x. D3 e- s6 ^, n* x* G
                                ENB = 0;  
$ e* Y# O7 P! q6 R+ \9 K7 s1 o4 |                }& d* p# @3 ?* X5 f
                count++;9 a. B# O+ i" \, o$ m
        if(count == CYCLE)       //反之低电平时间结束后返回高电平3 Z4 E" b# A. G- @
                        {
  m1 @. s# K, N9 Y5 Z$ J; F, Q# w                        count=0;5 P& R( w  o, F; A9 |) C
                if(pwm1!=0)    //如果开启时间是0 保持原来状态1 [% t2 F) z9 U+ I6 W
                {% G. ]3 r9 t4 ^
                        ENA = 1;              
/ ]8 g& _$ |4 s4 b; V4 W3 [3 d' E! D" z( J2 L
                }7 `! m' E1 ?1 f* [" L, z
                if(pwm2!=0)
" w7 D) l* o+ V; F* A4 }                {8 y6 S: `# W& Y/ E. Z) Z
                        ENB = 1;
% Y; X- z1 M' x( _& M' R                }
0 a. B" C- T4 \& \      }8 G" c+ D) Z5 x7 O+ U
. l# f6 t8 `) w
}6 y8 i/ g; N3 C3 H! [/ Z2 t
void ser1() interrupt 4
+ m' }% q! I1 s; B% a' E{; f3 i) x% V3 `0 N" M+ Z
        EA=0;+ C1 W  h2 {3 p7 S% W4 G  ]6 S
        if(RI==1)
+ f. N* I; k; Z* Y/ e0 B- S/ G: a        {  p" p! F" U$ @  S( c9 \
                a = SBUF;3 M8 @* ~! |9 C* X: l+ `
                RI=0;2 c: d- i3 p* B0 c8 l/ ~
        }# O- J3 I7 n! g. @- \# b1 z
        EA=1;* b, n/ \( B' g% N% {3 X
}& |/ ~; o7 O2 f. A
$ k" ], j5 ?& e) B6 H6 J0 Y
- J1 P9 b# O! H( A7 \6 ?
1 @( e8 I+ G1 G) P
/********************************************************************8 {' S9 T- x' h! r
实现功能:直流电机调试程序
9 `1 b4 _7 j/ U( Z# ~* Z使用芯片:AT89S52 或者 STC89C52
  H; E2 c5 v2 s3 a- V0 [晶振:11.0592MHZ
8 M; \( S) v5 \编译环境:Keil
, Z6 u: J! C, I7 z$ ?【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     + R* K% y4 X) i1 s* q
*********************************************************************/
2 |% a  v/ E, O, B#include
) n0 T0 x& R! y& N% I! n+ j#define uchar unsigned char//宏定义无符号字符型
) O  |3 o0 O  V2 N! \6 C* O#define uint unsigned int  //宏定义无符号整型4 X! M4 P" [% f- `" g/ T. T; i
sbit P2_0=P2^0;//M1启动3 `, s2 Z2 L$ i' T4 U! [2 y
sbit P2_1=P2^1;//M1停止
: u# O  h, m: b6 ~6 p  esbit P2_2=P2^2;//M2启动
; Q4 x# t6 W) ~sbit P2_3=P2^3;//M2停止
7 T; o0 S5 [# {+ G2 S9 C( g) psbit P1_0=P1^0;//M1
& V4 v+ {" Q8 A. @: E( j5 Isbit P1_1=P1^1;//M1& K  u& W) K; t8 y
sbit P1_2=P1^2;//M2
. A" j5 E) I( ^, p$ Y- b$ csbit P1_3=P1^3;//M2
% r; [; E4 W" K& U/ Q/********************************************************************5 R  ?8 T! |0 o! N$ b
                            延时函数$ Z7 O) M9 G$ \+ k8 Q, @- Y
*********************************************************************/
( }, v1 H* A$ m7 }/ gvoid delay(uchar t)//延时程序: O  W' W/ p; c
{
3 b: W; x$ O  Z1 euchar m,n,s;
+ B* [  P' ~; a% i7 f/ L% _& ifor(m=t;m>0;m--)
: y$ ?( P5 \( O: Cfor(n=20;n>0;n--)5 v, G' o" g& X6 u
for(s=248;s>0;s--);
  b2 ]' F% V  `$ R5 A}
8 x7 W  P) Z- ~3 |( L! }& A2 e# [/********************************************************************% W0 k+ s6 ^- ~- W" D- h# {$ x" a
                            主函数
) Q8 s& N8 y. |- [+ A$ w1 p*********************************************************************/
  m' @3 b) H$ J) J4 _; Omain()
7 \" L2 `7 a* y+ P$ j3 |{
' g; R% N4 f2 k3 J! ]4 B$ W) V. a2 vwhile(1)
% d( u) H: a) ~5 h% [) o   {
6 w: l, ?1 L! G* H) P7 n       if(P2_0==0){delay(3);if(P2_0==0)//M1启动
0 L' D% m& H$ q% r2 f         {  M/ m* ]3 v! T- `. z0 A6 |6 k
                 P1_0=1;                                    ! d  E5 b1 B; n6 q8 B
                        P1_1=0;
' J( U1 P+ P% l3 O          }}
% Z0 N  d* e" M  i/ ?  y0 ^       if(P2_1==0){delay(3);if(P2_1==0)//M1停止
2 G7 f7 ^3 E  R/ x! O         {1 J* k/ E& Z; X# b8 \/ ]
                 P1_0=1;
+ `# q8 J! y* ?0 y* z3 C                         P1_1=1; # G3 ?1 n+ Q; @* I  ^# K
                  }}! F0 }  M4 q- n$ d9 M
            if(P2_2==0){delay(3);if(P2_2==0)//M2启动
5 n. r# H( |' a+ @         {- h; n0 ~3 ^% `/ Z, R8 w' b6 k
                 P1_2=1;; u# t, F* e* v* }+ @
                          P1_3=0;2 R9 j- G% C6 U2 j5 F( r( t
          }}
; K) g& ^6 f4 t) G* S% t: E/ j       if(P2_3==0){delay(3);if(P2_3==0)//M2停止
: T0 C. T& V9 J3 h" b         {" }  t% `! E- o/ B& n
                 P1_2=1;% V) |1 S* D1 I! ^" a
                         P1_3=1; % N2 q  w2 e7 |; K4 _4 T/ e3 y# t
                  }}
4 f; s7 C$ ~  j/ U2 B, C9 }$ B' S& M$ l, c* A2 n. i
1 l2 C/ F8 z1 S
…………余下代码请下载附件…………5 G! |3 R6 l; b. y% N, q

+ a& O: {# B, K. y! S8 y1 J4 H; u' Y  n  k

1 ?+ J2 ]% _! U0 e6 ?' J# I- x问:Ena 和Enb是分别接两个直流电机么?直流电机的剩下那端接哪儿?9 v  A5 \  X% ?
7 J8 P8 X" ^2 I9 d+ m1 I
答:! G& B$ t7 R! \( H3 T& N9 j& Q
不是直接接连个电机  他两端是脉宽调制  举个例子  如果你要实现两个电机不同的转速来达到智能小车转弯的效果你可以这样
8 O9 V& x  l' k% t4 j) ]四个输入端接在单片机的四个管脚   四个输出端接在两个直流电机  两个使能端也接到单片机的两管脚(就是ENA,ENB)通过写程序来控制
1 k( t8 H; ]2 l' O: [电机的转速写程序的方法有很多的简单说明一下定义一个变量j  然后让j++;当j=20ms的时候吧j清0;送给高电平定义一个i  叫i++;让i=10ms的时候
+ a$ p; {8 E& v3 B% V6 ni=0;送低电平,这就实现了电机转20ms听10ms的过程,由于扫描很快就实现了电机的减速,而你必须在你的单片机的使能端管脚送一个低电平/ h  Y* S* c7 ^4 e
减速机要ENA=0;(让此管教的电压小于2.5v)他才能执行电机调速的过程,ENB=1是另一个电机全速运行,哪一个电机减速运行就实现了差速转弯了9 @' J' a3 M- Q* N, G" m
    这只是我自己的理解   也不知道该怎么说希望你能看懂吧。: E* D* W  z; W

, p/ X* M% n! U7 g; |9 }" s% h$ ^4 a9 M2 L) ]' I

1 s1 ~1 \! z3 c. V
游客,如果您要查看本帖隐藏内容请回复
: d1 i& ]! F7 H' s: }

0 N2 _6 l8 W- t( H: K+ Q6 {, {  C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-20 02:43 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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