http://www.bipedolandia.es

Bipedolandia,100% Spain sobre robots bípedos, Robonova, KONDO KHR-2HV, Nao, MechRC, Bioloid, Robobuilder, Kumotek KT-X, RoboPhilo, i-Sobot, Manoi AT01, Robovie-M V3, PLEN, BasicX, SCC32, Lynxmotion
 
ÍndiceÍndice  PortalPortal  BuscarBuscar  RegistrarseRegistrarse  Conectarse  Grupo de facebookGrupo de facebook  
Traductor
Buscar
 
 

Resultados por:
 
Rechercher Búsqueda avanzada
Últimos temas
» "El robot no podrá imitarnos, pero ya puede mejorarnos"
Ayer a las 21:31 por siempre.aprendiendo

» kondo o bioloid
Ayer a las 21:24 por Gremio

» 1º Sorteo de un robot bípedo en bipedolandia (Kit Bioloid Premium )
Ayer a las 21:18 por microchis

» Hemos llegado a los mil usuarios registrados!!!!!!
Ayer a las 16:29 por guanajo

» Visitando Bipedolandia por 1º vez...
Ayer a las 14:37 por criadobot

» Me Presento
2012-05-17, 19:45 por Mimic

» Otro Bioloid Premium a la venta en Ebay
2012-05-17, 19:40 por iankilm

» Aprender a programar Bioloid con C, C++ y C#
2012-05-16, 20:26 por siempre.aprendiendo

» RoboBuilder lanza servomotores de alta gama
2012-05-16, 12:15 por Gremio

» Medidas de RoboBuilder, Robonova y Kondo KHR 2-HV
2012-05-16, 05:49 por criadobot

» Desempaquetando "Genex Suit Type A-621" para Kondo KHR-2HV
2012-05-14, 08:45 por Gremio

» Vendo Kit educativo Bioloid Premium
2012-05-13, 19:58 por guanajo

» Redes - Aprender de los robots
2012-05-09, 23:00 por criadobot

» Bipedolandia viaja al Festival de la Robótica (Suiza 5 de mayo)
2012-05-08, 16:03 por guanajo

» leer entradas digitales del rebonova
2012-05-08, 11:25 por chaly012

» programa en basic para rebonova
2012-05-07, 16:37 por chaly012

» programa en basic
2012-05-07, 16:33 por chaly012

» Controla tu robot con...¿Kinect?
2012-05-07, 15:47 por RamonMas

» AESSBot 2012
2012-05-02, 14:00 por Luison

» leer entradas en el cotrolador
2012-04-28, 15:20 por chaly012

» Ajuste de sensores en KHR-3HV
2012-04-26, 08:24 por criadobot

» Cambiar batería a robobuilder.
2012-04-26, 07:54 por guanajo

Mayo 2012
LunMarMiérJueVieSábDom
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendarioCalendario
Compartir | 
 

 Cortex-M3

Ver el tema anterior Ver el tema siguiente Ir abajo 
Ir a la página : Precedente  1, 2, 3, 4, 5, 6  Siguiente
AutorMensaje
Luison
Almirante
Almirante


Cantidad de envíos: 2147
Edad: 25
Localización: Bilbao
Puntos: 1953
Fecha de inscripción: 06/09/2008

MensajeTema: Re: Cortex-M3   2012-02-02, 19:19

Ambos trabajan en 50Hz, peeero el rango no es el mismo y no sabría decirte cual es el exacto en ambos.

El genérico efectivamente es de 500 a 2500 us, pero luego cada fabricante y cada modelo dentro del fabricante es diferente.
Yo lo que hago es un programa que vaya de 1500 a 2500 cada vez que pulso un botón, o cada segundo, en saltos de 50. Y lo mismo a la inversa.
Ves cuál es el rango máximo en el que se ha movido el servo sin parecer "forzado", le das un pequeño margen de 50 y asunto arreglado Perfecto
Volver arriba Ir abajo
rcardt
Almirante
Almirante


Cantidad de envíos: 281
Localización: Barcelona
Puntos: 292
Fecha de inscripción: 15/08/2009

MensajeTema: Re: Cortex-M3   2012-02-02, 19:25

Luison escribió:
Ambos trabajan en 50Hz, peeero el rango no es el mismo y no sabría decirte cual es el exacto en ambos.

