|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
C51步进电机转动原理
. v7 q6 j; V3 f4 M% N/ P6 _0 x) n- W
+ K; t. e; B& I: ]9 x0 q/*------------------------------------------------ G& D- V1 R1 W; o j& d$ n, s
名称:步进电机, H* x8 J- ~; A: @& u
修改:无
. [9 P! X+ b; W( _ F" y$ Z8 W 内容:本程序用于测试4相步进电机常规驱动 使用1相励磁3 N+ q6 j8 @7 m% n: k
. q" o( @8 {+ T# a: p ------------------------------------------------*/
4 K8 W9 V- E7 W, v
& }/ O/ G) u( Y% y#include <reg52.h>/ @, |& J. i/ e4 q% ?/ V
. f8 ~1 A% n$ u: y2 D' i: F. Z; j& T: g% c, t% L8 p
- \" X; e6 l" N1 H* m$ o+ jsbit A1=P1^0; //定义步进电机连接端口; Z% l9 K& Y [9 u7 V. B
sbit B1=P1^1; v% p2 X6 @+ y" v' x
sbit C1=P1^2;' x1 z( P4 K/ H$ ~7 t0 T
sbit D1=P1^3;8 A& H5 N& W: i4 x- p' Q! `) f0 l
( y. D1 f3 i% j! l& a) T
1 a! n2 K; O& p) F& b#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电$ w6 r G1 A0 o! b& H5 V
#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
[( m" Z3 B( J+ l, `#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
5 D3 n; L8 o2 K) a9 v# D#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电$ z( B+ i9 \* L
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
9 R ]+ Y: w* A: \2 m6 R. z. F- H4 Y8 n6 P( K" s5 i& U+ G5 Q2 f/ o" _
unsigned char Speed;
+ ]0 S4 t; ?: n- |! k0 F: Y/*------------------------------------------------. ~# [$ f( q1 I+ v0 G
uS延时函数,含有输入参数 unsigned char t,无返回值
' _% h+ C3 \, _8 Q! Z% T unsigned char 是定义无符号字符变量,其值的范围是
; Z- i# i2 U- [: Q 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时8 z2 O/ r/ B/ q$ q7 k p4 I
长度如下 T=tx2+5 uS & ~% A5 M, e1 {6 f
------------------------------------------------*/5 e. I3 ^, ~; Z4 l3 s
void DelayUs2x(unsigned char t)7 O5 y) J* E m( a; f x
{ . d& |$ z |- i5 R, a/ C
while(--t);
+ C% ]$ n, [* B$ x2 D}
3 I$ j! z' p* z/*------------------------------------------------0 l" e, _0 |4 P' s, `1 Y6 M& N
mS延时函数,含有输入参数 unsigned char t,无返回值, q. I( w: }, {; ~5 R
unsigned char 是定义无符号字符变量,其值的范围是! J: E* g* c8 X; m" {$ @" r
0~255 这里使用晶振12M,精确延时请使用汇编
8 }1 @9 A4 P9 [& U- K------------------------------------------------*/
: c9 @+ r4 s3 j6 E1 Gvoid DelayMs(unsigned char t)- M |( k& h6 G0 ]3 Q; R
{ |: |. o% P' E" [& `& g {
8 B( M- ~) X/ D) Q& ~ while(t--)
- V# Y" N2 |3 a, x% x0 T {; ~# p/ q& l% O2 B
//大致延时1mS
% g: ~* `9 s* F9 i1 T DelayUs2x(245);
. |( X# \: ], } C# d& E8 g DelayUs2x(245);3 z6 `# D( I& r1 ]8 B4 K5 f6 r
}' A) P R" x. e& P
}$ q2 Y$ B$ } ~* d
/*------------------------------------------------1 s3 z6 }- F! N7 k
主函数
" q5 n/ b i1 t2 e ]/ I/ s% R/ u------------------------------------------------*/5 _& Z6 x/ y' [8 F8 R2 I9 w
main()
0 _* q' e1 E4 e H/ o' d; W L( i{8 ]7 u0 v0 k4 C( ]1 I
//unsigned int i=64*16; //转2周停止- V1 p: A0 \3 b5 }0 H: o! \
Speed=5; //调整速度( j! J7 N! I/ c- Z
while(1)
3 m. l; {# {. |1 V {
: f* Y" B5 V6 E/ n U; e1 |5 j Coil_A1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替2 m& K- m9 G' G+ {
DelayMs(Speed); //改变这个参数可以调整电机转速 ,% o# ]0 H9 t5 w. X* b( T2 T
//数字越小,转速越大,力矩越小
* r) J$ C' T% G0 Q- f Coil_B1
! S7 H& {& ?7 @2 Q; }; T( i, ^3 ` b0 [7 ] DelayMs(Speed);" k3 I# Y: Q3 w3 e' W/ s
Coil_C17 o3 Z# w1 y2 p& Y
DelayMs(Speed);/ [8 o; V) e' M% J
Coil_D1
1 l6 b: D& x9 T0 M DelayMs(Speed);3 `& C4 s: L$ I& Z: J/ T4 a& W
}
8 d! P0 B! O, ]9 s- ]" X}- x1 u( q; O; ~+ l
5 R9 M6 k" Q3 ?1 j
4 K' M( [( S+ r B
7 b/ D9 G. M5 G# f# ?6 m |
|