|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
L298N光耦电机驱动原理图 51Arduino PWM调速程序
* X. F z7 R. u" B, R1 B. L# h- }4 K
~; {' ~( [2 [. T0 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
|
|