Helicopteros Radio Control - RC - Radiocontrol Helicopteros Radio Control - RC - Radiocontrol Helicopteros Radio Control - RC - Radiocontrol
Noticias: Bienvenidos a Helicopteros RC / Radiocontrol
 
*
Bienvenido(a), Visitante. Por favor, ingresa o regístrate. 16 de Abril de 2024, 10:28:20


Ingresar con nombre de usuario, contraseña y duración de la sesión


Páginas: 1 2 [3] 4 5 ... 42
  Imprimir  
Autor Tema: WALKERA CB180  (Leído 266437 veces)
0 Usuarios y 1 Visitante están viendo este tema.
poli28
Estacionarios
**

Reputacion: +2/-0
Desconectado Desconectado

Mensajes: 327


girando girando, sin dedos aun. Ubic:Galicia


Email
« Respuesta #30 : 27 de Noviembre de 2009, 15:30:14 »

Como llevas tu proyecto compañero, yo tambien soy un defensor de los walkera y me gusta tu modelo, dinos cosas.
En línea

Salvation 23 D.E.P
Walkera 5g4 Controlado
Copterx 450 en progreso, primeras translaciones
Trex 500 esp....el amo
axn  floater
cessna 182 skyartech
multiplex fun-cub
Futaba ff7 Gran emi...
c4pic
Invertidos
*******

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 2.980


Volando en Zgz - RC Cadrete Club


« Respuesta #31 : 29 de Noviembre de 2009, 16:15:36 »

Hola Poli28, el proyecto lleva unos días parado ya que no dispongo de mucho tiempo. Como aún no he comprado ningún ESC, he probado a conectar la salida del PIC a uno de los servos del helicóptero [señal control motor principal->conversor PIC->servo], de esta forma podía comprobar la 'calidad' de la señal generada. El resultado no ha del todo satisfactorio, porque aunque el servo responde al mando, en situación de reposo, el servo hace un poco de ruido.. ya que contínuamente está haciendo pequeñisimos movimientos adelante y atrás. Esto es debido a que la señal generada no es todo lo estable que debiera....
El osciloscopio es una herramienta casi indispensable para validar el sistema, como yo no tengo, he visualizado las formas de onda en el ordenador mendiante la entrada de micrófono de la tarjeta de sonido, esto sirve un poco para hacerme una idea de lo que está pasando con la señal, pero la precisión no es muy buena ... así que andamos despacio.

Ahora debo de optimizar la programación del PIC para hacer más estable la señal. Además, estoy tratando de hacer que esto funcione con el PIC a 8Mhz utilizando su oscilador interno. Como alternativa podría utilizar un cristal externo y hacer correr el PIC a 48Mhz, de esta forma el código no necesitaría estar tan optimizado, pero por contra necesitaría montar un oscilador externo que es algo que me gustaría evitar.

A ver si en navidades, que tendré algo de tiempo le doy un último empujón al invento.


Respecto al helicóptero, probé a montar un motor en configuración direct drive, pero el centro de gravedad se desplaza tanto hacia atrás que el comportamiento del heli no me gustó. Así que he vuelto a montar el motor con el sistema de transmisión.



Ahora, también tengo en el punto de mira la emisora walkera WK2801Pro (8 canales). Esta emisora es compatible con mi CB180, y mejora sus prestaciones según he podido leer por algún foro. Esta emisora (junto con su receptor 8CH) me serviría también para un fututo copterx que me gustaría ir montándome un poco más adelante.

Un saludo.
En línea
c4pic
Invertidos
*******

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 2.980


Volando en Zgz - RC Cadrete Club


« Respuesta #32 : 24 de Diciembre de 2009, 11:38:38 »

Bueno, ya tengo a punto de llegar un ESC (HobbyWing 25A) y motor brushless para hacer pruebas con el conversor PWM. Con esto de las navidades se está retrasando un poco en llegar....

El convesor ya lo tengo preparado, finalmente le he montado oscilador externo (8Mhz), así el PIC corre a 48Mhz (multiplicador PLL interno). Será capaz de controlar los dos motores del heli (aunque de momento sólo le voy a montar el brushless del rotor principal), le he añadido dos led : uno para la parte frontal y otro para la parte posterior, que modifican su estado en función de si el helicóptero está en vuelo o no, es posible actualizar el firmware por medio de RS232 aunque hace falta un pequeño circuitillo externo para adaptar las tensiones de 5V del PIC a los +/-12V del PC.

Finalmente no he podido evitar el oscilador externo, ya que para conseguir resolución en la captura de los pulsos cuando el ciclo de trabajo se encuentra cercano al 0% o al 100%, los 8Mhz del oscilador interno eran insuficientes.








En cuanto tenga un video con las primeras pruebas lo cuelgo.


