reemplazar 2 L297 con un PIC16F84A

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...

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
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.
 
Última edición:
para los que no tienen el compilador, les dejo el archivo hex*, para que lo suba directo al pic.
he revisado mi teoria, y no hay errores, en un timepo, modificare un poco el programa y agregare la opcion de desabilitado, para ahorrar energia.

*el gestionador de archivos no me dejo subirlo directamente, asi que lo he subido pero comprimido..
 

Adjuntos

  • programa pic L297.rar
    1.5 KB · Visitas: 64
Atrás
Arriba