|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
L298N光耦电机驱动原理图 51Arduino PWM调速程序" p0 X, \$ P( X& k7 }) b6 U# ^
7 A. B6 h- n) }8 d' P2 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
|
|