Un saludo.
« Última modificación: 24 de Diciembre de 2009, 11:56:13 por c4pic » En línea
PSG
Estacionarios
**

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 65



« Respuesta #33 : 29 de Diciembre de 2009, 21:09:55 »

Buenas c4pic,sigo con el problema del plato y no consigo solucionarlo..Hice lo que me dijistes del 'extent' y se mueven mas los servos.
 
El proble es el siguiente,cuando le doy al stick para que vaya hacia atras y el alabeo a derecha al soltar el stick el plato no vuelve al centro se queda en medio recorrido.
 
Los servos no es,estan bien y se mueven perfectamente,subi mas el link del alabeo y logre que se quedara en el medio pero...El problema me pasa al sentido contrario,osea alante y izkierda,al soltar el stick no vuelve y le pasa como cuando le doy hacia atras que se queda a medio recorrido.
 
Ya desmonte el fuselaje con lo que puedo manipularlo mejor y le hice unos cortes por debajo para poder sacar y meter el chasis del heli.Lo vi en rcgroups.Luego en el eje principal la pieza que esta abajo que tiene 2 tornillos pequeñosy es negra,que esta sujetada al eje,esa pieza cuando se mueve el plato aveces se mueve nose si es normal.
 
Podria ser que me digas que medidas tienes en los links para apartir de hay intentar ponerlo lo mas centrado posible...Es que he hecho de todo y no doy con la solucion.
 
Tu cuando usas el stick del cabezeo y alabeo al soltarlo en cualquiera de las direcciones te vuelve el plato al centro?
 
Gracias.
En línea
c4pic
Invertidos
*******

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 2.980


Volando en Zgz - RC Cadrete Club


« Respuesta #34 : 30 de Diciembre de 2009, 22:35:12 »

Hola PSG, te contesto en el hilo en el cual planteaste este problema. Es por cuestión de claridad, así la gente que lo ha ido siguiendo y ha posteado en el, seguirá al corriente de la evolución del problema.

Un saludo.
« Última modificación: 30 de Diciembre de 2009, 23:10:00 por c4pic » En línea
c4pic
Invertidos
*******

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 2.980


Volando en Zgz - RC Cadrete Club


« Respuesta #35 : 30 de Diciembre de 2009, 23:09:13 »

Bueno, por fin he recibido el ESC y motor para probar la conversión brushless.

Un video de prueba del motor con todo desmontado por encima de la mesa.....

<a href="http://www.youtube.com/v/VaGtDckZrUM&amp;ap=%2526fmt%3D18&amp;rel=0" target="_blank">http://www.youtube.com/v/VaGtDckZrUM&amp;ap=%2526fmt%3D18&amp;rel=0</a>


Todo parece funcionar bien, así que lo he montado en el heli. Hay muchos cables y conectores pero todo 'encaja':







y finalmente con el cockpit montado:



Como ya comenté, el conversor PWM  también controla dos leds:

<a href="http://www.youtube.com/v/UQqY3D2_bDo&amp;ap=%2526fmt%3D18&amp;rel=0" target="_blank">http://www.youtube.com/v/UQqY3D2_bDo&amp;ap=%2526fmt%3D18&amp;rel=0</a>



Ahora sólo me falta el ponerle el piñón al motor. El original es un 15T para un diametro de eje de 2mm. Si consigo extraerlo del motor (original), lo taladraré con una broca de 2,3mm que es el tamaño del eje del motor brushless que he montado.

En caso de que no consiga extraerlo, ¿donde podría encontrar un piñon equivalente?. He visto algunos de ALIGN con denominación 15T, pero no estoy seguro de que con esta denominación sea suficiente para identificar el piñón. ¿que datos del piñón necesitaría para identificarlo correctamente?


Espero poder volver a volar pronto.....sólo me falta un piñón....

salu2
« Última modificación: 30 de Diciembre de 2009, 23:14:26 por c4pic » En línea
c4pic
Invertidos
*******

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 2.980


Volando en Zgz - RC Cadrete Club


« Respuesta #36 : 04 de Enero de 2010, 20:47:46 »

GUAUU!!

primeras pruebas en vuelo del heli con brushless....

el comportamiento ha cambiado drásticamente en cuanto a potencia se refiere, sigue siendo igual de estable que antes, pero es como 3 veces más potente...

en la segunda mitad del video hay algunos movimientos bruscos, para ver que tal se comporta.
<a href="http://www.youtube.com/v/qWpq744ui8s&amp;ap=%2526fmt%3D18&amp;rel=0" target="_blank">http://www.youtube.com/v/qWpq744ui8s&amp;ap=%2526fmt%3D18&amp;rel=0</a>
« Última modificación: 04 de Enero de 2010, 21:33:58 por c4pic » En línea
poli28
Estacionarios
**

Reputacion: +2/-0
Desconectado Desconectado

