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

L298N光耦电机驱动原理图 51Arduino PWM调速程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
L298N光耦电机驱动原理图 51Arduino PWM调速程序
* X. F  z7 R. u" B, R1 B. L# h- }4 K
  ~; {' ~( [2 [. T
0 u/ i" z! g# a, N. R! D
分享一个很全面的L298N光耦电机驱动给论坛的朋友们,有步进电机的驱动 包含51单片机和Arduino示例程序,有芯片的pdf中文资料和L298N各种常见电路的原理图.$ S& ^& s* {# g- j
: \) Q5 i# m$ s
L298N模块原理图:# @) ^7 h7 Q+ Y- ?& r

! C1 C- i5 @5 t; ^5 \1 N# F
  H# Y1 c. k1 R- G0 [; ~L298N的pdf中文资料:/ e: I0 Y( Y  Y

1 J3 N! ]2 _% j. @5 w. M" Q
4 C* u3 u( w/ W* x$ P  d7 d) E+ I& F
9 ~: D+ p" E) d5 H$ ]

" V+ U$ Q) y- W . K* z! ~' W! c
: N% U$ |. H, }6 W# v
L298N模块51单片机PWM调速程序:
, H# H1 P& ]# i( ?- y
/*0 Q$ M4 D, f5 k- h- I! d
//利用51计时器+中断来产生PWM信号,从而实现对电机速度4 D" d  a+ t. [/ G0 S( l
//的控制" v. [) v# F; a0 B' Y  G4 A* \
//程序基于51单片机,晶振11.0592M 12M都可以
6 a  F# j- J3 \# u* x3 q6 t; Q- d9 ^3 Q0 W*/
% I# v0 J: |, S$ Y4 j/ j. ^) u: V# p! g$ @6 C& a& \
#include"reg52.h"% ]3 ]8 O; n" W# s* Y
#define uint unsigned int
* E  f* o7 m  C" q+ C#define uchar unsigned char
/ d- n; C! F/ f3 A3 t0 w, Fsbit in1 = P0^0;                      //IN1逻辑输入端
3 T, Q: }/ h6 R. j8 W  ^sbit in2 = P0^1;                  //IN2逻辑输入端4 m/ C$ \8 ?4 q) k
sbit in3 = P0^2;                  //IN3逻辑输入端
0 P% E7 T, Y  {sbit in4 = P0^3;                 //IN4逻辑输入端
# \9 u# R: Z/ b' g5 `9 }/ G/ uuchar count = 0;   //定义计数变量+ I9 v# ?+ D( s+ D: K" F
/****************************. W6 d! ~% A3 {) G  D
//T0初使化  F) T2 n0 U; s/ ]: l. X( k
****************************/; `# ]7 `& d) D* Q7 Q  R
void Init_timer()
4 d9 T9 q0 r' ~) }! A  k8 V9 S+ }{
1 K* ~! t. g6 R3 R& C; {( H        TH0 = (65535-10)/256;- \* m" Q! ^$ ~5 N* l: K
        TL0 = (65535-10)%256;& |, z* d5 I% q' {$ {% }
        TMOD = 0x01;
8 S5 M/ \) `; X# [& r        TR0 = 1;4 y; u3 w5 q6 r+ B) {
        ET0 = 1;
& Y$ h7 v1 x) ?8 l        EA = 1;
0 C, {! C% G# [# E}* S2 `1 X' q3 b4 L. ~+ m
/****************************% N/ i. |0 z7 V, e% _) D
//电机速度调节,speed为速度
. U$ k  _) ~7 Z//值,从0-100可调。  Z4 m* r, u. x3 \4 N. D
//两个电机正转调速 speed值取决; `+ p& _! E7 p, I* g' c
//电机速度,当定时器值小于speed6 p# L. L: u# c* J2 p: G
//值的时候,电机正转,大于speed8 X3 E4 `8 u5 n" f7 l( f3 o2 t
//值的时候,电机反转.从而达到! D" I4 n6 L& t3 [2 ^" ~  f
//调速的目的
& g& Y1 i0 f+ ?6 E- t5 f****************************/
8 y5 I7 p. G( ~void motor_speed_ctl(uchar speed)' {5 }& p0 [7 h5 P& V# ]6 q  r
{5 n& L1 p) N% r
        if(count<=speed): ?) z6 \" O! _: C$ Y. G+ f
        {& i* e/ t  S# j2 U1 U# z
                in1 = 1;
/ ]8 l$ B0 H6 t# s! x; J                in2 = 0;! T- y( j' u; }! z* R
                in3 = 1;+ e0 l) A3 _8 g* Q6 ]) }
                in4 = 0;! l" T4 p- o4 L% W) {( {$ M
        }0 ], \, h' b! n5 s" }& y% j
        else
2 B" @$ K! P- e% H! o4 i        {( ]  c9 I+ K  I5 [
                in1 = 0;
4 b6 w- d) a" U3 J# q, I  }+ L                in3 = 0;# |. F) p+ Q0 M
        }
0 O, y' M. l) N1 Y}. U' Q% E- }! W6 g# ?1 e$ J: b

) Q3 j* U/ V8 c* ~6 }. r/***************************** @5 D& ~( z' S- p) i7 m
//main()主函数
3 I# B/ Q& b8 b. j/ P/ j. L* X//大循环. O8 c, |8 W8 x$ J. Y# e
****************************/% }7 C& I* U- s8 z& d  Q6 I
void main()3 M3 E" p0 P- ?, D' X" [
{
; w' F3 r! W; k5 Z        Init_timer();$ I% S, E$ |0 j: ~0 c# G8 i, R/ T
        while(1); h/ J2 l% h7 Y) ], D5 }! D
        {
/ S/ m0 H- Y  O9 W! K( U" S+ E5 T                motor_speed_ctl(20);  //电机向前行驶,速度可调节,改变括号里的值改变电机速度- U: ^0 l$ K! Z& W0 j$ G. ?5 B
        }
% g# T- b! L4 ?9 ?}
* }0 M9 Z- J/ B% r& s0 v/ X/***************************** \9 z2 h' r& X% r
//T0计时中断
) f0 |3 J$ D4 `) W- K- G9 X: V$ X****************************/4 c8 x- {7 p$ F" ~5 F. G% y
void Timer0_int()interrupt 11 o5 o; _: @/ `8 t7 M/ z
{
$ }4 i; h: E8 F7 z' i; }2 t        TH0 = (65535-10)/256;
" w4 p+ y. J3 c% e        TL0 = (65535-10)%256;# l# r% j3 @, }2 G" ~, Q) }' s
        count ++;
6 m! m& s. L, }5 a% h        if(count >= 100). v& t$ {& e7 `7 [4 S- g" F
        {
" Q* V8 {' \7 K0 F& F                count = 0;. C% r- I% n6 ]7 S  r2 @7 y# P
        }                # @8 S# u- d- q6 j5 d  W
}
. K7 l) G5 T; D2 N3 u' ?6 f, @6 w4 `2 s/ d+ z

