hola, quiero reemplazar 3 L297 con pics, porque he consultado por ellos y cada uno cuesta el doble que un PIC16F84A, por lo cual decidi utilizar pics en vez de los L297, si se preguntan, es para controlar los motores de una CNC que estoy construyendo...
el pic esta predeterminado a utilizar en modo HALF, o mejor dicho, en 8 etapas en vez de 4..
en fin, aqui les dejo el codigo, esta en Basic del PIC Simulator IDE, si alguien entiende este lenguaje, que me corrija...
cada pic reemplaza solo 2 L297.
lo que me preocupa es que los datos que son puestos en las variables paso1 y paso2 sean incorrectos, yo me he basado en el diagrama de tiempos de la hoja de datos, especificamente en la pagina 5 donde dice HALF STEP MODE... la hoja de datos en cuestion esta alojada en el siguiente enlase http://www.datasheetcatalog.org/datasheet/stmicroelectronics/1334.pdf
anotaciones a parte: todas usando un cristal de 20.0MHz
- en 12.6 µs el sistema esta listo para arrancar
- en 2.4 µs el pic esta listo para evaluar otra vez las lineas de reloj si se mantienen en 1
- en 11.4 µs aprox. el pic demora en completar el poroceso de avance o retroceso de 1 paso
el codigo esta a dispocicion del que quiera usarlo, pero recuerden que no esta probado, asi que no lo usen hasta que este probado, o que alguien analize mi codigo y me diga que esta correcto.
el pic esta predeterminado a utilizar en modo HALF, o mejor dicho, en 8 etapas en vez de 4..
en fin, aqui les dejo el codigo, esta en Basic del PIC Simulator IDE, si alguien entiende este lenguaje, que me corrija...
Código:
'programa para reemplazar las funciones de los L297
'el puerto b seran las salidas, y el puerto a seran las entradas
'los pines del 0 al 3 del puerto b son del motor 1
'los pines del 4 al 7 del puerto b son del motor 2
'el pin 0 del puerto a es el control de direccion del motor 1
'el pin 1 del puerto a es el control de reloj del motor 1
'el pin 2 del puerto a es el control de direccion del motor 2
'el pin 3 del puerto a es el control de reloj del motor 1
'el pin PORTB.0 es equivalente al pin D del L297 del motor 1
'el pin PORTB.1 es equivalente al pin C del L297 del motor 1
'el pin PORTB.2 es equivalente al pin B del L297 del motor 1
'el pin PORTB.3 es equivalente al pin A del L297 del motor 1
'el pin PORTB.4 es equivalente al pin D del L297 del motor 2
'el pin PORTB.5 es equivalente al pin C del L297 del motor 2
'el pin PORTB.6 es equivalente al pin B del L297 del motor 2
'el pin PORTB.7 es equivalente al pin A del L297 del motor 2
Config PORTB = Output
Config PORTA = Input
Symbol dir1 = PORTA.0
Symbol dir2 = PORTA.2
Symbol clk1 = PORTA.1
Symbol clk2 = PORTA.3
Dim paso1(8) As Byte
Dim npaso1 As Byte
Dim paso2(8) As Byte
Dim npaso2 As Byte
Dim puerto As Byte
paso1(0) = 5
paso1(1) = 1
paso1(2) = 9
paso1(3) = 8
paso1(4) = 10
paso1(5) = 2
paso1(6) = 6
paso1(7) = 4
paso2(0) = 5
paso2(1) = 1
paso2(2) = 9
paso2(3) = 8
paso2(4) = 10
paso2(5) = 2
paso2(6) = 6
paso2(7) = 4
npaso1 = 0
npaso2 = 0
'inicio del programa
inicio:
If clk1 = 1 Then
If dir1 = 1 Then
Goto motor1mas
Endif
If dir1 = 0 Then
Goto motor1menos
Endif
Endif
If clk2 = 1 Then
If dir2 = 1 Then
Goto motor2mas
Endif
If dir2 = 0 Then
Goto motor2menos
Endif
Endif
Goto inicio
motor1mas:
npaso1 = npaso1 + 1
If npaso1 = 8 Then
npaso1 = 0
Endif
puerto = paso1(npaso1)
PORTB.0 = puerto.0
PORTB.1 = puerto.1
PORTB.2 = puerto.2
PORTB.3 = puerto.3
aunno10:
If clk1 = 0 Then
Goto inicio
Else
Goto aunno10
Endif
motor1menos:
npaso1 = npaso1 - 1
If npaso1 = 255 Then
npaso1 = 7
Endif
puerto = paso1(npaso1)
PORTB.0 = puerto.0
PORTB.1 = puerto.1
PORTB.2 = puerto.2
PORTB.3 = puerto.3
aunno11:
If clk1 = 0 Then
Goto inicio
Else
Goto aunno11
Endif
motor2mas:
npaso2 = npaso2 + 1
If npaso2 = 8 Then
npaso2 = 0
Endif
puerto = paso2(npaso2)
PORTB.4 = puerto.0
PORTB.5 = puerto.1
PORTB.6 = puerto.2
PORTB.7 = puerto.3
aunno20:
If clk2 = 0 Then
Goto inicio
Else
Goto aunno20
Endif
motor2menos:
npaso2 = npaso2 - 1
If npaso2 = 255 Then
npaso2 = 7
Endif
puerto = paso2(npaso2)
PORTB.4 = puerto.0
PORTB.5 = puerto.1
PORTB.6 = puerto.2
PORTB.7 = puerto.3
aunno21:
If clk2 = 0 Then
Goto inicio
Else
Goto aunno21
Endif
End
lo que me preocupa es que los datos que son puestos en las variables paso1 y paso2 sean incorrectos, yo me he basado en el diagrama de tiempos de la hoja de datos, especificamente en la pagina 5 donde dice HALF STEP MODE... la hoja de datos en cuestion esta alojada en el siguiente enlase http://www.datasheetcatalog.org/datasheet/stmicroelectronics/1334.pdf
anotaciones a parte: todas usando un cristal de 20.0MHz
- en 12.6 µs el sistema esta listo para arrancar
- en 2.4 µs el pic esta listo para evaluar otra vez las lineas de reloj si se mantienen en 1
- en 11.4 µs aprox. el pic demora en completar el poroceso de avance o retroceso de 1 paso
el codigo esta a dispocicion del que quiera usarlo, pero recuerden que no esta probado, asi que no lo usen hasta que este probado, o que alguien analize mi codigo y me diga que esta correcto.
Última edición: