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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
L298N光耦电机驱动原理图 51Arduino PWM调速程序" p0 X, \$ P( X& k7 }) b6 U# ^

7 A. B6 h- n) }8 d' P
2 l7 A: `3 Z/ Y
分享一个很全面的L298N光耦电机驱动给论坛的朋友们,有步进电机的驱动 包含51单片机和Arduino示例程序,有芯片的pdf中文资料和L298N各种常见电路的原理图.; U3 Y3 R1 Q' G8 @8 p: G5 c

) G6 ?- m# E6 O! a& `' A& DL298N模块原理图:
. d. ]. `4 ]5 a3 X) [( j  g / v3 `; }* \8 Z; N
/ ~" z! v1 w( r5 R
L298N的pdf中文资料:
2 s" E: E2 C% y $ y0 j# e7 q& B
$ t) i9 z+ _( @6 j8 M& y( ^, b
0 H. E# h! b' k5 r$ R
% k- S! ~4 b- ^6 L7 _
8 h% N( {" V7 P

# ?) O' A' [" m; H1 o3 ~1 x: t
; }& w% U0 q' Q/ k  ]L298N模块51单片机PWM调速程序:

, o$ E5 U* i  |- W3 V' i; L/*! q! _& t( u" K9 W  }. U) |
//利用51计时器+中断来产生PWM信号,从而实现对电机速度
' f. d. U& V# ]& U; ^9 e//的控制. V+ d0 l. Z  j  y5 l) P! S- ~
//程序基于51单片机,晶振11.0592M 12M都可以2 |+ H7 {) I7 S, T
*/) r$ ?  w8 S5 z9 j9 F

! u0 |$ p5 |/ Y6 T: F5 j! T7 p#include"reg52.h"
3 P4 o* p' u! y#define uint unsigned int! S3 l4 b" p% \
#define uchar unsigned char
: r& _' \8 I( m% O; ^& W) x$ Esbit in1 = P0^0;                      //IN1逻辑输入端2 T! |8 b/ N4 _+ I
sbit in2 = P0^1;                  //IN2逻辑输入端1 H; t3 a) c% i- r. W
sbit in3 = P0^2;                  //IN3逻辑输入端
4 W; N" ~8 H2 ]. j( n, n, q  Esbit in4 = P0^3;                 //IN4逻辑输入端
4 `: l7 |4 F. S$ c% B; suchar count = 0;   //定义计数变量
$ _' i0 y6 e4 w  B7 H$ f8 z7 p3 z/****************************
( P# v2 C, u, @. E# }/ q5 B//T0初使化
1 A! U0 f) n7 h****************************/
( \) F; h1 s& w6 uvoid Init_timer()5 x4 n5 c" a  w
{5 F2 _8 t+ j( Q7 t
        TH0 = (65535-10)/256;
( V& e, @: L; A% }# V4 W. e1 s        TL0 = (65535-10)%256;0 W0 k, Z2 t5 d+ i1 f; [
        TMOD = 0x01;& I) j/ v8 C/ X# Z1 ~% [& J
        TR0 = 1;0 E$ x8 L3 f6 z4 n0 M  M
        ET0 = 1;4 }7 S+ T+ b1 S( f# J8 x
        EA = 1;: ]$ c5 M- B' s  p
}9 E$ S/ h8 P# j: d& n1 I
/****************************& D. H: E) g3 `. T8 Q
//电机速度调节,speed为速度0 k0 X2 e' h8 l2 l, \8 r' a
//值,从0-100可调。
' r7 x' Y- J& Q% q6 N) f7 E//两个电机正转调速 speed值取决
! Q6 h1 M) S  c0 k" A- e2 S//电机速度,当定时器值小于speed
$ k5 _( X) ^/ F& G//值的时候,电机正转,大于speed
( `1 F3 ]9 B. r+ [$ P- H; g//值的时候,电机反转.从而达到* ^" z: ]2 Z/ \2 f" ?# p. v2 d
//调速的目的$ R1 o3 r  u1 \) @2 ?
****************************/% A% S0 K+ |' g% @+ b0 o9 E
void motor_speed_ctl(uchar speed)! ^5 ]) L' u- r2 i( Z1 i
{# s* j) h3 s8 j, e5 U- F  S: W
        if(count<=speed)
# U- x/ @2 T, p" W! W" \: r' _* b        {5 p7 `4 z3 G+ e& F2 K; f' M4 v
                in1 = 1;
8 C! e' r  l' s/ A/ C, R                in2 = 0;% T4 `' S# }. X. v  D8 r. E
                in3 = 1;* W9 Y& ?; o* j
                in4 = 0;
4 j1 O% o  }$ Z* D2 T; Q        }2 ?3 n/ T" u5 h7 y
        else
6 g: h9 l  W& I8 f        {" u+ M* b- F# a, l9 W" c
                in1 = 0;
+ G. a9 S7 q3 u" z: I                in3 = 0;
& x$ |1 k+ g; o& f" i        }) ]2 \' W7 b' Q/ Z
}
) O9 K# _5 |  {3 o' Z5 U& W! r/ [  e' \2 N- {  `, U3 k
/****************************
& O0 I# [. ?- z, |//main()主函数- j# r& w7 o& s% r% h. m* {
//大循环( w+ a2 b( c+ o6 ?
****************************/$ `9 w! H8 l. x7 i. K
void main()
6 I$ F' y" q8 j{
* ?' z) G. @: P% ?. M        Init_timer();3 m$ P" N8 ^* Z
        while(1)
$ q0 j7 k' w4 g; V  V+ w. V        {
2 n( g. Z+ Z& {) X                motor_speed_ctl(20);  //电机向前行驶,速度可调节,改变括号里的值改变电机速度6 S' V6 j3 B; k+ t& w) Q0 \
        }
- L& V$ q! |  V# G4 p8 E}2 T; B2 N9 r% `: c6 k" S( ?' j0 k
/****************************, y8 f4 H' ?9 |% e: M- A) H" o
//T0计时中断9 @4 Z8 h/ j- G9 H
****************************/
: S/ l9 Q5 {$ c: q/ F1 a% s- X4 H4 fvoid Timer0_int()interrupt 1
& L# g/ @. {( ?' n4 J2 a/ W3 O{) A0 {& g+ W/ B, Y0 _  l; ]; i3 r7 @
        TH0 = (65535-10)/256;
1 d% M5 D! E9 T+ h        TL0 = (65535-10)%256;7 b: X. \! Z$ \/ Y/ a/ R. N. t( f
        count ++;
$ V' Z9 K4 K# q$ B$ S# D; O        if(count >= 100)
& p2 v4 {5 L8 f" x, o) I1 k# L) f; M        {
9 r, s  T: F7 m1 \% `                count = 0;; r" X3 h/ y9 t
        }               
$ h  b4 C4 Z' x+ o" h/ b: h( Y}
4 ?4 p5 C9 B  B0 J9 |& m9 ]9 Y0 ]/ S
% P1 [. `) m: R$ p6 S
! B& U5 y+ ]3 w- g3 [, U# j& YArduino示例程序小车加速运动:4 L4 f2 u2 d8 N& A
//小车前进与后退
3 K" `/ i1 |. m: J//时间20120902
- N" w1 t* I% q7 j0 y$ F7 ~int PWM1=6;  //ena port
% j0 l; ^4 ?3 |' ~* `0 Cint in1=9; //IN1 port ( M2 M: S9 Q- k5 f* M: r! G
int in2=10;  //IN2  port/ k8 g; O: j3 H4 E2 d6 [
int PWM2=7;  //enb port
* X' ]% r" f4 Uint in3=11;  //in3 port! v1 ^( y- l; B6 l8 R# T/ H
int in4=12; //in4 port
# s4 D% z& p3 l) G4 _void setup()
' W1 f4 N4 l1 B3 L6 u. O{   
7 t: J" h# x7 Y% j, y/ bpinMode(PWM1, OUTPUT); //定义PWM输出
* w0 _- a% o4 C; r5 F  ]  I' [pinMode(in1, OUTPUT);     
$ d1 @! y2 O8 T  R& [pinMode(in2, OUTPUT);     
: F+ n/ I  ]4 \$ [pinMode(PWM2, OUTPUT); //定义PWM输出
. X" M; w( p. R3 t1 J( G: ppinMode(in3, OUTPUT);   
) L) A0 K0 s& W9 Z6 A( s: S( mpinMode(in4, OUTPUT);  
, i! w- t7 h1 a* W} 1 u* E4 s- j4 R$ b" B- o$ X0 @$ k
void advance()//前进加速4 C2 J8 Y3 v: A- N. Z  P0 K
{
7 e% }2 H2 y0 ]  I0 h  int i = 0;
7 n/ ^" h7 `1 y- U7 _  for(i=0;i<255;i++)# v. B" f& X( ~  @3 Z
  {
. u0 H9 v& Q% m4 {- M    analogWrite(PWM1,i);. k+ E" f' G! `( e; R
    analogWrite(PWM2,i);" z; ?5 u8 ~; `, k9 e
    digitalWrite(in1,HIGH);6 L  v. U2 s# N* W) Q
    digitalWrite(in2,LOW);9 m# [9 `3 B$ K% A: i) }: F
    digitalWrite(in3,HIGH);
2 d4 A; \4 R+ D3 K+ ~) Y6 K8 ?7 k    digitalWrite(in4,LOW);
8 A; F/ Q6 `- h" W& b" t$ _    delay(5);! z# i/ l# c; K) ]: M
  }
8 X- O( g! ~+ H8 W}( [* l6 n2 i# n/ |# u# X4 v: L
void back()//后退加速
8 A2 K: k1 p0 s{
2 h3 ?0 r2 S: h( U! I# ^    int i = 0;
, F1 Z  K5 B2 X2 d" q: v, r+ m    for(i=0;i<255;i++), |7 M, `' K- G+ g
    {
$ R4 y" U! F8 o* F4 L2 O+ y      analogWrite(PWM1,i);
! _# E8 B0 P  Z1 ~5 z* \      analogWrite(PWM2,i);; J. t3 w8 z: A: Q9 m# V
      digitalWrite(in1,LOW);+ m% r7 P% D' P* i" F2 z/ N
      digitalWrite(in2,HIGH);9 t$ d0 w$ B! O6 i: j
      digitalWrite(in3,LOW);
+ K9 a- {' |) y4 F6 d$ k8 J2 m      digitalWrite(in4,HIGH);  ?. g' {. D5 E, {1 D! u# [
      delay(5);
* G6 V2 t  w4 e* R: e2 Q    }
7 q; D1 N5 w4 q2 U; X' n3 n$ {! E}7 A2 K/ l: y* \2 n2 t! m
void loop() % ~4 X  J, j" _: S' h: {4 `
{
! F: ]0 P' p: f  r" Q  v2 \    advance();//小车匀加速前进
* G. q( b  Q& a' v2 _   delay(1000);//延迟1秒& |$ h, z; S  g, t, k
    back();//小车匀加速后退
7 |- L: k2 E0 \0 ^2 F' S   delay(1000);//延迟1秒
' ^) k  s% i: p$ M7 `0 t}
  z9 u+ K7 [" t& e& t% n, p
7 Y! h4 A* [$ {) }3 }, Z2 a" `  ^# Z2 P% u" \7 L3 [
下载:' N$ K5 |5 p3 U
游客,如果您要查看本帖隐藏内容请回复

1 q7 D$ d3 X* h0 R7 d
: B7 k3 w# h# A0 Y$ j- m' Y
- Z2 `" ~6 l+ {7 ~  ^- |* ?* U$ e

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 19:13 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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