El genérico efectivamente es de 500 a 2500 us, pero luego cada fabricante y cada modelo dentro del fabricante es diferente.
Yo lo que hago es un programa que vaya de 1500 a 2500 cada vez que pulso un botón, o cada segundo, en saltos de 50. Y lo mismo a la inversa.
Ves cuál es el rango máximo en el que se ha movido el servo sin parecer "forzado", le das un pequeño margen de 50 y asunto arreglado Perfecto


No es mala idea, pero porque probar de 1500 a 2500, y no de 500 a 2500, si me paso del rango, oiré el ruido de que me he pasado y ya tendré el rando, no Question Question Question
Volver arriba Ir abajo
http://www.menorcaweb.net/ots
Luison
Almirante
Almirante


Cantidad de envíos: 2147
Edad: 25
Localización: Bilbao
Puntos: 1953
Fecha de inscripción: 06/09/2008

MensajeTema: Re: Cortex-M3   2012-02-02, 19:37

rcardt escribió:
Luison escribió:
Ambos trabajan en 50Hz, peeero el rango no es el mismo y no sabría decirte cual es el exacto en ambos.

El genérico efectivamente es de 500 a 2500 us, pero luego cada fabricante y cada modelo dentro del fabricante es diferente.
Yo lo que hago es un programa que vaya de 1500 a 2500 cada vez que pulso un botón, o cada segundo, en saltos de 50. Y lo mismo a la inversa.
Ves cuál es el rango máximo en el que se ha movido el servo sin parecer "forzado", le das un pequeño margen de 50 y asunto arreglado Perfecto


No es mala idea, pero porque probar de 1500 a 2500, y no de 500 a 2500, si me paso del rango, oiré el ruido de que me he pasado y ya tendré el rando, no Question Question Question


Bueno, para andar con cuidado y no pasarte en exceso, con las posibles consecuencias que eso podría tener...
Volver arriba Ir abajo
rcardt
Almirante
Almirante


Cantidad de envíos: 281
Localización: Barcelona
Puntos: 292
Fecha de inscripción: 15/08/2009

MensajeTema: Re: Cortex-M3   2012-02-02, 19:44

Luison escribió:


Bueno, para andar con cuidado y no pasarte en exceso, con las posibles consecuencias que eso podría tener...


Bien, tu tienes mas experiencia, así que aplicaré esos rangos de trabajo, y luego ya veremos. alabar Supongo que conoces los límites de maniobrabilidad de cada extremidad y no ves necesario alargar tanto los grados de los servos. Sherlock
Me aplico el consejo, gracias crack.
Volver arriba Ir abajo
http://www.menorcaweb.net/ots
Luison
Almirante
Almirante


Cantidad de envíos: 2147
Edad: 25
Localización: Bilbao
Puntos: 1953
Fecha de inscripción: 06/09/2008

MensajeTema: Re: Cortex-M3   2012-02-02, 19:51

rcardt escribió:
Luison escribió:


Bueno, para andar con cuidado y no pasarte en exceso, con las posibles consecuencias que eso podría tener...


Bien, tu tienes mas experiencia, así que aplicaré esos rangos de trabajo, y luego ya veremos. alabar Supongo que conoces los límites de maniobrabilidad de cada extremidad y no ves necesario alargar tanto los grados de los servos. Sherlock
Me aplico el consejo, gracias crack.

Generalmente dan cerca de 180º de libertad, así que no hay por qué forzar por norma general.

Pero vamos, que igual te interesa en cierto momento estar más ajustado, eso se tendrá que ver en cada situación, yo sólo digo lo que yo hago pirat
Volver arriba Ir abajo
rcardt
Almirante
Almirante


Cantidad de envíos: 281
Localización: Barcelona
Puntos: 292
Fecha de inscripción: 15/08/2009

MensajeTema: Re: Cortex-M3   2012-02-04, 23:17

Para ir comenzando, he encontrado este tutorial para la placa: cheers

[Tienes que estar registrado y conectado para ver este vínculo]

Tenemos un ejemplo para mover un par de servos a tres de sus posiciones,de
una manera muy descriptiva, así que ya tenemos por donde comenzar. Perfecto
Volver arriba Ir abajo
http://www.menorcaweb.net/ots
Luison
Almirante
Almirante


