Control de Motor paso a paso a través de un PIC
1.
#include <16F877.h>
2.
#use de delay(clock=1000000)
3. #fuses N!"$N%&'$N*%$N"'+,-$%, .
in/ e/ado
.
oid 4ain()
6. 5 e/ado=300 N '' *& ' 9+: *':"" "' -:& "' 9& 7. !;:'(inu/(%:N0)) :N::: %:N' 'N *& +?$ %& @,' ' 9& N ' 9,'* 8.
5
A.
,%,!(%:N+0)
10.
,%,!(%:N+1)
11.
,%,!(%:N+2)
12.
,%,!(%:N+3)
13. 1.
B
1.
do5
16. 16.
if(C if(Cin inu u/( /(i in n0 0)D )DD( D(in inu u/( /(i in nc1 c1)) ))) ) -:& 'N ,N 'N:" (-:& 1)
17.
5
18.
,%,!(%:N+0)
1A.
,%,;:-;(%:N+1)
20.
,%,!(%:N+2)
21.
,%,!(%:N+3)
22. delay4s(e/ado) Bif(C inu/(in0)DD(inu/(inc1))) 'N ,N 'N:" (-:& 1) 23.
5
2.
,%,!(%:N+0)
2.
,%,!(%:N+1)
26.
,%,;:-;(%:N+2)
27.
,%,!(%:N+3)
28. delay4s(e/ado) Bif(C inu/(in0)DD(inu/(inc1))) 'N ,N 'N:" (-:& 1) 2A.
-:&
5
30.
,%,!(%:N+0)
31.
,%,!(%:N+1)
32.
,%,!(%:N+2)
33.
,%,;:-;(%:N+3)
-:&
3. delay4s(e/ado) Bif(C inu/(in0)DD(inu/(inc1))) -:& 'N ,N 'N:" (-:& 1) 3.
5
36.
,%,;:-;(%:N+0)
37.
,%,!(%:N+1)
38.
,%,!(%:N+2)
3A.
,%,!(%:N+3)
0. delay4s(e/ado) B if(inu/(in0)DD(Cinu/(inc1))) -:& 'N ,N 'N:" (-:& 2) 1.
5
2.
,%,;:-;(%:N+0)
3.
,%,!(%:N+1)
.
,%,!(%:N+2)
.
,%,!(%:N+3)
6. delay4s(e/ado) B if(inu/(in0)DD(Cinu/(inc1))) -:& 'N ,N 'N:" (-:& 2) 7.
5
8.
,%,!(%:N+0)
A.
,%,!(%:N+1)
0.
,%,!(%:N+2)
1.
,%,;:-;(%:N+3)
2. delay4s(e/ado) B if(inu/(in0)DD(Cinu/(inc1))) -:& 'N ,N 'N:" (-:& 2) 3.
5
.
,%,!(%:N+0)
.
,%,!(%:N+1)
6.
,%,;:-;(%:N+2)
7.
,%,!(%:N+3)
8. delay4s(e/ado) B if(inu/(in0)DD(Cinu/(inc1))) -:& 'N ,N 'N:" (-:& 2) A.
5
60.
,%,!(%:N+0)
61.
,%,;:-;(%:N+1)
62.
,%,!(%:N+2)
63.
,%,!(%:N+3)
6.
delay4s(e/ado) BBEhile(/ue)
6.
B
66.
Pr ogr amaut i l i z ado:CCSCompi l er Cont r ol dev e l oc i dadpar aunMot orPas oaPas opar ael
PI C16f 877a
#i nc l ud e<16 F877 A. h> #devi ceadc=8 #FUSESNOWDT ,RC,PUT ,NOPROTECT , NODEBUG, NOBROWNOUT ,NOL VP,NOCPD,NOWRT #us edel a y ( c l oc k =20000000) #or g0x 1f 00, 0x 1fff { } #bui l d( r es et =0x 04) #use r s 232( baud=9600, par i t y =N, x mi t =PI N_C6, r c v =PI N_C7, bi t s = 8 ) #defi net 1del a y _ms ( 200) ; #i nc l ude / / #dev i c eI CD=TRUE / / #f us esHS, NOWDT , NOPROTECT , NOL VP / / #us edel ay ( c l oc k =20000000) / / #us e r s 232( baud=9600, par i t y =N, x mi t =PI N_C6, r c v =PI N_C7, bi t s = 8 ) #useFAST_I O( B)
#useFAST_I O( C) #by t eFASES=0x06 i ntv el oc i dad=300; v oi dGi r oDer ec ha( ) { out put _b( 0x 30) ;/ / pas o1 del ay _ms ( v el oc i dad) ; out put _b( 0x 60) ;/ / pas o2 del ay _ms ( v el oc i dad) ; out put _b( 0x c 0) ;/ / pas o3 del ay _ms ( v el oc i dad) ; out put _b( 0x 90) ;/ /pas o4 del ay _ms ( v el oc i dad) ; } v oi dGi r oI z qui er da( ) { FASES=0b001100;/ / paso1 del ay _ms ( v el oc i dad) ; FASES=0b001001;/ / paso2 del ay _ms ( v el oc i dad) ; FASES=0b000011;/ / paso3 del ay _ms ( v el oc i dad) ; FASES=0b001100;/ /paso4 del ay _ms ( v el oc i dad) ;
} v oi dmai n( v oi d) { c harv al or =0; SET_TRI S_B( 0x00) ; whi l e( TRUE) { i f ( k bhi t ( ) ) v al or =get c ( ) ; s wi t c h( v al or ) { c as e' a' : / / mot orpar ado FASES=0b000000; b r e a k ; c as e' b' :/ / Mar c haManual Lent aI z qui er da v el oc i dad=10; Gi r oI z qui er da( ) ; b r e a k ; c as e' c ' :/ / Mot orpar ado FASES=0b000000; b r e a k ;
c as e' d' :/ / Mar c hamanual r ápi dai z qui er da v el oc i dad=3; Gi r oI z qui er da( ) ; b r e a k ; c as e' e' :/ / Mot orpar ado FASES=0b000000; b r e a k ; c as e' f ' :/ / Mar c hamanual l ent ader ec ha v el oc i dad=10; Gi r oDer ec ha( ) ; b r e a k ; c as e' g' :/ / Mot orpar ado FASES=0b000000; b r e a k ; c as e' h' :/ / Mar c hamanual r ápi dader ec ha v el oc i dad=3; Gi r oDer ec ha( ) ; b r e a k ;
c as e' A' :/ / Mar c haAut omát i c al ent ai z qui er da v el oc i dad=10; Gi r oI z qui er da( ) ; b r e a k ; c as e' B' :/ / Mar c haAut omát i c al ent ai z qui er da v el oc i dad=10; Gi r oI z qui er da( ) ; b r e a k ; c as e' C' :/ / Mar c haAut omát i c ar ápi dai z qui er da v el oc i dad=3; Gi r oI z qui er da( ) ; b r e a k ; c as e' D' :/ / Mar c haAut omát i c ar ápi dai z qui er da v el oc i dad=3; Gi r oI z qui er da( ) ; b r e a k ; c as e' E' :/ / Mar c haaut omát i c al ent ader ec ha
v el oc i dad=10; Gi r oDer ec ha( ) ; b r e a k ; c as e' F' :/ / Mar c haaut omát i c al ent ader ec ha v el oc i dad=10; Gi r oDer ec ha( ) ; b r e a k ; c as e' G' :/ / Mar c haaut omát i c ar ápi dader ec ha v el oc i dad=3; Gi r oDer ec ha( ) ; b r e a k ; c as e' H' :/ / Mar c haaut omát i c ar ápi dader ec ha v el oc i dad=3; Gi r oDer ec ha( ) ; b r e a k ; c as e' n' : b r e a k ; def aul t : v el oc i dad=15;
b r e a k ; } } }
zona de codigo AVR Studio 4
PROGRAMADO: jose yovany rojas tecnologo BIOMDI!A S"A !# $graduacion %&'($ S#)DIA"# I"G"IRIA *)"DA!IO" )"IVRSIDAD !"#RA+ $activo$ ,$sena !# -io.edica %/,&0,%&'%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$,
1include 2stdio35 ,, +i-reria standar 1include 2avr,io35 ,, +i-reria 6ara usar 6uertos de entrada y salidas 1include 2util,delay35 ,, +i-reria 6ara retardos int .ain 7void8 9 DDRD &-''''&'&&; POR#D&-&&&&&&''; DDRB &-&&'''&&';
car A>B; car i;
,, declaran los -it < al 4 co.o salida; & y ' co.o entrada ,, activa.os resistencias 6ull=u6 en los -it ' y &
,,varia-le de ti6o caracter
?ile7'8 9 API"D @ &-&&&&&&&'; ,, -it ' activa 6ulsador ' 6ind es no.-rar el 6uerto BPI"D @ &-&&&&&&'&; ,, -it % activa 6ulsador % or7i&;i2'';i8,, codigo a re6etir & a ''veces i 7A&8 ,,sentecia i 6ara giro acia sentido del reloj 7dereca8
9 POR#D&-'&&&&&''; ,, 6aso ' CdelayC.s7%&&8;
POR#B&-&&&&&&&'; CdelayC.s7%&&8;
,,!digo del dEgito '
POR#D&-''&&&&''; ,, 6aso % CdelayC.s7%&&8;
POR#B&-&&&&'&&&; CdelayC.s7%&&8;
,,!digo del dEgito %
POR#D&-&'&&&&''; ,, 6aso ( CdelayC.s7%&&8; POR#B&-&&&&'&&';
,,!digo del dEgito (
CdelayC.s7%&&8;
POR#D&-&''&&&''; ,, 6aso 4 CdelayC.s7%&&8; POR#B&-&&&'&&&&; CdelayC.s7%&&8;
,,!digo del dEgito 4
POR#D&-&&'&&&''; ,, 6aso F CdelayC.s7%&&8; POR#B&-&&&'&&&'; CdelayC.s7%&&8;
,,!digo del dEgito F
POR#D&-&&''&&''; ,, 6aso CdelayC.s7%&&8; POR#B&-&&&''&&&; CdelayC.s7%&&8;
,,!digo del dEgito
POR#D&-&&&'&&''; CdelayC.s7%&&8;
,, 6aso <
POR#B&-&&&''&&'; CdelayC.s7%&&8;
,,!digo del dEgito <
POR#D&-'&&'&&''; CdelayC.s7%&&8;
,, 6aso /
POR#B&-&&'&&&&&; CdelayC.s7%&&8;
,,!digo del dEgito /
H or7i&;i2'';i8 ,,le deci.os ue re6ita el ciclo '% veces i 7B&8 ,,sentecia i 6ara giro acia sentido antiorario del reloj 7izuierda8 9
POR#D&-'&&'&&''; CdelayC.s7%&&8;
,, 6aso /
POR#B&-&&'&&&&&; CdelayC.s7%&&8;
,,!digo del dEgito /
POR#D&-&&&'&&''; CdelayC.s7%&&8;
,, 6aso <
POR#B&-&&&''&&'; CdelayC.s7%&&8;
,,!digo del dEgito <
POR#D&-&&''&&''; ,, 6aso CdelayC.s7%&&8; POR#B&-&&&''&&&; CdelayC.s7%&&8;
,,!digo del dEgito
POR#D&-&&'&&&''; ,, 6aso F CdelayC.s7%&&8; POR#B&-&&&'&&&'; CdelayC.s7%&&8;
,,!digo del dEgito F
POR#D&-&''&&&''; ,, 6aso 4 CdelayC.s7%&&8;
POR#B&-&&&'&&&&; CdelayC.s7%&&8;
,,!digo del dEgito 4
POR#D&-&'&&&&''; ,, 6aso ( CdelayC.s7%&&8; POR#B&-&&&&'&&'; CdelayC.s7%&&8;
,,!digo del dEgito (
POR#D&-''&&&&''; ,, 6aso % CdelayC.s7%&&8;
POR#B&-&&&&'&&&; CdelayC.s7%&&8;
,,!digo del dEgito %
POR#D&-'&&&&&''; ,, 6aso ' CdelayC.s7%&&8;
POR#B&-&&&&&&&'; CdelayC.s7%&&8;
,,!digo del dEgito '
H ,, in i de el .otor else 9 POR#D&-&&&&&&''; ,, a6agar todo si no cu.6le la condicion H ,, H ,, in .ain H