TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: Zero13 en 29 de Septiembre de 2005, 02:58:00
-
Hola, tengo un problema con el mandato PWM, lo que me ocurre es que con el mandato PWM controlo 1 motor y le indico:
pwm portb.0, 255, 1 ( 255 es la velocidad maximo ó voltaje maximo para el motor )
( 1 es un pulso )
La cuestion es que el motor va a toda velocidad...perfecto!, pero si le voy añadiendo motores hasta los 4 que necesito repitiendo la misma operacion:
pwm portb.0, 255, 1
pwm portb.2, 255, 1
pwm portb.4, 255, 1
pwm portb.6, 255, 1
La velocidad de los 4 motores se han reducido a casi el 50%....
de verdad no lo entiendo, estas son las caracteristicas de la placa y motores:
Pic 16F877A
Cristal a 4 Mhz
Compilador PicBasic Pro 2.45
Controlador de Motores L298N ( controla 2 motores )
( muy parecido al L293N pero este soporta hasta 4 amperios )
Motores DC con reductora interna a 12 Voltios
Y lo mas raro de todo, es que si utilizo el mandato high, low de la siguiente manera:
high portb.0
high portb.2
high portb.4
high portb.6
Los 4 motores van a toda velocidad !!, como deberian de ir con el PWM, pero claro con el mandato high y low van sin control, ya que si le pongo una pausa entre el high y el low de por ejemplo 1 ms.... se relentizan igualmente como con el pwm.

Puede ser problema de la velocidad de proceso de 4 mhz ??
Se podria solucionar si cambio el cristal por uno de 20 mhz ??
Agradezco cualquier comentario ó ayuda

Slds!
Zero13
www.zerobots.net
-
yo estoy trabajando en una controladora para control de motores y utilizo 20Mhz, el problema esta en que cada vez que añades un motor compartes los recursos, y llega un momento que fallan los tiempos porque el micro ya no puede atender suficiente mente rapido a los motores . La forma en que yo lo hago es mediante una rutina propias que es mas efectiva que utilizar la del lenguaje de programacion…. Pero subiendo la frecuencia seguro que vuelve a funcionar con unos cuantos motores mas.
-
Gracias dogflu66 por tu valiosa informacion!

Esta misma noche lo pruebo y te cuento.
Por cierto, configuras de alguna manera especial en PicBasic el cristal:
@ device ......
HS ( High Speed ) ??
Slds!
Zero13
www.zerobots.net
-
Lo siento pero en la version de basic que utilizo no se configuran los fuses en el editor.
-
Hola:
No se si es a esto a lo que te refieres
DEFINE OSC 20
PAra que el micro funcione con un cristal de 20Mhz.
-
jejeje
no, me referia a esto:
@ DEVICE HS_OSC
Con este comando puedo activar que la grabacion y el cristal funcione en modo High Speed....hay muchos mas comandos por ejemplo CP ( proteccion del micro )...etc. 
Estoy deseando probarlo....el Robot que tengo en la Web el ZeroNet utiliza un cristal de 20 Mhz y la linea que comentas....ya lo conocia.

Slds!
Zero13
www.zerobots.net
-
Bueno, si te refieres a como ajusto la rutina de control lo hago colocando un frecuencimetro en los pin concretos, mido que la frecuencia es la que yo quiero, y si no lo es añado o quito delays a la rutina de control hasta que queda total mente calibrada.
-
Hola dogflu66, he cambiado el cristal y lo he puesto de 20 mhz, definiendo:
define osc 20
Y nada...sigue igual de lento...y la cosa se relentiza mas todavia si activo la pantalla de LCD para ver la distancias de los ultrasonidos... 
Teniendo en cuenta que mi micro es un 16F877A ó un 16F874A y que va a 20 Mhz, como deberia configurar el PWM para que fuera al maximo de velocidad ??
Ya que por defecto con ( PWM portb.0, 255, 1 ) sigue igual de lento a 20 Mhz.
Como ajusto la frecuencia de la que hablan en la ayuda sobre PWM ??
The Cycle time of PWM is dependent upon the oscillator frequency. If a 4MHz oscillator is used, each Cycle would be about 5ms long.
"Dice algo asi: El tiempo de ciclo de PWM depende de la frecuencia del oscilador. If usamos un oscilador de 4 Mhz, el Ciclo debe estar sobre 5 ms de duracion"
If a 20MHz oscillator is used, each Cycle would be about 1ms in length. Defining an OSC value has no effect on PWM.
Si el oscilador que usamos es de 20 Mhz, el Ciclo debe estar sobre 1 ms de duracion. Definir el valor OSC no tiene efecto sobre PWM
Donde indico ese 1 ms en el mando PWM ó fuera como una pausa ??
Alguna idea?
Gracias.
Slds!
Zero13
www.zerobots.net
-
Pues, lo que describes demuestra que el micro va mas rapido el problema es ajustar el pwm. y si el display afecta es por que el lenguaje no te esta dando maxima prioridad al pwm, y esto es otro problema….. haber si alguien del subforo que tenga experiencia con este lenguaje te puede echar una mano.
-
El problema que tienes es que si haces
ciclo:
pwm portB.0, 255, 1
goto ciclo
envias un tren de pulsos, supongamos que el tren es
111110111110111110.....donde los 1 indican el estado alto y los ceros el bajo.
Si haces
ciclo:
pwm portB.0, 255, 1
pwm portB.1, 255, 1
goto ciclo
el segundo pwm será como una pausa para el primero, y ambos motores andarán a una velocidad menor. El tren de pulsos en el pin 0 será
111110000000111110000000111110000000....
y en el pin 1
000000111110000000111110000000111110....
y si agremas mas pwm disminuirás aun mas la velocidad
111110000000000000000000111110000000000000000000....
Una solución entre tantas
w var byte
ciclo:
portb.0=1
portb.1=1
portb.2=1
pauseus w
portb.0=0
portb.1=0
portb.2=0
pauseus (100-w)
goto ciclo
donde la velocidad va de 0 a 100
-
Muchas Gracias gemur3x

...mas claro imposible
voy a probarlo y te cuento.
Slds!
Zero13
www.zerobots.net
-
Bueno, al final triunfe!
y el mandato no fue precisamente el PWM, aunque he mirado de hacer una combinacion entre High/Low y PWM 
Al final lo consegui con High/Low de la siguiente manera:
high portc.1:high portc.3:high portc.5:high portc.7
pause 40 " es el tiempo que me va mejor en cuestion de velocidad de los motores
low portc.1:low portc.3:low portc.5:low portc.7
pause 1
Esto seria un pulso a los 4 motores simultaneamente y lo he probado tambien con 4 mhz como oscilacion y va igual de rapido, no he notado diferencia entre el de 20 y este de 4 mhz.
Agradeceros a todos vuestra ideas para el problema. 
Gracias gemur3x por tu claro punto de vista del problema y su solucion. 
Slds!
Zero13
www.zerobots.net