|
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 {
|
|