Cantidad de envíos: 2147
Edad: 25
Localización: Bilbao
Puntos: 1953
Fecha de inscripción: 06/09/2008

MensajeTema: Re: Cortex-M3   2012-02-05, 01:58

rcardt escribió:
Para ir comenzando, he encontrado este tutorial para la placa: cheers

[Tienes que estar registrado y conectado para ver este vínculo]

Tenemos un ejemplo para mover un par de servos a tres de sus posiciones,de
una manera muy descriptiva, así que ya tenemos por donde comenzar. Perfecto


Si en el propio Coocox, si vas a timmer verás un ejemplo también perfectamente válido... y compatible con coocox. Ese código creo que usa funciones no compatibles, aunque no estoy 100% seguro.

Aún así, para comprender el funcionamiento, no está nada mal.
Volver arriba Ir abajo
rcardt
Almirante
Almirante


Cantidad de envíos: 281
Localización: Barcelona
Puntos: 292
Fecha de inscripción: 15/08/2009

MensajeTema: Re: Cortex-M3   2012-02-07, 20:44

Luison escribió:


Si en el propio Coocox, si vas a timmer verás un ejemplo también perfectamente válido... y compatible con coocox. Ese código creo que usa funciones no compatibles, aunque no estoy 100% seguro.

Aún así, para comprender el funcionamiento, no está nada mal.


Una cosa campeón, podrías decirme k es lo que hace el ejemplo de Timer que
hay en coocox y que me comentas, mueve algún servo o algo así??
Volver arriba Ir abajo
http://www.menorcaweb.net/ots
Luison
Almirante
Almirante


Cantidad de envíos: 2147
Edad: 25
Localización: Bilbao
Puntos: 1953
Fecha de inscripción: 06/09/2008

MensajeTema: Re: Cortex-M3   2012-02-07, 21:32

rcardt escribió:
Luison escribió:


Si en el propio Coocox, si vas a timmer verás un ejemplo también perfectamente válido... y compatible con coocox. Ese código creo que usa funciones no compatibles, aunque no estoy 100% seguro.

Aún así, para comprender el funcionamiento, no está nada mal.


Una cosa campeón, podrías decirme k es lo que hace el ejemplo de Timer que
hay en coocox y que me comentas, mueve algún servo o algo así??

Al añadir la librería TIM a tu proyecto, verás que te aparece un ejemplo para utilizar el timer de tu cortex.

En el ejemplo de coocox se genera un cuádruple PWM con un timer si mal no recuerdo (PWM genérico, no concretamente el de servo). Se pueden generar 4 PWM con cada timer, que es lo que hace en el ejemplo como he dicho. Si usas del timer 2 al 5 sacas 16 PWM. Con lo que para obtener hasta 32 PWM, tienes que generar primero 16, reconfigurar los timer y generar los otros 16. Habrá un retraso de 2-3 ms entre un grupo de PWMs y el otro... lo que no es ningún drama Wink

No sé si me he explicado bien. Configuras 4 timers para que genere 4 PWMs cada uno y así conseguimos 16PWM. Los arrancamos, pero tras 2.5ms (ya habrá realizado los 16 PWMs el ciclo en alto), reconfiguramos los timer para que ahora generen los otros 16PWM en las otras 16 salidas de servomotor que tengamos reservadas.
Cuando pasen 17.5ms desde la segunda reconfiguración, o 20 ms desde al primera (es lo mismo). Se vuelve a reconfigurar los timer para que saque de nuevo los primerso 16 PWM en las primeras 16 posiciones.

Evidentemente, si tienes menos servomotores pues en la "segunda" ronda se generan menos PWM o lo que necesites.
Volver arriba Ir abajo
rcardt
Almirante
Almirante


Cantidad de envíos: 281
Localización: Barcelona
Puntos: 292
Fecha de inscripción: 15/08/2009

MensajeTema: Re: Cortex-M3   2012-02-07, 21:41

Recuerda por que pines sacaba las cuatro 4 PWMs,... sino ya lo miraré mañana, ya
que este ejemplo esta muy currado también.
Volver arriba Ir abajo
http://www.menorcaweb.net/ots
Luison
Almirante
Almirante


Cantidad de envíos: 2147
Edad: 25
Localización: Bilbao
Puntos: 1953
Fecha de inscripción: 06/09/2008

