|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
C51单片机-步进电机正反转 源程序+ |; A; ^# `9 b: f
2 Z$ A6 [, ]( n3 `* S7 {
8 ]. W: t2 A( o5 X: _0 A' x* D单片机源程序:
( {2 |' K8 c0 x; U: ~ h+ a9 X/*------------------------------------------------ r7 ?. [" l3 u* Y! V" h+ K) G8 p
名称:步进电机6 o6 A- L% h; o/ j
修改:无8 X+ H/ H4 P, z8 k( U7 \. w
内容:本程序用于测试4相步进电机常规驱动 含正反转 使用1相励磁
- p6 \$ }6 P0 C# E2 }4 r y& G) p' D1 z+ H
* n8 A, a" F' L2 { ------------------------------------------------*/
9 s. n( z1 K% n5 {. }3 A/ i$ e* H( z6 K9 k$ n; S5 ]
#include <reg52.h>
+ C4 C9 n P4 _ ?* X7 V
# T2 M7 z8 O6 a7 }6 N/ E
2 O# e! ^7 h& J7 |0 Y* Q: R( ^% P. h+ C& q
sbit A1=P1^0; //定义步进电机连接端口
& }' ~5 F8 `6 I- ]: jsbit B1=P1^1;
! ?! l: j% n$ P- a' d" }sbit C1=P1^2;
! u+ Z: `1 c$ @, [" z2 Asbit D1=P1^3;
( e9 H3 x; E4 i4 c1 B+ Z" M
% A$ n- B/ ]' z- a% p. m
! K% c4 ^2 s% s, X, h2 K#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
( i! a5 c$ q- | h6 L#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
# c9 h9 D, L; V6 c* w$ C$ H#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
- s8 v3 ^0 v$ g#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电- q# m. w- n8 m0 x( z6 h' V \
#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
' ?. T: u2 V& G" j! V0 b#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电; W* G( M/ o4 _& b
#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电6 i9 C r" e0 X
#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电6 d& T+ G9 g! O) P& [/ b; A
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电2 L6 T' r; b5 Z: J
. h7 {$ q2 z8 L1 Aunsigned char Speed;; J6 i, ~+ V, L9 ]/ }# c. `
/*------------------------------------------------
2 y1 ]: t8 {3 V% c9 ^ uS延时函数,含有输入参数 unsigned char t,无返回值0 l& W" V5 U# m5 |) o
unsigned char 是定义无符号字符变量,其值的范围是
( d- [4 {- J9 b+ E" c* D | 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
- w! W) x0 k6 R# X0 ?$ f 长度如下 T=tx2+5 uS
- T5 W, h9 ]+ f) m H7 m" l9 \------------------------------------------------*/
' N% n, h: I" \ L5 H y$ @& uvoid DelayUs2x(unsigned char t)8 u$ ^$ s" J d+ x6 o) D+ M# v
{
$ u0 A/ O" ], N& Z& s r$ b0 D' X while(--t);8 ~8 P3 @( i# ?0 {( T O
} [8 A; @% O2 y) K7 K* o, e/ k
/*------------------------------------------------
4 Y. Y \& ~% ?9 Z mS延时函数,含有输入参数 unsigned char t,无返回值) R. f! z" A: `* D4 H, O( b. ^
unsigned char 是定义无符号字符变量,其值的范围是
& q4 y$ i3 T" G) [ 0~255 这里使用晶振12M,精确延时请使用汇编- m( F0 b4 a! m. J4 k$ v
------------------------------------------------*/5 N; M: Z# y* L* r: u6 {
void DelayMs(unsigned char t)& w Z+ Y$ U y- b6 s
{" s9 {, b8 M( C# E3 R# ^
* i. P# u9 x. U( L }
while(t--)3 F/ S0 H2 K- R; o- E( s. p ?
{
' b1 Q F( d& a, {5 ^' ] //大致延时1mS" n2 O ]9 L- z9 ?3 Y
DelayUs2x(245);# ], m$ c5 G8 q! p0 h- [% a
DelayUs2x(245);6 t4 T0 L) P& K# ~' v) J
}2 w* ?9 v* s7 ?! u$ Y S0 ~
}, u, d; Z, V/ B( I( s; T) w. k1 p
/*------------------------------------------------
) G8 n; n8 ^( m4 W5 N 主函数
5 K/ o$ `' F+ i* U$ b5 j7 r------------------------------------------------*/
7 g; { B6 M- E( D3 Y% u- cmain()$ |' ^0 [9 E" Y5 M# T+ T0 z
{
# H9 b! l0 @2 {0 o8 [' i2 u8 c unsigned int i=512;//旋转一周时间
! k; v7 ^4 G9 x5 G- `2 u Speed=8;
9 r4 P9 O8 G$ K2 Z Coil_OFF
3 u7 t( D! a4 [1 G6 L% c while(i--) //正向
) _! n1 Y4 C: W. F; G( }$ \) d { 3 h1 ~ F1 a4 a
Coil_A1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
9 s; D; g; T O) X/ ^. ]8 A3 M7 C& _& _ DelayMs(Speed); //改变这个参数可以调整电机转速 ,( W; ^; Z8 ?5 X+ c8 f
//数字越小,转速越大,力矩越小
2 D! `. ?" S9 {; w5 A1 R Coil_B1
* P' _% ?& U0 G9 A DelayMs(Speed);+ S+ R2 d% H! r. k2 Z
Coil_C1/ H+ y* ~/ D+ N" ?& k% W
DelayMs(Speed);
& e' n* h; e# ^! ]: U Coil_D17 A$ Z+ y' d: _% r. \" `8 p
DelayMs(Speed);
5 O4 |' [* j, c! e3 d6 x }) v8 U; Y' z% R/ o& l' z' K8 w- G
Coil_OFF1 }/ ^( n6 `+ n7 K
i=512;& l6 x+ o4 x1 g1 m" ^
while(i--)//反向# l3 ]9 p4 Z/ V7 B
{) l& l( d1 q9 H) f
Coil_D1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
+ x2 U3 n. w2 d H DelayMs(Speed); //改变这个参数可以调整电机转速 ,# W9 b( _! f! p2 E: T# c1 Q$ c
//数字越小,转速越大,力矩越小
. \2 t2 c+ w6 W- E, g$ U Coil_C1 }* d( B. t8 s* h
DelayMs(Speed);
7 e4 q4 j. O7 M1 C Coil_B1
* b6 G7 ~) z3 e! W2 W DelayMs(Speed);( n3 r$ V# c7 |$ Z* `
Coil_A1
# h! \0 f1 o( k/ L1 Q
+ b9 I: Y% Q9 T…………限于本文篇幅 余下代码请从论坛下载附件…………
5 _" r7 a% m4 b5 h$ `- w
- M$ b: j0 S4 m# X' m5 _; s2 X- A$ j/ }
|
|