Mensajes: 327


girando girando, sin dedos aun. Ubic:Galicia


Email
« Respuesta #37 : 04 de Enero de 2010, 20:59:32 »

Enhorabuena c4pic por tu proyecto, no estaria de mas que nos indicaras un poco que componentes has montado para ese conversion, mi walkera 5g4 ya no gana para motores,,,jejeje, lo dicho dfelicidades por conseguirlo y feliz 2010.
En línea

Salvation 23 D.E.P
Walkera 5g4 Controlado
Copterx 450 en progreso, primeras translaciones
Trex 500 esp....el amo
axn  floater
cessna 182 skyartech
multiplex fun-cub
Futaba ff7 Gran emi...
PSG
Estacionarios
**

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 65



« Respuesta #38 : 04 de Enero de 2010, 22:15:25 »

Enhorabuena c4pic el heli esta que te cagas y si es 3 veces mas de caña no me lo quiero imaginar xD.Ahora tengo unas dudas,la duracion de vuelo con respecto al motor de serie cual es?Por que yo las luces que le instale el kit pesa 23gr como te comente en el otro post y para levantarlo me cuesta un poco,yo eso del motor igual si que me lo pienso,el de cola con pillar el que me has aconsejado llegaria no? Los motores los has pillado en distintas tiendas?

PD: El tema del motor es por que con el peso extra de las luces cuando bajo le tengo k meter mucha caña para que suba y le cuesta.
Salu2.
« Última modificación: 04 de Enero de 2010, 22:17:49 por PSG » En línea
c4pic
Invertidos
*******

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 2.980


Volando en Zgz - RC Cadrete Club


« Respuesta #39 : 04 de Enero de 2010, 22:33:36 »


....la duracion de vuelo con respecto al motor de serie cual es?Por que yo las luces que le instale el kit pesa ....


bueno, igual con la emoción me he pasado, puede que no sean 3 veces más de caña... pero dos si... y desde luego es muy diferente al original.

Para la duración de la batería con brushless respecto a escobillas, aún no tengo datos. La duración con el GWS montado en cola respecto al original.. pues la misma. Tu heli lleva fuselaje, y eso es un pequeño sobrepeso respecto al mío, así que imagino que las luces pues incrementan el peso y la respuesta aún es un poquito más pobre.

Puedes conseguir un incremento de potencia y duración cambiando la batería, yo compré una de 1200mAh 10C en Heliguy.com. En mi caso, el incremento es notable, se nota que el heli tiene más fuerza disponible con esa batería.

Si puedes hacer la modificación mecánica necesaria para montar el motor que te he aconsejado, no te lo pienses, comprate 4 o 5 y tienes para muuucho tiempo. Al montar el GWS, hay que tocar el POT de sensibilidad del gyro, para que se comporte correctamente.
« Última modificación: 04 de Enero de 2010, 22:35:31 por c4pic » En línea
c4pic
Invertidos
*******

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 2.980


Volando en Zgz - RC Cadrete Club


« Respuesta #40 : 04 de Enero de 2010, 22:38:43 »

Gracias Poli28, feliz 2010!!

Os adjunto el esquema que he seguido:



y la fuente del programa en C del PIC:

// v1.11
/* Compile options:  -ml (Large code model) */
/*
cpc464@live.com
*/
//CPU a 24Mhz - 1 us=6 TCY
//CPU a 8Mhz - 1 TCY=4/8000000=0,0000005 seg -> 1 us=2 TCY
//********************************  Include
#include <p18f2550.h>
#include <tcy.h>   
#include <pwm.h>
#include <capture.h>
#include <timers.h>
#include <usart.h>
#include <stdlib.h>
#include <string.h>
//********************************* Configuración 18F2550
#pragma config PLLDIV = 2    //Reloj Input (8 Mhz)
//#pragma config FOSC = INTOSCIO_EC  //Internal oscillator, port function on RA6, EC used by USB
#pragma config FOSC = HSPLL_HS    //Internal oscillator, port function on RA6, EC used by USB
//#pragma config CPUDIV = OSC3_PLL4  //[OSC1/OSC2 Src: /3][96 MHz PLL Src: /4] 8 y 24mhz
#pragma config CPUDIV = OSC1_PLL2  //[OSC1/OSC2 Src: /3][96 MHz PLL Src: /4] 48MHZ
#pragma config USBDIV = 2    //USB clock source comes from the 96 MHz PLL divided by 2
#pragma config BOR = OFF    //Brown Out Reset OFF
#pragma config VREGEN = OFF    //USB V.Regulador OFF
#pragma config WDT = OFF    //Watchdog OFF
#pragma config MCLRE = OFF   //Habilitado Retet en /MCLR
#pragma config PBADEN = OFF   //Puerto B como I/O
#pragma config XINST = ON   //Instrucciones extendidas ON
#pragma config PWRT = ON   //Power on Reset ON
#pragma config LVP = OFF   //ICSP Off
#pragma config CCP2MX = ON   //CCP2 input/output is multiplexed with RC1
//*********************************** Principal **********
//
/* Global variable declarations */
#pragma static udata
//******************************************* Variables captura PWM1 Main motor
  unsigned long int previous_period1;
  unsigned long int previous_pulse_width1;
  unsigned long int start_time1;
  unsigned long int stop_time1;
  unsigned long int previous_duty_cicle1;
