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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
L298N光耦电机驱动原理图 51Arduino PWM调速程序
& U; ^0 h- u& i: ?: R7 P5 V! e" Q
6 f3 ~" t+ @; w, z! K& O5 L8 V

9 b, u. o! U# `' W" m分享一个很全面的L298N光耦电机驱动给论坛的朋友们,有步进电机的驱动 包含51单片机和Arduino示例程序,有芯片的pdf中文资料和L298N各种常见电路的原理图.
( f1 w2 m! X" n! N- E/ M( p
$ e( ?: b6 C" X, ^. X- D8 r+ XL298N模块原理图:' ^- g( R( u9 Q
; r$ j+ j, L. l  x
1 `( t/ u" E! q8 B+ d( M
L298N的pdf中文资料:
4 W5 U1 W! O' w* N( @
7 R3 E. I+ b! c8 K0 H ; ]8 D+ S( c" [6 F1 k; G
4 u; V' b) X* X
3 ~3 c3 y+ i3 G: F8 o
0 r$ M9 S. `% V! ^' W3 L

% K8 r& Z3 v; j( s3 p* |: `& s( i% E0 @. m1 t) x3 v
L298N模块51单片机PWM调速程序:

+ M: C. O. [& k/*8 O7 U" T) a* R& H- p, _
//利用51计时器+中断来产生PWM信号,从而实现对电机速度
! V/ k8 Y) V# W* h//的控制
) [9 }$ ^: W3 @  Q, {//程序基于51单片机,晶振11.0592M 12M都可以
  C9 ~1 Q, j6 ~# r9 z1 i* o*/
! i, }3 b/ z3 c! f# x
& k! M2 x1 N! F8 J#include"reg52.h"
4 P0 I; T, j' ?& }& R  t1 g#define uint unsigned int" e. l# Q8 m9 ]4 a# @
#define uchar unsigned char
* _  r! [6 W( _sbit in1 = P0^0;                      //IN1逻辑输入端3 \! c  R" ]; z5 \3 ~6 V% u
sbit in2 = P0^1;                  //IN2逻辑输入端
; r' e. Z4 ~+ }1 c& l+ Qsbit in3 = P0^2;                  //IN3逻辑输入端
. R0 j0 T7 {0 G6 o9 t) |sbit in4 = P0^3;                 //IN4逻辑输入端
5 l- R) j+ h/ A8 q& A$ G1 Nuchar count = 0;   //定义计数变量
, q' [7 R. l7 B2 X( o/****************************- i3 z; L4 }: D) D0 W
//T0初使化
5 D: u9 U1 O: e+ M****************************/  t+ A0 f$ h( ^, @2 L6 f" |- _2 D7 z
void Init_timer()
5 ]1 }# N0 m/ Q7 H' X{
0 V. m& Q8 {9 p% E. t2 d: V        TH0 = (65535-10)/256;
2 M9 G5 U- Z9 D: n+ R* }! M, c0 j2 b        TL0 = (65535-10)%256;
( U3 t' r6 A  w# m5 ?: o+ [; t( @6 E        TMOD = 0x01;
! z. R: g$ z+ |% T# d        TR0 = 1;1 p+ ?8 U! Z( W9 L% N
        ET0 = 1;
  v0 W1 n# x6 U% J) W5 ]& p" \        EA = 1;: U" P1 b' F+ }7 s! [
}, T) i9 A* }7 R9 y5 B: E- e
/****************************1 L/ S2 K- i( X  Q
//电机速度调节,speed为速度$ }9 |+ M: s( Q& `$ d
//值,从0-100可调。( f# Q4 j* d/ _9 N2 ^
//两个电机正转调速 speed值取决! R. c& X7 X" w% z
//电机速度,当定时器值小于speed) C0 i) {" N7 a5 \
//值的时候,电机正转,大于speed
: M) e: Z* C7 T$ z/ K) V//值的时候,电机反转.从而达到. {) O/ B1 Q/ D8 \/ `
//调速的目的
+ T8 B! R7 ~) s# n* a****************************/
5 ^( X2 F& B6 O: Zvoid motor_speed_ctl(uchar speed)
4 q8 q4 O4 B0 k* |' q{% G8 _4 V$ ?* Z- A# U
        if(count<=speed)
5 H2 D0 x2 s( g$ {        {* F* q! n; L% L+ k8 E+ k
                in1 = 1;5 d0 V0 f) ~" G; E9 e
                in2 = 0;
" \6 l' ?' }( t( o) ?( c                in3 = 1;: w- r3 |! ?) E% S
                in4 = 0;7 `8 z% l, ]2 e# }+ P
        }
6 t7 ^4 l* @# ?( a# @" l        else
. D* b7 @3 c& u& g) W        {
( [) f! S; u+ V1 U* U                in1 = 0;
1 U% m% n" @3 z+ A4 P                in3 = 0;
% q' }. m& D6 ?. r) F, Q) t        }( N7 h* I0 `! b8 k5 r& L* W
}
! u9 l9 s' {2 S$ Q; ]7 I+ T+ \% a4 u2 J+ |
/****************************
6 H# E2 b# X6 V9 q, Q- \//main()主函数  i8 p. q5 F! o5 x7 R4 r
//大循环2 V* l0 ?9 Y5 G. e
****************************/
8 q  S9 ?( p3 y! S4 W4 V  c, i/ nvoid main()* ^. J% j+ T4 a+ w/ c
{! q( C7 I; V, D1 R$ ^$ V; h# B% Q
        Init_timer();  F; V+ p: W  k) j( m: }
        while(1)9 f( D: c7 ~+ z+ ^$ E8 Q
        {
& h6 ~7 |+ o- J                motor_speed_ctl(20);  //电机向前行驶,速度可调节,改变括号里的值改变电机速度8 R* O: F7 _% t$ Y9 A$ @1 d& y6 q# @
        }
9 i( T! m' C1 |$ u/ O( {# p}
. @6 h! ]& P6 X3 @% d- s" a& Z) w/****************************
2 O" o" \! @5 y" |2 {# D//T0计时中断" S2 W9 i3 O3 i4 b
****************************/
3 w: z5 }. y$ F& Kvoid Timer0_int()interrupt 1; d& Z. [7 {* K: ~8 s" T1 w  {' \5 [
{1 \8 W  x3 L$ u% h
        TH0 = (65535-10)/256;
& H% Y, r/ K. ~9 @0 b9 Z) i3 |        TL0 = (65535-10)%256;
. K' ~% y/ M& R        count ++;
. N9 h) d4 I- a( k$ x7 V        if(count >= 100)
2 l: S. O( ?# f6 U. E        {
, ]. u2 \! h7 a: v                count = 0;
* G& k  x1 m0 d        }               
0 O  ]* u  `  L& \5 Y, [4 K}! N) a% Y% ~, A

7 a$ E& n7 ?" i; |3 W$ M
$ F8 f  W; X- O/ O2 U6 S; q% V: nArduino示例程序小车加速运动:' W/ q" D9 K1 ~: _' s$ [& M
//小车前进与后退
$ K1 W3 T  {& r: c6 `) g: D1 ]1 U//时间201209027 [2 [9 s# s! ^* [6 k
int PWM1=6;  //ena port
9 E" t( ], \) A2 [int in1=9; //IN1 port 1 l$ ?. X* r6 H1 J# [# S
int in2=10;  //IN2  port
3 f' z4 _2 z$ e8 \7 Bint PWM2=7;  //enb port9 F% Q1 L; r9 [4 Z
int in3=11;  //in3 port  s+ r" h5 j1 U# A8 J! U3 ^
int in4=12; //in4 port* p+ i/ F( u; U' i
void setup()
8 Y5 V; J: ?1 ]8 Y1 S' s' r{   
' E; O% t& y$ h( k, i7 WpinMode(PWM1, OUTPUT); //定义PWM输出' ~- d# W, A6 P. t. C! h# t
pinMode(in1, OUTPUT);     , R2 b. S* k3 y2 W% F- J# A+ S) M3 m
pinMode(in2, OUTPUT);       G6 p# b; A4 [& m5 c- M
pinMode(PWM2, OUTPUT); //定义PWM输出$ [" N7 ^4 U8 P# n8 H! c8 D6 J6 O
pinMode(in3, OUTPUT);   
7 ~# F' f7 {  g! e" ~pinMode(in4, OUTPUT);  
" @" g. w" ]/ s+ l8 w% m} , J* R+ K! [/ h! B5 \1 u
void advance()//前进加速! i! L- {* F0 _
{
# @" b; v  I0 m" S. `  int i = 0;
2 ^% I6 S  I! W6 p* ~  for(i=0;i<255;i++)2 j8 G, M: L# q
  {
0 q% D7 P# N! z9 c    analogWrite(PWM1,i);
. W. p+ q1 P  }    analogWrite(PWM2,i);
* r4 u% X# u2 K    digitalWrite(in1,HIGH);
$ A, A- }6 |+ G1 d8 _. ^    digitalWrite(in2,LOW);
/ n% W7 ?: R" G0 I& ?    digitalWrite(in3,HIGH);
! \: g  s' T" G2 b: e    digitalWrite(in4,LOW);
5 V. R; {9 H. x2 N1 }7 |+ t8 @, g& l    delay(5);) B" U! k1 Y" {; x1 X7 J0 [+ @
  }% ]6 ?+ P& K4 V! ]' f: {0 U$ m
}
( V/ N$ F! E7 a( Z5 X- z( q: l. K void back()//后退加速
  z6 G- F! g0 f7 S1 q+ ~+ |. u: I* J" I1 d{9 o9 {, G+ ^* s0 D
    int i = 0;' S3 z1 Y6 l4 {
    for(i=0;i<255;i++). \+ P4 `8 V; S
    {
$ Z% ^& _' _% M; A& d      analogWrite(PWM1,i);% r+ A- {% D9 B( u0 R- S, K
      analogWrite(PWM2,i);( f6 O- x$ t4 {9 R* N
      digitalWrite(in1,LOW);
! t" _" k5 N. F( K      digitalWrite(in2,HIGH);
, C# `; d# ^9 a/ F2 U      digitalWrite(in3,LOW);. X! {4 h: P5 `# U1 @
      digitalWrite(in4,HIGH);
4 p$ B% K3 d& t8 u+ b8 ^      delay(5);# b( l% o" a7 R. r, n# {1 s( f  O
    }
  {# F" t+ \4 I}+ s/ X2 D2 h2 W. W9 o
void loop()
" T8 E" }% K7 C% @/ t2 U{* a/ R/ J* C2 X2 C) G9 T
    advance();//小车匀加速前进
  |1 R1 l% x" O5 T   delay(1000);//延迟1秒
0 m! r$ ]) R. n: G* B" Q* W$ r    back();//小车匀加速后退
6 U7 `, O5 ]# f" X, {9 C2 W   delay(1000);//延迟1秒. n* Z" y$ W' {
}
9 Q1 n; b8 s! \0 S9 \1 h
0 z, R- K, ^8 X4 ^
/ y5 Z, Y! Q( H! ]2 ?下载:- z6 P5 h8 `4 I8 w
游客,如果您要查看本帖隐藏内容请回复
+ G5 k/ l3 _$ k& w
& {. Z) }# R8 W* I: ^; D
& b3 X/ i- I' j8 X9 D; f9 {

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 06:47 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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