MensajeTema: Re: Cortex-M3   2012-02-07, 21:59

rcardt escribió:
Recuerda por que pines sacaba las cuatro 4 PWMs,... sino ya lo miraré mañana, ya
que este ejemplo esta muy currado también.


Del 6 al 9 del puerto C.
Pero vamos, usa el que más rabia te de sisi
Volver arriba Ir abajo
rcardt
Almirante
Almirante


Cantidad de envíos: 281
Localización: Barcelona
Puntos: 292
Fecha de inscripción: 15/08/2009

MensajeTema: Re: Cortex-M3   2012-02-08, 21:12

Venga Luis, échame una mano con el código pleasee. scratch
Código:

/**
  *************************************************************
  * @brief TIM_PWMOutput
  *************************************************************
*/

#include "stm32f10x.h"
#include "stm32f10x_tim.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"

/* Variables */
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
uint16_t CCR1_Val = 1000;
uint16_t CCR2_Val = 1500;
uint16_t CCR3_Val = 2000;
uint16_t CCR4_Val = 2500;
uint16_t PrescalerValue = 0;

/* Funciones */
void RCC_Configuration(void);
void GPIO_Configuration(void);

int main(void)
{
   TIM_PWMOutput();
}

void TIM_PWMOutput(void)
{
    RCC_Configuration();    /* Configuración sistema de relojes */
    GPIO_Configuration();    /* GPIO Configuración */

    /* Calculo valor prescalado */
    PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
    /* Tiempo base configuraciÛn */
    TIM_TimeBaseStructure.TIM_Period = 665;
    TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

    /* PWM1 Modo configuración: Channel1 */
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

    TIM_OC1Init(TIM3, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);

    /* PWM1 Modo configuraciÛn: Channel2 */
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR2_Val;

    TIM_OC2Init(TIM3, &TIM_OCInitStructure);
    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);

    /* PWM1 Modo configuraciÛn: Channel3 */
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR3_Val;

    TIM_OC3Init(TIM3, &TIM_OCInitStructure);
    TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);

    /* PWM1 Modo configuraciÛn: Channel4 */
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = CCR4_Val;

    TIM_OC4Init(TIM3, &TIM_OCInitStructure);
    TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);

    TIM_ARRPreloadConfig(TIM3, ENABLE);

    /* Habilitado contador TIM3 */
    TIM_Cmd(TIM3, ENABLE);

    while (1)
    {}
}

void RCC_Configuration(void)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);    /* Habilito reloj TIM3 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
      RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); /* Habilito reloj GPIOA,B y C */
}


void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

        /*GPIOB ConfiguraciÛn: TIM3 channel1, 2, 3 and 4 */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   /*Pines como salidas Push-Pull*/
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE);

}

He cojido el código de muestra y lo he limpiado un poco de comentariosl. Por lo que
puedo apreciar, se declaran cuatro posiciones, las cuales yo he modificado para los
servos, a 1000,1500, 2000 y 2500, supongo que están los valores correctos.
Las funciones:
void RCC_Configuration(void); /* Habilitar relojes*/
void GPIO_Configuration(void); /* GPIO, configuración salida TIM3 canales 1, 2, 3, 4*/
Las entiendo perfectamente,... pero gran parte de la función TIM_PWMOutput() no la entiendo, me pierdo en:
/* Calculo valor prescalado */
PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
/* Tiempo base configuraciÛn */
TIM_TimeBaseStructure.TIM_Period = 665;
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

Para el prescalado de los servos, tengo que tocar los valores o así ya están correctos.
Y por otro lado, supongo que tendré que colocar entre los bloques el retardo de 20ms:
for (i=0;i<20000;i++);
Ya ves que estoy un poco, por no decir muy perdido. Crying or Very sad

Volver arriba Ir abajo
http://www.menorcaweb.net/ots
Luison
Almirante
Almirante


Cantidad de envíos: 2147
Edad: 25
Localización: Bilbao
Puntos: 1953
Fecha de inscripción: 06/09/2008

MensajeTema: Re: Cortex-M3   2012-02-08, 22:42

Bueno, ya te dije hace tiempo que los ejemplos se hacen con los leds de la placa, no directamente con los servomotores.