//******************************************* Variables captura PWM2 Tail motor
  unsigned long int previous_period2;
  unsigned long int previous_pulse_width2;
  unsigned long int start_time2;
  unsigned long int stop_time2;
  unsigned long int previous_duty_cicle2;
//********************************************************* variables salidas PWM
  unsigned int told=0;
  unsigned int tnew=0;
  unsigned int tinterval=0;
  unsigned int tintervalmax=0;
  unsigned int tkomm=18000; //6ms para ejecución de RS232
 
//MAIN
  unsigned int Mperiodoact=0;   //tiempo actual de periodo MAIN
  unsigned char Mstep=1;    //paso de estado para motor MAIN
  unsigned int Mperiodomax=60000;  //20ms periodo máximo
  unsigned int Mpreciclo=2400;   //0.8ms tiempo a '1' de señal previo
  unsigned int McicloESC=0;   
  unsigned int MbcicloESC=0;
  unsigned int Mciclopost=0;
  unsigned int Mtcapt=50000;  //16,6ms
  char Mcaptfin=0;

//TAIL
  unsigned int Tperiodoact=0;
  unsigned char Tstep=1;
  unsigned int Tperiodomax=60000; //20ms
  unsigned int Tpreciclo=2400; //0.8ms
  unsigned int TcicloESC=0;
  unsigned int TbcicloESC=0;
  unsigned int Tciclopost=0;
  unsigned int Ttcapt=54000;  //18ms
  char Tcaptfin=0;
//******************************************************** variables salida
// 1seg medido con ciclos de main motor (20ms) -> 1s=50ciclos=50*0,2s

// LED 1 - posterior
// on(t1)--->off(t2)--->on(t3)---> off hasta 1s ---\
//  ^-----------------------------------------------\
  unsigned int cicloLED1=0;
  char tLED1fin=0;
  unsigned int tcicloLED1=30000; //10ms ejecuta gestión LED
 
  unsigned int t1LED1; //on [ms]
  char  t1LED1step=0;
  unsigned int t2LED1; //off [ms]
  char  t2LED1step=0;
  unsigned int t3LED1; //on [ms]
  char  t3LED1step=0;
 
// LED 2 - frontal
// on(t1)--->off(t2)--->on(t3)---> off hasta 1s ---\
//  ^-----------------------------------------------\
  unsigned int cicloLED2=0;
  char tLED2fin=0;
  unsigned int tcicloLED2=30000; //10ms ejecuta gestión LED
 
  unsigned int t1LED2; //on [ms]
  char  t1LED2step=0;
  unsigned int t2LED2; //off [ms]
  char  t2LED2step=0;
  unsigned int t3LED2; //on [ms]
  char  t3LED2step=0;
//**************************************************************************************
  unsigned char COMBuff[63]="*************";
//******************Variable tramas RS232
  unsigned char coma[]=","; 
  unsigned char inistr[]="#00:"; 
  unsigned char finstr[]="\r\n";
  int acustr[10];
