# Control de motor a pasos mediante programa en Visual C++



## ekipo (Oct 30, 2007)

Hola, alguien podría decirme , cómo hacer un código para controlar el giro de un motor a pasos bipolar mediante un programa hecho en Visual C++ lo que pasa es que ya tengo el circuito armado pero en programación nomas no se me da por eso quisiera ver si alguin me podría ayudar se los agradecería. lo que pasa es que ya busqué en el foro y no encontre algo relacionado on lo que busco,
de antemano gracias.


----------



## EinSoldiatGott (Oct 31, 2007)

Hola, en el mensaje privado que me envió no me había dicho que es un motor a pasos, imaginé que era uno de directa.

Con un bipolar va a ocupar unas cuantas cosas más de material, y el relay no le va a servir.

En este link http://www.todorobot.com.ar/información/tutorial stepper/stepper-tutorial.htm

Explican como hacerlo.


> Bipolar: Estos tiene generalmente cuatro cables de salida (ver figura 1). Necesitan ciertos trucos para ser controlados, debido a que requieren del cambio de dirección del flujo de corriente a través de las bobinas en la secuencia apropiada para realizar un movimiento.          En figura 3 podemos apreciar un ejemplo de control de estos motores mediante el uso de un puente en H (H-Bridge). Como se aprecia, será necesario un H-Bridge por cada bobina del motor, es decir que para controlar un motor Paso a Paso de 4 cables (dos bobinas), necesitaremos usar dos H-Bridges iguales al de la figura 3 . El circuito de la figura 3 es a modo ilustrativo y no corresponde con exactitud a un H-Bridge. En general es recomendable el uso de H-Bridge integrados como son los casos del L293 (ver figura 3 bis).















Existen tres secuencias posibles para este tipo de motores, las cuales se detallan a continuación. Todas las secuencias comienzan nuevamente por el paso 1 una vez alcanzado el paso final (4 u 8). Para revertir el sentido de giro, simplemente se deben ejecutar las secuencias en modo inverso.





> Secuencia Normal: Esta es la secuencia más usada y la que generalmente recomienda el fabricante. Con esta secuencia el motor avanza un paso por vez y debido a que siempre hay al menos dos bobinas activadas, se obtiene un alto torque de paso y de retención.
> I.   1100
> II.  0110
> III. 0011
> IV. 1001



En esa misma página explican como identificar los cables.

La secuencia más simple es:

CICLO sentido1
{

 0001
 0010
 0100
 1000
}

CICLO SENTIDO 2
{

1000
0100
0010
0001
}


en código para C sería


```
if(sentido==0)
				{
				if(bit==16)
					bit=1;
				outportb(para,bit);
				delay(velocidad);
				bit=bit*2;
				}
			else
				{
				if(bit==16)
					bit=8;
				if(bit==1/2)
					bit=8;
				outportb(para,bit);
				delay(velocidad);
				bit=bit/2;
				}
```

Lo más complicado de su trabajo es el circuito y no tanto la programación.

Adjunto le dejo uno que yo hice para controlar un motor, puede variar la velocidad, sentido de giro y arranque y paro.

Saludos


----------



## Luna07 (Feb 24, 2020)

Con que programa lo compilaste tengo Dev C++ y da error en las funciones


----------



## D@rkbytes (Feb 24, 2020)

Prueba con Turbo C.
El que adjunto funciona en cualquier Windows pero los ejecutables creados solo funcionarán en sistemas x86 porque soporta 16 bits.


----------



## Dr. Zoidberg (Feb 24, 2020)

Mejor usá el Code::Blocks, que es un entorno soporta cualquier compilador, aunque viene con el GCC por default. Yo lo he usado con el Open Watcom y no tuvo ningun problema.
El GCC compila casi cualquier cosa, pero la implementacion en el Dev C++ siempre tuvo algunos problemas...


----------



## D@rkbytes (Feb 24, 2020)

Dr. Zoidberg dijo:


> Mejor usá el Code::Blocks, que es un entorno soporta cualquier compilador, aunque viene con el GCC por default.


Creo que va a ser más complicado, porque también se generan errores al compilar.

