|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
C51单片机-步进电机正反转 源程序3 g1 J/ p9 f3 u: u! [: r5 e- Y; e
4 L- n! o" J" J6 X7 E( W' }+ \
' C8 l# C5 k# {- y单片机源程序:" W( m! X S/ e- @
/*-----------------------------------------------* g/ k( y* @4 q8 q" j7 b
名称:步进电机& S$ W: g; A- @# n
修改:无/ W* G9 W9 x7 B( P3 k9 ^
内容:本程序用于测试4相步进电机常规驱动 含正反转 使用1相励磁& Q# B/ f+ e8 D* D3 f
7 H0 F% U4 T, G4 K/ h9 ` s
2 |' X0 ?- R1 q: R: L& f, t ------------------------------------------------*/
% w* |+ X+ }) m' \* C/ l
$ l6 @1 ^. P) i" R' @" ?#include <reg52.h>( A) p+ |! M, T2 q& ?. t1 I
# |2 p: x- {$ q2 t
* E* X# @% J# A% S9 f; g
! J0 ~8 J' t) O0 l* i& |' usbit A1=P1^0; //定义步进电机连接端口
' I `4 G) F: y* D D) Xsbit B1=P1^1;
# G% \$ R0 G( Z/ Hsbit C1=P1^2;7 K r8 V3 \ q; I( n) e9 R
sbit D1=P1^3;
# w2 S1 O3 b% y$ C/ X% ~
" f7 G! @3 V. X$ [) [' l( v8 T4 o) l( A$ G$ w
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
% U1 F0 O8 u7 z#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
. H4 f. I8 f5 e7 Y0 b) \#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
/ O B) a# _5 V; t#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电0 w$ U# B" q9 b( @
#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
1 }% k6 \% k3 ~, @#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
# i# ]. K! i5 I. O#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
Q; X/ w8 q. K e#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电" j& V$ ^- V1 w, R
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
+ y. y5 `" A5 u6 W& k; v# `$ @7 `) o- f& \! c1 s
unsigned char Speed;5 D. c4 W1 H6 }6 v
/*------------------------------------------------
6 i% j& E: c+ O! b& t: o uS延时函数,含有输入参数 unsigned char t,无返回值
( v8 {, m$ ?9 Z% b; V unsigned char 是定义无符号字符变量,其值的范围是
- }! y1 F4 |$ _ 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时& u/ i5 B0 z' \7 R) u* a7 P
长度如下 T=tx2+5 uS
3 m2 J& _5 X0 ~# b$ p- e, U------------------------------------------------*/2 {& Q: N( q6 A A8 @
void DelayUs2x(unsigned char t)
3 A/ N0 L7 v6 ^$ I{ 1 A6 \# t. Z) g, }
while(--t);
5 g# c+ H- |. C}- [) C9 z! ]& L# q4 z
/*------------------------------------------------
! {, r+ e1 m0 D* n" _0 L mS延时函数,含有输入参数 unsigned char t,无返回值3 |3 B" d% P+ e& r( E# d3 z/ {
unsigned char 是定义无符号字符变量,其值的范围是
9 k: U$ W1 g7 I/ K+ w 0~255 这里使用晶振12M,精确延时请使用汇编
9 u s$ U) I+ \: j------------------------------------------------*/
( ]2 n8 `0 e5 g \+ J. Q6 ]void DelayMs(unsigned char t)% a2 j6 `# D! r' F; n1 \ ?
{2 m& R3 y: `$ D8 L
$ a+ g0 C7 |, }* ]- U
while(t--)
9 F3 Q/ W2 d1 w- P8 ^( b8 ]% W {
. |8 y8 n6 [9 ~# t, r //大致延时1mS
2 G+ C2 r$ P' O( Q3 t. k DelayUs2x(245);' R4 l- U' ^$ B2 d7 C
DelayUs2x(245);
, T( f6 A: f6 S/ C% m7 E }4 U9 v# {8 [) v7 w
}" c6 D0 r! |4 K% ^/ O2 B3 q
/*------------------------------------------------
, `& ] S( V; g 主函数
& D$ D G! M! v! ~------------------------------------------------*/7 E, W# A; [3 `% |! h6 M
main()8 D" e4 Y a# Q
{: ?" \( p6 a* `7 T9 y1 i% C3 i
unsigned int i=512;//旋转一周时间
/ s" E& k; o( x1 a' `; M Speed=8;! s3 _/ t2 e; P! S) |6 _0 f; \
Coil_OFF
+ I+ B' Y5 w( A. K8 k1 H while(i--) //正向) s: t! K6 \! L S% C
{
$ q" [* j# `4 X p1 X3 u Coil_A1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
. F% H! p7 f5 c k4 z, ]5 U DelayMs(Speed); //改变这个参数可以调整电机转速 ,3 w( u- d# O+ L; h: \; [
//数字越小,转速越大,力矩越小! L' X; r3 Y' j+ l
Coil_B1- D. U! A4 y& {
DelayMs(Speed);
' A: t) U; s" A5 f Coil_C1" Q! D7 ?; t8 P0 }, ~4 f7 U6 l
DelayMs(Speed);
. Y6 g; o4 F0 y. u8 n# q Coil_D1
5 S3 h3 u* z! n. {; k. y DelayMs(Speed);
8 m. y9 V9 c( c3 e- F' b }* w. h! n7 _- a' b w' @5 i+ v9 \* f- x
Coil_OFF
' S9 o4 d4 d' `- S7 a, t i=512;7 B9 G* d$ o3 _' ~: U+ T$ T7 n0 r- k
while(i--)//反向 r+ Q# \0 D& J" y' d0 z8 C& U5 c
{1 J7 }, N" m* u# M
Coil_D1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
. h4 n& k, z {3 p; b DelayMs(Speed); //改变这个参数可以调整电机转速 ,
8 R V4 W |5 S9 C //数字越小,转速越大,力矩越小
4 _1 k2 [# G+ D0 O. e- R1 L Coil_C1
* g$ Y. d% d; r% P! r1 f9 m* O DelayMs(Speed);
, S3 R4 t+ B' [- z9 Y Coil_B1. O9 N( T& B: X% ?/ P" S n @
DelayMs(Speed);
. v7 c. y: @+ C1 q7 d: |- P Coil_A1
; C- }8 n F x% ~% ^. T6 O
" {- d) e: C9 e/ e…………限于本文篇幅 余下代码请从论坛下载附件…………
. Q( N! D- W1 w! @- \
# H6 B; G% I8 j; ]. Z* b' m. Y- N7 [( ^/ Y
: z# l2 C a- L x1 K+ s# D |
|