//***************************************
void isr_ccp1 (void);
void isr_ccp2 (void);
void isr_tmr1 (void);
void isr_tmr3 (void);
// INTERRUPCIONES*********************************************************************************************************
void rx_handler (void);
void high_vector_branch (void);
#pragma code rx_interrupt = 0x808 //Vector sw interrupciones con BOOTLOADER Colt
//#pragma code rx_interrupt = 0x08 //Vector simulador
void rx_int (void)
{
_asm
//goto rx_handler     //silicon errata interrupt
CALL high_vector_branch,1    //silicon errata interrupt
_endasm
}
void high_vector_branch (void)   //silicon errata interrupt
{
_asm
POP      //silicon errata interrupt
GOTO rx_handler     //silicon errata interrupt
_endasm
}
#pragma code
#pragma interrupt rx_handler
void rx_handler (void) //Interrupción
{
  //***************************************************** Desbordamiento T1
 
  if (PIR1bits.TMR1IF)
   {
    isr_tmr1();
   }
  //***************************************************** CCP1 Main Motor
  if (PIR1bits.CCP1IF) //interrupción CCP1
  {
   
   isr_ccp1();
   
  }
  //***************************************************** Desbordamiento T3
 
  if (PIR2bits.TMR3IF)
   {
   isr_tmr3();
   }
  //***************************************************** CCP2 Tail Motor
  if (PIR2bits.CCP2IF) //interrupción CCP2
   {
   
   isr_ccp2(); 
   }
  //*********************************************************************************************************
   
}
// atención interrupciones  ***********************************************************************
void isr_ccp1 (void)
{
if (CCP1CONbits.CCP1M0) //Rising Edge
    {
      
     WriteTimer1(0);
     if (PORTCbits.RC2) CCP1CONbits.CCP1M0=0; //Cambio a Falling Edge
    }
      
   
   else if (!CCP1CONbits.CCP1M0)  //si es falling edge
    {
     PIE1bits.TMR1IE=0;
     PIR1bits.TMR1IF=0;
     T1CONbits.TMR1ON = 0; //Para el timer1
      
     if (!PORTCbits.RC2)
     {
      
      
      previous_pulse_width1 = ReadCapture1();
    
      previous_duty_cicle1=(previous_pulse_width1*10000)/6000; //(6000 periodo)
      
     }
   
     else previous_duty_cicle1=10000; //En 100% si no no esta la entrada a 0.
   
     CloseCapture1 ();
     MbcicloESC=previous_duty_cicle1/4;
    
    
      
    }
PIR1bits.CCP1IF=0;  //desactiva flag de interrupción
}
//*********************************************************************************************************************
void isr_ccp2 (void)
{
if (CCP2CONbits.CCP2M0) //Rising Edge
    {
     WriteTimer3(0);
     if (PORTCbits.RC1) CCP2CONbits.CCP2M0=0; //Cambio a Falling Edge
    }
      
   
   else if (!CCP2CONbits.CCP2M0)  //si es falling edge
    {
      
     PIE2bits.TMR3IE=0;
     PIR2bits.TMR3IF=0; 
     T3CONbits.TMR3ON = 0; //Para el timer3
    
     if (!PORTCbits.RC1)
     {
         
      previous_pulse_width2 = ReadCapture2();
    
      previous_duty_cicle2=(previous_pulse_width2*10000)/6000; //(6000 periodo)
      
     }
   
     else previous_duty_cicle2=10000; //En 100% si no no esta la entrada a 0.
   
     CloseCapture2 ();
     TbcicloESC=previous_duty_cicle2/3;
   
    }
  PIR2bits.CCP2IF=0;  //desactiva flag de interrupción
}
//*********************************************************************************************************************************
void isr_tmr1 (void)
{
    if (PORTCbits.RC2) previous_duty_cicle1=10000; //En 100%
    else  previous_duty_cicle1=0; //En 0%
   
    PIE1bits.TMR1IE=0; //DesHabilita Interrupciones de nuevo
    PIR1bits.TMR1IF=0;  //desactiva flag de interrupción
    T1CONbits.TMR1ON = 0; //Para el timer1
   
    MbcicloESC=previous_duty_cicle1/3;
}
//*********************************************************************************************************************************
void isr_tmr3 (void)
{
    if (PORTCbits.RC1) previous_duty_cicle2=10000; //En 100%
    else  previous_duty_cicle2=0; //En 0%
   
    PIE2bits.TMR3IE=0; //DesHabilita Interrupciones de nuevo
    PIR2bits.TMR3IF=0;  //desactiva flag de interrupción
    T3CONbits.TMR3ON = 0; //Para el timer3

    TbcicloESC=previous_duty_cicle2/3;
}
// PRINCIPAL *********************************************************************************************************************+