Posiblemente se necesite instalar otra cosa, pero sería sumarle más los 250 Mb de la instalación. 
El Turbo C apenas ocupa 15 Mb de instalación y compila sin problemas a la primera.

Pero en sistemas x64 se tiene el problema de incompatibilidad.

Esto se solucionaría con una Máquina Virtual, pero a mi punto de vista sería mejor crear algo más actual.


----------



## Dr. Zoidberg (Feb 24, 2020)

D@rkbytes dijo:


> Creo que va a ser más complicado, porque también se generan errores al compilar.
> Ver el archivo adjunto 187021
> Posiblemente se necesite instalar otra cosa, pero sería sumarle más los 250 Mb de la instalación.
> El Turbo C apenas ocupa 15 Mb de instalación y compila sin problemas a la primera.
> ...


El problema son las funciones gotoxy y outportb que son propias de Borland y no son reconocidas por otros compiladores a menos que las reemplaces por sus equivalentes, que es bastante simple.
El problema del Turbo C es que no va a tener acceso a los ports I/O en ningun sistema operativo moderno que virtualice el hardware, por lo que ese codigo solo corre en DOS o FreeDOS sobre un procesador real y no virtual.


----------



## D@rkbytes (Feb 24, 2020)

Por lo tanto, la mejor opción sería...


D@rkbytes dijo:


> crear algo más actual.


----------



## Dr. Zoidberg (Feb 24, 2020)

O crear un device driver que hable con el hatdware y se acceda en espacio de usuario...


----------



## cosmefulanito04 (Feb 25, 2020)

En el 7 creo que todavía podías acceder a los puertos usando el TurboC, en el Xp estoy casi seguro.

Si está en entorno Windows, creo que le conviene instalar el Visual Studio y trabajar con el compilador de C++ que ofrece Microsoft.


----------



## Dr. Zoidberg (Feb 25, 2020)

cosmefulanito04 dijo:


> En el 7 creo que todavía podías acceder a los puertos usando el TurboC, en el Xp estoy casi seguro.


La ultima vez que accedí a un puerto en Windows fue con una DLL en Win95. Despues ya no...salvo que pongas la seguridad en cero y ejecutes todo con permisos de administrador...


----------



## TRILO-BYTE (Feb 25, 2020)

Lo más sano es usará algo más moderno y evitar usar ya software incompatible.
En LabVIEW puedes usar el puerto paralelo sin problemas.


----------



## cosmefulanito04 (Feb 25, 2020)

Dr. Zoidberg dijo:


> La ultima vez que accedí a un puerto en Windows fue con una DLL en Win95. Despues ya no...salvo que pongas la seguridad en cero y ejecutes todo con permisos de administrador...



En el Xp de 32 bits (con el 7 no recuerdo si se podía, tal vez con el de 32 si), desde el cmd como administrador, llamando al borland, podías manejar el puerto serie, incluso implementando una interrupción.

De todas formas, el borland es una herramienta recontra obsoleta, ya cuando lo usé yo hace 15 años era obsoleto.

Hoy en día, usando Visual C++ podés manejar el puerto serie o el paralelo, con APIs que te da windows. Y Linux, con GCC tiene su contrapartida con los system calls.


----------



## D@rkbytes (Feb 25, 2020)

¿Y en estos días quién pretendería usar el puerto paralelo?
Habiendo tantas cosas que lo superaron, sería como caminar hacía atrás.


----------



## Dr. Zoidberg (Feb 25, 2020)

D@rkbytes dijo:


> ¿Y en estos días quién pretendería usar el puerto paralelo?


Supongo que nadie en su sano juicio lo usaría, pero no se puede negar que es una salida directa de los ports I/O del micro y su uso es simple de asimilar al del sistema aislado I/O.


----------



## TRILO-BYTE (Feb 26, 2020)

Cuando trabajaba en un laboratorio, se usaba para mover motores a pasos de monocromadores en ese entonces usaban LabVIEW y el puerto paralelo directo a un puente H pero se limitaba a solo 2 motores.

Después usamos puerto serie y un micro para poder mover más motores a pasos.


----------

