|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
C51步进电机转动原理7 x4 H" a! x; k; s3 \" r
% o2 \( m1 B9 o1 c% ~
" g y: X8 O+ t0 h+ @; _
/*-----------------------------------------------
' o8 t4 H+ N2 j# y 名称:步进电机
8 }1 i; G+ _5 S0 | 修改:无# A8 [% U8 ]8 A
内容:本程序用于测试4相步进电机常规驱动 使用1相励磁2 J) O, R- i" O2 C+ M/ B
$ O9 [1 Z6 y. o) y' [5 ^ ------------------------------------------------*/3 {3 M8 `$ G- w& b0 \) d6 l) P
4 ^; T: r7 D7 N! W- J#include <reg52.h>; h7 D5 x7 D; e
* ~9 o: E8 ?" P& w
' _% C" G# h, X
7 ?# g+ ]3 y3 S. {- n {( `+ Ksbit A1=P1^0; //定义步进电机连接端口
- Q$ R# `' d4 V U) Jsbit B1=P1^1;
9 J! D" \' ~, I/ R' ysbit C1=P1^2;
: R2 F: q$ Q# Q1 psbit D1=P1^3;
8 U' R/ w: a: f2 F/ {& \/ y" ?( }* o2 h! {
( U3 w, O: y! z' i& ]$ w8 C2 b
#define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
: J5 a) e# E3 V* M: m Y$ g- h6 n" I#define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电; V: }% R8 ], ^ ]4 B
#define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电; y; h, A6 A, {& {1 h- M
#define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
% x- g# D) F' ?$ Q0 o& K#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电% @3 e) I: g$ E* p2 |4 x
6 x U4 h: c; U U2 j( j( T* @; Bunsigned char Speed;6 c$ M5 o9 b. |7 T
/*------------------------------------------------
# i: t9 S8 }, F1 a6 ?0 l$ p uS延时函数,含有输入参数 unsigned char t,无返回值
6 Z) B* M1 B7 m( j4 _- V* n unsigned char 是定义无符号字符变量,其值的范围是
( o! Q4 S+ U9 |0 V 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
- F" K6 h9 }' k$ V, m 长度如下 T=tx2+5 uS
" }- }5 v( w" w- n, d: t------------------------------------------------*/
% P1 `8 P- R: Y" p- l% D. svoid DelayUs2x(unsigned char t); t8 b, r1 H9 ?, I5 a
{ ( T5 y) j* B. g8 q/ u
while(--t);- J) F8 _& D: N c3 l
}% n: ?+ j, h/ x2 b
/*------------------------------------------------, j# e7 g+ ]* Q6 X1 e+ k* a$ N/ R
mS延时函数,含有输入参数 unsigned char t,无返回值# v& k- | `- z9 X
unsigned char 是定义无符号字符变量,其值的范围是
) R( L) x3 o4 O/ }: z, X7 D. l 0~255 这里使用晶振12M,精确延时请使用汇编
_& ?8 c% a9 N6 p H, v3 C------------------------------------------------*/2 m) j( y# b( y' L. u6 w; b8 c2 n
void DelayMs(unsigned char t)! ~9 E0 Z. z" l' @8 v9 V$ x' t
{; ]% t: C9 R3 \. y3 V2 z* i/ \" |
9 [3 T+ G! Y- D* X% I9 K9 i while(t--)
( q& b! n# F% R) z5 G { {
" Q0 W9 {$ X, ~' @7 U: H //大致延时1mS7 `& I4 p; p$ \
DelayUs2x(245);+ A8 _, Y; j& j3 N+ f
DelayUs2x(245);
+ T# [5 U+ E+ I# K }; F" ^/ O0 s3 N1 G# T0 s
}7 C( R, X( Z! s9 k' v+ _
/*------------------------------------------------
5 ]- Y" n5 G; w4 D 主函数7 ]/ U! v" E9 m( Y0 U9 \# ?8 P
------------------------------------------------*/ l2 i: |% n: f" D! X
main()
8 ~& `$ L: Z* L2 ?7 B- l% f U) A. C+ T{
- H& c* \" }. e# |4 s, e1 ] //unsigned int i=64*16; //转2周停止0 d. w/ l" S4 M$ W' C/ L! c
Speed=5; //调整速度
3 Z/ l/ `" A! n while(1)
! S% g7 Y( y1 E, u9 G8 L* L7 } { + F, [9 _+ p# C
Coil_A1 //遇到Coil_A1 用{A1=1;B1=0;C1=0;D1=0;}代替
$ r4 o. E' a. v& u( Q DelayMs(Speed); //改变这个参数可以调整电机转速 ,
* q$ [5 f) z( S/ v //数字越小,转速越大,力矩越小
; m2 e- J* W8 E/ T0 w Coil_B1
/ j, k! X9 U& T! v& v$ \$ e DelayMs(Speed);
# N2 C# S" M3 w Coil_C1
/ Z5 ^# i p0 q DelayMs(Speed);
/ m0 C Y0 A* q Coil_D1& F; Q4 n+ ~! _6 C/ n
DelayMs(Speed);# t. z* @4 u L* ~+ Z1 t7 u1 E
}0 p( w- u! k! p6 b
}
2 h; R: l' [) `8 I+ {( _; P8 ^. t0 {% O& ?; w
' f/ n# N6 y) c2 E* Z2 g P
) H' {' t" ^. D, ~: D
|
|