void main (void)
{

//******************************************************* Configuración Oscilador

OSCCONbits.SCS1=0;OSCCONbits.SCS0=0; //Oscilador Externo
// OSCCONbits.SCS1=1;OSCCONbits.SCS0=0; //Oscilador Interno
OSCCONbits.IRCF2=1;OSCCONbits.IRCF1=1;OSCCONbits.IRCF0=1;  //Frecuencia 8Mhz. del Interno
//******************************************************* Configuración Interrupciones
RCONbits.IPEN=0; //Deshabilita prioridad
INTCONbits.GIEH=1; INTCONbits.GIEL=1 ; //Habilita interrupciones
//*************************************************** Configuración Puerto A
LATA=0x00;
TRISA=0xFF; //Entrada - 1, Salida - 0
//************************************************** Configuración puerto B
LATB=0x00;
INTCONbits.RBIE=0; //Sin interrupción en cambio
INTCON2bits.RBPU=0; //Pull UP Activo
TRISB=0b00000111; //Entrada - 1, Salida - 0
//************************************************ Configuración puerto C
LATC=0x00;
TRISC=0b10001111; //Entrada - 1, Salida - 0
//**************************************************** Tiempo Retardo Arranque

PORTBbits.RB7=0;
PORTBbits.RB6=0;

//*********************************************** Puerto RS232
/* BAUDCONbits.BRG16=1;
OpenUSART(  USART_TX_INT_OFF &
    USART_RX_INT_OFF &
    USART_ASYNCH_MODE &
    USART_EIGHT_BIT &
    USART_CONT_RX &
    USART_BRGH_HIGH,
    103);   //16->115 kbps (a 8Mhz) - 51->115 kbps (a 24Mhz)
*/      //34->57kbps a (8mhz) - 103-> 115kbps (48mhz)
//********************************************** CCP Captura
// PWM CCP1 Captura    Main Motor
OpenTimer1( TIMER_INT_OFF    &
         T1_16BIT_RW   &
         T1_SOURCE_INT   &
         T1_PS_1_1     &
         T1_OSC1EN_OFF   &
         T1_SYNC_EXT_OFF );
// PWM CCP2 Captura    Tail Motor
OpenTimer3( TIMER_INT_OFF    &
         T1_16BIT_RW    &
         T1_SOURCE_INT   &
         T1_PS_1_1     &
         T1_OSC1EN_OFF   &
         T1_SYNC_EXT_OFF );
SetTmrCCPSrc(T1_CCP1_T3_CCP2); //T1 para CCP1 - T3 para CCP2
OpenCapture2 (CAPTURE_INT_OFF &   //CCP2 activo
   CAP_EVERY_RISE_EDGE);

//******************************************* Timer para salidas PWM
OpenTimer0( TIMER_INT_OFF &
        T0_16BIT     &
        T0_SOURCE_INT &
        T0_PS_1_4);
//***************************************
//**************************************
while (1)
{

PORTBbits.RB5=!PORTBbits.RB5; //Led bit de vida
//Cálculo intervalo de tiempo entre ciclos*********************************
told=tnew;
tnew=ReadTimer0();
tinterval=tnew-told;
if (tnew>=told) tinterval=tnew-told;
else   tinterval=65535-told+tnew;
//****************************************************************
Mperiodoact=Mperiodoact+tinterval;
Tperiodoact=Tperiodoact+tinterval;
//control de estado de señal 0/1 de salida*motor main******************************
switch (Mstep)
{ case 1: {
   if (Mperiodoact>=Mpreciclo) Mstep=2;
   }
  case 2: {   if (Mperiodoact>=MbcicloESC+Mpreciclo)
    {
    PORTBbits.RB7=0;
    Mstep=3;
    }
    }
  case 3: {
   if (Mperiodoact>=Mperiodomax)
    {
     PORTBbits.RB7=1;
     Mstep=1;
     Mperiodoact=0;
     Mcaptfin=0;
    
     //cada 20ms permite la ejecución del control LED, 1 vez.
     cicloLED1=cicloLED1+20; //control ciclo LED
     tLED1fin=0;
     //cada 20ms permite la ejecución del control LED, 1 vez.
     cicloLED2=cicloLED2+20; //control ciclo LED
     tLED2fin=0;
    }
    } 
}

//control de estado de señal 0/1 de salida*motor tail******************************
switch (Tstep)
{ case 1: {
   if (Tperiodoact>=Tpreciclo) Tstep=2;
   
      }
  case 2: {   if (Tperiodoact>=TbcicloESC+Tpreciclo)
    {
    PORTBbits.RB6=0;
    Tstep=3;
    } 
   
    }
  case 3: {
   if (Tperiodoact>=Tperiodomax)
    {
     PORTBbits.RB6=1;   
     Tstep=1;
     Tperiodoact=0;
     Tcaptfin=0;
    
    }
   
    } 
}
//**************************************************************************

//Inicio captura motor MAIN *************************************************************
if (Mperiodoact>=Mtcapt & !Mcaptfin)
{
  WriteTimer1(0);
  PIR1bits.TMR1IF=0;
  PIE1bits.TMR1IE=1;
  T1CONbits.TMR1ON = 1; //Arranca el timer1
 
   
  OpenCapture1 (CAPTURE_INT_ON &   //CCP1 activo
  CAP_EVERY_RISE_EDGE);
  Mcaptfin=1;
}
//Inicio captura motor TAIL *************************************************************
if (Tperiodoact>=Ttcapt & !Tcaptfin)
{
  WriteTimer3(0);
  PIR2bits.TMR3IF=0;
  PIE2bits.TMR3IE=1;
  T3CONbits.TMR3ON = 1; //Arranca el timer3
 
   
  OpenCapture2 (CAPTURE_INT_ON &   //CCP2 activo
  CAP_EVERY_RISE_EDGE);
  Tcaptfin=1;
}
//Control de LED1 ************************************************************************
if (Mperiodoact>=tcicloLED1 & cicloLED1>=1000 & !tLED1fin) //Ciclo de LED 1s excedido, reinicia control .. -> LED on
{
  cicloLED1=0;   //inicio de ciclo LED (1s)
  t1LED1step=1; //paso 1
  PORTBbits.RB4=1; //LED1 on
  //Combinación de tiempos de LED en función de estado
  // on(t1)--->off(t2)--->on(t3)---> off hasta 1s ---\
  //  ^-----------------------------------------------\
  if (previous_duty_cicle1==0)
  {        //Tiempo LED con MAIN en reposo
   t1LED1=000;
   t2LED1=200;
   t3LED1=300;
  }
  if (previous_duty_cicle1==10000)    //Tiempos LED con MAIN 100%
  {
   t1LED1=900;
   t2LED1=900;
   t3LED1=900;
  }
  if ((previous_duty_cicle1>0) & (previous_duty_cicle1<10000))       //Tiempos LED con MAIN <>0% y 100%
  {
   t1LED1=100;
   t2LED1=800;
   t3LED1=900;
  }
   
}
if (Mperiodoact>=tcicloLED1 & !tLED1fin) //Ejecuta una vez cada 20ms en tcicloLED (10ms)
{
 
 
  if (t1LED1step & cicloLED1>=t1LED1) //t1 sobrepasado -> LED off
  {
 
   PORTBbits.RB4=0;
   t1LED1step=0;
   t2LED1step=1;
  }
  if (t2LED1step & cicloLED1>=t2LED1) //t2 sobrepasado -> LED on
  {
 
   PORTBbits.RB4=1;
   t2LED1step=0;
   t3LED1step=1;
   
  }
  if (t3LED1step & cicloLED1>=t3LED1) //t3 sobrepasado -> LED off
  {
 
   PORTBbits.RB4=0;
   t3LED1step=0;
  }
 
  tLED1fin=1;
}
//Control de LED2 ************************************************************************
if (Mperiodoact>=tcicloLED2 & cicloLED2>=1000 & !tLED2fin) //Ciclo de LED 1s excedido, reinicia control .. -> LED on
{
  cicloLED2=0;   //inicio de ciclo LED (1s)
  t1LED2step=1; //paso 1
  PORTBbits.RB3=1; //LED2 on
  //Combinación de tiempos de LED en función de estado
  if (previous_duty_cicle1==0)
  {        //Tiempo LED con MAIN en reposo
   t1LED2=100;
   t2LED2=100;
   t3LED2=100;
  }
  if (previous_duty_cicle1==10000)    //Tiempos LED con MAIN 100%
  {
   t1LED2=9999;
   t2LED2=9999;
   t3LED2=9999;
  }
  if ((previous_duty_cicle1>0) & (previous_duty_cicle1<10000))       //Tiempos LED con MAIN <>0% y 100%
  {
   t1LED2=9999;
   t2LED2=9999;
   t3LED2=9999;
  }
   
}
if (Mperiodoact>=tcicloLED2 & !tLED2fin) //Ejecuta una vez cada 20ms en tcicloLED (10ms)
{
 
 
  if (t1LED2step & cicloLED2>=t1LED2) //t1 sobrepasado -> LED off
  {
 
   PORTBbits.RB3=0;
   t1LED2step=0;
   t2LED2step=1;
  }
  if (t2LED2step & cicloLED2>=t2LED2) //t2 sobrepasado -> LED on
  {
 
   PORTBbits.RB3=1;
   t2LED2step=0;
   t3LED2step=1;
   
  }
  if (t3LED2step & cicloLED2>=t3LED2) //t3 sobrepasado -> LED off
  {
 
   PORTBbits.RB3=0;
   t3LED2step=0;
  }
 
  tLED2fin=1;
}
}
}
« Última modificación: 04 de Enero de 2010, 22:55:46 por c4pic » En línea
c4pic
Invertidos
*******

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 2.980