! D. r5 M1 Y; P- V3 J2 m* GArduino示例程序小车加速运动:
9 M" T: B$ d1 }1 o  }( g0 I3 U//小车前进与后退
8 X8 u1 h3 |3 _: |//时间201209025 y; l" ~5 @+ ?- E/ q
int PWM1=6;  //ena port& d/ m0 R: d4 e( N% d. o* G" Y
int in1=9; //IN1 port
, x+ e1 s. A0 ^3 F( w. d- hint in2=10;  //IN2  port3 S5 @1 N' d7 B9 Y/ G0 z# i
int PWM2=7;  //enb port
& G1 U. F5 g, W( n$ l4 Zint in3=11;  //in3 port
+ k# y$ @+ h% r% @& ?9 `- S# sint in4=12; //in4 port" F' I4 y, h3 F- P+ z1 L- j; }
void setup()
% s( ~3 U3 O2 D# D+ p3 {{   
% c6 `: |% _5 m9 E; D- O$ r+ _; ZpinMode(PWM1, OUTPUT); //定义PWM输出& P4 h1 I+ ?5 K2 S" ~# O6 g% Z
pinMode(in1, OUTPUT);     
. U! Q2 {& |% R; tpinMode(in2, OUTPUT);     
- ?+ Q" D$ J' z2 K1 i- ~9 opinMode(PWM2, OUTPUT); //定义PWM输出! e4 ^: N" B! _+ p4 e
pinMode(in3, OUTPUT);   2 e- L; U0 U) E2 P' W8 C/ F
pinMode(in4, OUTPUT);  ! e& o* f$ G6 V! N: M# X
}
  d' Q$ K* s) h6 N: e; A3 fvoid advance()//前进加速% \( S2 E( \& \/ n1 G+ |
{" s4 w) [# k6 A; j! A' _
  int i = 0;! e/ ^: J4 h. ?7 j8 |
  for(i=0;i<255;i++)
2 z( T0 l6 H0 b( M* |+ e  {
/ b: N9 Y- F  b) u; f    analogWrite(PWM1,i);
' H# O) V# Q( W+ e. L    analogWrite(PWM2,i);
6 ^- c9 J* O' {+ T- L+ `( Z    digitalWrite(in1,HIGH);, H; W) U: a# S/ A9 n7 [  }: `7 s
    digitalWrite(in2,LOW);
3 F* W! U! \/ U* U, f* W! X    digitalWrite(in3,HIGH);3 h  H  }8 g3 c/ D7 ~& p
    digitalWrite(in4,LOW);
6 ^4 U6 j1 t( R% l0 c( \7 P* r- H    delay(5);
4 u* y( Y0 F  I  }: A- [  I4 I  K. S* `" h8 F
}$ \4 T/ r0 O- p, I
void back()//后退加速
1 u, S  T! l& ]& S# y1 T{: e" z& b) T+ l9 p" n- s$ A& }
    int i = 0;
% m3 B* ?/ i) Z    for(i=0;i<255;i++), i3 S) @' E: J& D: t' t( V
    {5 R  m8 }( h0 d! Z$ `
      analogWrite(PWM1,i);" f3 O/ Z* q6 ^, N
      analogWrite(PWM2,i);. q4 u+ I% O% {
      digitalWrite(in1,LOW);
2 n+ k  s" w; {2 S      digitalWrite(in2,HIGH);
% Y; W4 J* r2 ^1 s" e8 Z# E7 Y      digitalWrite(in3,LOW);
2 Q' O' y; X. `+ b( l4 ^- Y) s* W+ M      digitalWrite(in4,HIGH);8 u! Y' d4 O7 J5 Z. t9 o# ]
      delay(5);
% n+ l  {$ K/ F- U/ X# Q1 H    }0 D8 k7 s& {% o$ a% ~
}
$ {- I) z8 z. g5 ~void loop() . S7 j" S2 @4 j' a2 }
{4 b' l' e/ i) v# c  r# P2 l
    advance();//小车匀加速前进( o& k0 c7 P$ @9 m5 o* }( X0 P
   delay(1000);//延迟1秒
5 J1 A/ B* q7 X7 r    back();//小车匀加速后退( O: F4 z; W9 N
   delay(1000);//延迟1秒0 |* k' ^2 Q0 d  l
}
; a' Z: V- ~7 P+ z6 D) D! f/ e% L% y" z  _3 `

! q, a5 C8 ^5 b1 `: i- J下载:% d, Y( m) r, j" E3 }
游客,如果您要查看本帖隐藏内容请回复
% |" o/ B7 H, }3 o9 z$ a

( |+ ]1 U4 N5 N# V5 n
% N9 r$ m' m' d3 O' @: e

该用户从未签到

3#
发表于 2020-4-23 17:11 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-5 15:13 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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