Bien, en el ejemplo la placa corre a 24MHz, con lo que SystemCoreClock es 24.000.000, si se quiere sacar una precisión máxima... el prescaler se calcula dividiendo entre 24 millones, y así cada hercio de la CPU genera un cambio en el timer Wink

En tu caso, necesitas una precisión de microsegundos. Con lo que en tu caso será:

PrescalerValue = (uint16_t) (72000000/1000000)-1;



TIM_TimeBaseStructure.TIM_Period = 665;

En la línea anterior, se declara el periodo del timer, en tu caso al haber puesto que el timer cambie cada microsegundo y como quieres que dure 20ms=20000us, pues lo tienes bien fácil:
TIM_TimeBaseStructure.TIM_Period = 20000; //Ojo que este valor tiene un máximo, creo que son 16bits (aprox 64.000).



Bien, ahora tienes declarado que el valor del timer se actualiza cada microsegundo, y además tienes puesto que cada 20.000 cambios del timer, osea, cada 20ms, el timer se reinicializa a cero y empieza de nuevo a contar.

Perfecto, ahora con tus valores de CCRX_Val debería de funcionar sisi


Eso sí, YO te aconsejo que hagas el ejemplo con los leds y modifiques el timer para que funcione cada cuatro, cada segundo y cada 0.5 segundos, y así ves con tus propios ojos y cronómetro en mano, que efectivamente lo tienes todo bien configurado, y que sabes cómo funciona Wink
Volver arriba Ir abajo
rcardt
Almirante
Almirante


Cantidad de envíos: 281
Localización: Barcelona
Puntos: 292
Fecha de inscripción: 15/08/2009

MensajeTema: Re: Cortex-M3   2012-02-09, 07:23

Explicación entendida,... creo que el tema prescalado y timers tengo que
machacarlo mas cachete . Muchas gracias por tan clara coprensión.
Me pondré con los leds como dices para hacer las pruebas, pero me
interesaba saber la configuración para los servos, sobretodo para
entenderlo un poco mejor. Rolling Eyes
Entre las modificaciones de soldado de la placa y demas cosas, no me
da mucho tiempo para el código; este finde pasaré la imágen de como
he dejado la placa definitivamente.
Nos leemos.
Volver arriba Ir abajo
http://www.menorcaweb.net/ots
Luison
Almirante
Almirante


Cantidad de envíos: 2147
Edad: 25
Localización: Bilbao
Puntos: 1953
Fecha de inscripción: 06/09/2008

MensajeTema: Re: Cortex-M3   2012-02-09, 08:33

rcardt escribió:
Explicación entendida,... creo que el tema prescalado y timers tengo que
machacarlo mas cachete . Muchas gracias por tan clara coprensión.
Me pondré con los leds como dices para hacer las pruebas, pero me
interesaba saber la configuración para los servos, sobretodo para
entenderlo un poco mejor
. Rolling Eyes
Entre las modificaciones de soldado de la placa y demas cosas, no me
da mucho tiempo para el código; este finde pasaré la imágen de como
he dejado la placa definitivamente.
Nos leemos.


TRAMPA!!! Si te lo digo no aprendes. Mejor intenta comprenderlo y pon lo que tú crees que debería de ser Perfecto


NOTA: Los timer corren a la velocidad del microcontrolador, osea, en tu caso el timer se incrementería 72 millones de veces cada segundo... Bien, eso es mucho, de ahí que exista un Prescaler y un clock división.

En los ejemplos que hemos visto, sólo hemos tocado el prescaler, pero también se puede tocar el clock división (generalmente el cock división sólo puede tomar unos valores específicos).

Si tu prescaler vale 10 y tu clock división 16, tu timer incrementará su valor cada 10*16=160 hercios de tu placa.

Pero lo dicho, en tu caso puedes dejar el clock división a cero y así sólo utilizar el prescaler pirat
Volver arriba Ir abajo
 

Cortex-M3

Ver el tema anterior Ver el tema siguiente Volver arriba 
Página 5 de 6.Ir a la página : Precedente  1, 2, 3, 4, 5, 6  Siguiente

Permiso de este foro:No puedes responder a temas en este foro.
http://www.bipedolandia.es :: Controladoras , Sensores y Servomotores :: CONTROLADORAS :: Especial Cortex M3-