Volando en Zgz - RC Cadrete Club


« Respuesta #41 : 04 de Enero de 2010, 22:53:03 »

Un resumen de lo que he montado:


* Hardware: 

Conversor PWM:
   Cristal 8Mhz
   2 Condensadores 27pF
   2 resistencias 470omh
   2 led

Motor:
   Dragonfly MO-2800-1

ESC:
   Hobbywing P25A

* Software:

Programación en C18
Uso de bootloader COLT  para carga RS232 del software

* PIC 18F2550:

Periférico CCP1/Timer1 para captura de PWM (motor principal)
Periférico CCP2/Timer3 para captura de PWM (motor de cola) (por ahora sin uso)
Salidas PWM ESC generadas por software  (Base de tiempo Timer2)
Ejecución de tareas repartidas en el tiempo, para no saturar el procesamiento del PIC y conseguir así la máxima precisión en las señales PWM.
« Última modificación: 04 de Enero de 2010, 22:55:08 por c4pic » En línea
PSG
Estacionarios
**

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 65



« Respuesta #42 : 05 de Enero de 2010, 16:06:00 »

Buff pero eso de programar y eso que es? es indispensable para ponerle el brushless en el principal hacer lo que has puesto en el plano?Que tiene mucha soldadura y resistencias y la ostia !!! LOL...Vamos que yo no soy un manitas asi que va ser que ;( yo no tengo too eso que tienes puesto tu para soldaduras de resistencias y esas movidas...Me refiero a la placa esa para probar circuitos etc... No es poner el motor el variador y ya esta ? xD ..
 
PD: Este que motores tiene? 
 
http://static.rcgroups.com/forums/attachments/2/5/3/2/8/0/a2849666-82-DSC00878.jpg?d=1257062267
« Última modificación: 05 de Enero de 2010, 16:25:42 por PSG » En línea
superduke
Traslaciones
***

Reputacion: +6/-0
Desconectado Desconectado

Mensajes: 874



Email
« Respuesta #43 : 05 de Enero de 2010, 21:57:32 »

hola c4pic ,estoy esperando ansioso la llegada de mi primer heli grande listo pa volar el cb180d ,tengo pedido ya el kit del copter v2 ,pero de momento con el walkera para aprender e tenido coaxiales medio de juguete ,estoy dandoleal simulador ,no se ,se me hara muy dificil el walkera? bueno por algo hay que empezar en el mundillo de los ciclicos .e leido que se funde el motor trasero.,el primero que cambiaste (CN12-RLC) ese dices que va bien no? es para pedirlo desde ya .bueno sin mas espero me llegue pronto pa aprender un poco y luego salto al copterx450 v2 ¡¡   
En línea

copterx 450 aev2 ,futaba 401 -fallecido
atom 500,vendido
FUSION 50 12S  MICROBEASTX
TREX 500 PRO DFC
JR XG11 DMSS
JR DSX7 DSMJ
c4pic
Invertidos
*******

Reputacion: +0/-0
Desconectado Desconectado

Mensajes: 2.980


Volando en Zgz - RC Cadrete Club


« Respuesta #44 : 06 de Enero de 2010, 09:29:38 »

hola,

PSG:

El receptor del CB180 tiene integrado un ESC para motores de escobillas, que en nada se parece al control que necesita un motor brushless. Para integrar un brushless en el CB180 no es suficiente con el motor y ESC brushless, necesitas una señal de control del ESC que el CB180 no te da.

Lo que yo he hecho es precisamente ese adaptador de señales de control, he convertido la señal de control del ESC de escobillas del CB180 a una señal de control compatible con un ESC brushless. A esto, se le denomina convertidor PWM.

En EEUU puedes encontrar este tipo de convertidor (thesteve PWM converter) para llegar y montar, y como está realizado con componentes SMD es super pequeño. Yo simplemente, he trabajado en uno propio, para disfrutar un poco de la electrónica y para tener un control absoluto sobre su funcionamiento. En el caso de querer montar un brushless yo te recomiendo ir al conversor 'thesteve', mi convertidor requiere de mucho 'bricolaje' electrónico.

Esa foto que pones, tiene montados motores xtreme :

Para el de cola lleva el xtreme DD, que como ya he comentado no sirve para el CB180.
Para el motor principal lleva montado un xtreme 380X :

http://www.xtreme-production.com/xtreme/index.php?page=shop.product_details&flypage=shop.flypage&product_id=103&category_id=8&manufacturer_id=0&option=com_virtuemart&Itemid=31
 
Es un motor de escobillas, que en principio tiene más potencia que el original, las escobillas son reemplazables ya que venden repuestos y además lleva rodamientos de buena calidad. A ese motor tendrías que ponerle el piñón original, que previamente deberías de extraerlo (sin extractor de piñones no es nada facil). El motor tiene más consumo que el original, por lo que he leido por ahí, creo que la electrónica aguanta, pero la duración de la batería se reduce un poco.
 
----------------------------------------------------------------------------
 
superduke:
 
bienvenido, creo que has hecho una buena elección. El CB180 es un gran heli. Tomateló con calma y no tendrás problemas, es facil de controlar y muy estable. Como paso previo a un 6CH lo veo mucho más adecuado que un coaxial.
 
El punto debil, es la calidad del motor de cola original, que efectivamente, no te va a durar mucho más de 20 vuelos. El GWS CN12 RLC es el que yo he montado y va bien. Como ya he comentado, hay que hacer una pequeña modificación mecánica, pero es muy sencilla si se hace con herramienta adecuada.
 
un saludo.
 
 
En línea
Páginas: 1 2 [3] 4 5 ... 42
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC
TinyPortal v0.9.8 © Bloc


Copyright ©2007-2023 www.HelicopterosRC.net
XHTML 1.0 válido! CSS válido! Dilber MC Theme by HarzeM modified by Madcortina