Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Электроника средств транспорта Ремонт и разработка дополнительного автооборудования. Бортовые компьютеры и многое другое.

 
Опции темы
Непрочитано 26.05.2016, 00:26  
vladisslav1
Прописка
 
Регистрация: 25.03.2013
Адрес: Глубокое замкадье
Сообщений: 216
Сказал спасибо: 3
Сказали Спасибо 71 раз(а) в 55 сообщении(ях)
vladisslav1 на пути к лучшему
По умолчанию Re: Детский электромобиль и доводка его до ума

Сообщение от -vitalik- Посмотреть сообщение
?
Схема с ошибкой - TIP41/TIP42 взорвутся. Нужно базы крест-накрест.
Реклама:
vladisslav1 вне форума  
Непрочитано 26.05.2016, 10:09  
-vitalik-
Вид на жительство
 
Аватар для -vitalik-
 
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,397
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
-vitalik- на пути к лучшему
По умолчанию Re: Детский электромобиль и доводка его до ума

Сообщение от vladisslav1 Посмотреть сообщение
Схема с ошибкой - TIP41/TIP42 взорвутся. Нужно базы крест-накрест.
Недоглядел. Спасибо
-vitalik- вне форума  
Непрочитано 28.05.2016, 22:32  
Unknown
Прописка
 
Регистрация: 23.02.2005
Сообщений: 166
Сказал спасибо: 203
Сказали Спасибо 46 раз(а) в 27 сообщении(ях)
Unknown на пути к лучшему
По умолчанию Re: Детский электромобиль и доводка его до ума

Я сейчас в деревне с планшета, инет плохой, загрузить не могу.
Нашел на изи в комментариях (выкладывал ещё где-то подробное описание, но не нашел), схема там немного неполная, но сам ШИМ и описание педали с фото есть: http://we.easyelectronics.ru/my/ALEN/comment/
Там в комментариях я ALEN
Unknown вне форума  
Сказали "Спасибо" Unknown
-vitalik- (30.05.2016)
Непрочитано 08.09.2016, 15:23  
-vitalik-
Вид на жительство
 
Аватар для -vitalik-
 
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,397
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
-vitalik- на пути к лучшему
По умолчанию Re: Детский электромобиль и доводка его до ума

Проделана некоторая работа. Все сделано по прилагаемым схемам. Программа передатчика:
Код:
// Transmitter
// PIC16F628

// Speed, analog PORTA.F0
// Battery, analog PORTA.F1
// Comparator reserved PORTA.F2
// Comparator reserved PORTA.F3
#define Power PORTA.F4
// Reset PORTA.F5
#define BattLow PORTA.F6
#define TX PORTA.F7

#define Left PORTB.F0
#define Right PORTB.F1
#define Front PORTB.F2
#define Rear PORTB.F3
#define Brake PORTB.F4

#define CommandPort PORTB

char i, BattLevel;
char Addr,Speed,Comm,Summ;
char OldPort, OldSpeed;
char PowerTimer;
bit Sent;
char ResentTimer;

void preset (void)
        {
        STATUS = 0b00000000;
        OPTION_REG = 0b00000000;
        INTCON=0b11000000; //Int on periphery
        PIE1=0b00000001; //Int on TMR1
        T1CON = 0b00010001;  //TMR1 each 2*65536=131072 mkS
        CMCON = 0b00000010; //A0, A1 - inputs C1, C2
        VRCON = 0b10100000; // 0...3.125 V
        TRISA=0b00101111;
        TRISB=0b11111111;
        }

void send_data(unsigned char txaddr,unsigned char txspeed,unsigned char txcomm,unsigned char txsumm)
{
  unsigned char tbit, txdat;
  // make 250uS start bit first
  TX = 1;
  Delay_uS(1600);
  TX = 0;
  Delay_uS(400);
  
  txdat = txaddr;
  // now loop and send 8 bits
  for(tbit=0; tbit‹8; tbit++)
  {
    TX = 1;
    Delay_uS(400);
    if(txdat.F7) {Delay_uS(400);}  // increase period if is a 1 bit!
    TX = 0;
    Delay_uS(400);
    txdat ‹‹= 1;                // roll data byte left to get next bit
  }
  txdat = txspeed;
  // now loop and send 8 bits
  for(tbit=0; tbit‹8; tbit++)
  {
    TX = 1;
    Delay_uS(400);
    if(txdat.F7) {Delay_uS(400);}  // increase period if is a 1 bit!
    TX = 0;
    Delay_uS(400);
    txdat ‹‹= 1;                // roll data byte left to get next bit
  }
  txdat = txcomm;
  // now loop and send 8 bits
  for(tbit=0; tbit‹8; tbit++)
  {
    TX = 1;
    Delay_uS(400);
    if(txdat.F7) {Delay_uS(400);}  // increase period if is a 1 bit!
    TX = 0;
    Delay_uS(400);
    txdat ‹‹= 1;                // roll data byte left to get next bit
  }
  txdat = txsumm;
  // now loop and send 8 bits
  for(tbit=0; tbit‹8; tbit++)
  {
    TX = 1;
    Delay_uS(400);
    if(txdat.F7) {Delay_uS(400);}  // increase period if is a 1 bit!
    TX = 0;
    Delay_uS(400);
    txdat ‹‹= 1;                // roll data byte left to get next bit
  }
}

void Transmit()
{
  Summ = Addr + Speed + Comm;
  send_data(Addr,Speed,Comm,Summ);
}

void main()
  {
   preset();
   TX = 0;
   OldPort = 0;
   Sent = 0;
   ResentTimer = 0;
   
   Addr = 32;
   delay_ms(500);
   
   while(1)
    {
     //Check baterry
     i = 0;
     while (!(CMCON.F7))
       {
          VRCON = 0b10100000 + i;
          i++;
          delay_us(500);
       }
     VRCON = 0b10100000;
     BattLow = ~(i › 7);  //1.8V (i=6: U=1.25)
     //Measure speed
     i = 0;
     while (!(CMCON.F6))
       {
          VRCON = 0b10100000 + i;
          i++;
          delay_us(500);
       }
     VRCON = 0b10100000;
     Speed = i-1;
     if (Speed › 15) Speed = 15;
     //Speed changed
     if ((Speed != OldSpeed)&&(CommandPort != 255))
       {
         ResentTimer = 0;
         OldSpeed = Speed;
         Sent = 1;
       }
     // Command changed
     if (CommandPort != OldPort)
       {
         ResentTimer = 0;
         OldPort = CommandPort;
         Comm = CommandPort;
         Sent = 1;
       }
     // Execute sending
     if (Sent)
       {
         Transmit();
         Sent = 0;
       }
    }
  }

void interrupt(void)
{
  if(PIR1.TMR1IF) //Each 0.13 s
    {
       if (CommandPort == 255) PowerTimer++; else {PowerTimer = 0; Power = 0;}
       if (PowerTimer›200) Power = 1; //26 sec
       
       if (CommandPort != 255) ResentTimer++;
       if (ResentTimer ›= 4) {ResentTimer = 0; Sent = 1;} //each 0.52 s
       
       PIR1.TMR1IF = 0;
    }
}
И приемника?
Код:
// Receiver
// PIC16f876

// Analog current PORTA.F0
// Analog voltage PORTA.F1
#define Pedal PORTA.F2
// Analog local speed PORTA.F3
//#define PORTA.F4
//#define PORTA.F5

#define RX PORTB.F0
//#define  PORTB.F1
//#define  PORTB.F2
//#define  PORTB.F3
#define LeftTurn PORTB.F4
#define RightTurn PORTB.F5
#define RewRelay PORTB.F6
#define FwdRelay PORTB.F7

#define data_in PORTC.F0
// PWM turn wheel PORTC.F1
// PWM main motor PORTC.F2
#define data_out PORTC.F3
#define latch PORTC.F4
#define clk PORTC.F5
#define dis_read PORTC.F6
//#define Charge PORTC.F7

// remote
unsigned char tiks; //tiks of TMR0
char addr, speed, comm, summ, summ_; //received data
bit reading; //sign of reading process
unsigned char b_cnt; //received bits count
bit rem_fwd, rem_rew, rem_left, rem_right, rem_break;
unsigned char rem_speed;
char RecieveTimer;
bit RemoteUsed;
// ADC
unsigned char ADCindex;
unsigned char locspeed, current, voltage;
// baterry
bit BaterryLow, BaterryEmpty, BaterryLow_, BaterryEmpty_;
unsigned char BaterryEmptyTimer, BaterryLowTimer;
// Main motor
bit RunCommand, Stop, reverse_, RemoteReverse, BackReverse, Break, OverLoad, OverLoad_;
unsigned char CurrSpeed, TaskSpeed, TaskSpeed_, OverLoadTimer;
// Adjust
unsigned char LowBatSpeed, OverCurrent, TurnWheelSpeed;
unsigned char TeachTimer,TeachParameter;
bit Teaching;
//Indication
bit ind_inc, ind_dec, blink;
unsigned char indicates;
//Inputs
unsigned char discr;
char j;
bit Bt1, Bt2, Bt3, Bt4, Local, Reverse, Enable, Charge;
bit Bt2_, Bt3_;

void Out_send(){  // Send data to shift registers
  char i,s1;
  s1 = indicates;
/*
  for (i=0;i‹8;i++)
    {
     out_data = s3.F7;
     out_clk = 1;
     out_clk = 0;
     s3 = s3 ‹‹ 1;
    }
  for (i=0;i‹8;i++)
    {
     out_data = s2.F7;
     out_clk = 1;
     out_clk = 0;
     s2 = s2 ‹‹ 1;
    }
*/
  for (i=0;i‹8;i++)
    {
     data_out = s1.F7;
     clk = 1;
     clk = 0;
     s1 = s1 ‹‹ 1;
    }
  latch = 1;
  latch = 0;
}

void preset (void)
        {
        STATUS = 0b00000000;
        OPTION_REG = 0b01000010; //divider to TMR0, 1 tick = 8 uS, overflow on 2048 uS
        INTCON = 0b11110000;  //interrupt on periphery, TMR0 and INT
        PIE1 = 0b01000011;  //interrupt on ADC, TMR2 and TMR1
        CMCON = 0b00000111; //disable comparator
        ADCON0 = 0b01000001;  //Fosc/8, enable ADC
        ADCON1 = 0b00000100;   // Result in ADRESH, An0 An1 An3
        T1CON = 0b00100001;  //TMR1 each 4*65536=262144 mkS
        CCP1CON = 0b00001100; //main motor
        CCP2CON = 0b00001100; //turn wheel motor
        PR2 = 255;
        T2CON = 0b00011110; //TMR2 On, prescale 16, overflow each 4096 mkS, interrupt 4*4096 = 16384 mkS
        TRISA = 0b00001111; //direction set
        TRISB = 0b00000001; //direction set
        TRISC = 0b00000001; //direction set
        }



void main()
  {
   preset();
   PORTA = 0;
   PORTB = 0;
   PORTC = 0;
   ADCON0 = 0b01001101; //run ADC on An1
   
   BaterryLow = 0;
   BaterryEmpty = 0;
   BaterryLow_ = 0;
   BaterryEmpty_ = 0;
   Teaching = 0;
   TeachTimer = 0;
   CurrSpeed = 0;
   TaskSpeed = 0;
   CCPR2L = 0;
   
   OverCurrent = EEPROM_Read(0x00);
   TurnWheelSpeed = EEPROM_Read(0x01);
   LowBatSpeed = EEPROM_Read(0x2);

   CCPR2L = TurnWheelSpeed;
   
   while(1)
    {
    //test block
       //if (Bt1 || Bt2 || Bt3 || Bt4) RecieveTimer = 0;
       //rem_break = Bt1;
       //rem_right = Bt2;
       //rem_fwd = Bt3;
       //rem_rew = Bt4;
       //rem_speed = 200;
    // Discret. read
    dis_read = 1;
    discr = 0;
      for (j=0;j‹8;j++)
         {
            if (data_in) discr = (discr ‹‹1)+1; else discr = (discr ‹‹1);
            clk = 1;
            clk = 0;
         }
    dis_read = 0;
    Local = discr.F0;
    Reverse = discr.F1;
    Enable = discr.F2;
    Charge = discr.F3;
    Bt1 = discr.F4;
    Bt2 = discr.F5;
    Bt3 = discr.F6;
    Bt4 = discr.F7;
    //Indication
       //indicates.F1 Stop / Teaching(blink)
       //indicates.F2 Batt.low, Overload, Teach pressed(blink) / Set limited speed
       //indicates.F3 Increase speed, Overloaded(blink) / Set overcurrent
       //indicates.F4 Decrease speed, Overloaded(blink) / Turnwheel speed adjust
       if (Teaching)
         {
           indicates.F1 = blink;
           indicates.F2 = (TeachParameter == 2);
           indicates.F3 = (TeachParameter == 0);
           indicates.F4 = (TeachParameter == 1);
           if ( (Bt2) && (!(Bt2_)) ) {TeachParameter++; Bt2_ = 1;}
           if (!(Bt2)) Bt2_ = 0;
           if (TeachParameter › 2) teachParameter = 0;
           if ( (Bt3) && (!(Bt3_)) )
            {
              if (TeachParameter == 0) OverCurrent = current;//Over current
              if (TeachParameter == 1) //Turn wheel speed
                  {
                    if (TurnWheelSpeed›=63)TurnWheelSpeed = TurnWheelSpeed - 32;
                    else TurnWheelSpeed = 0xFF;
                    CCPR2L = TurnWheelSpeed;
                  }
              if (TeachParameter == 2) LowBatSpeed = CurrSpeed;//Limited speed
              (Bt3_) = 1;
            }
           if (!(Bt3)) Bt3_ = 0;
           if (Bt4)
            {
               EEPROM_Write(0x00, OverCurrent);
               EEPROM_Write(0x01, TurnWheelSpeed);
               EEPROM_Write(0x02, LowBatSpeed);
               Teaching = 0;
            }
         }
       else
         {
           indicates.F1 = Stop;
           indicates.F2 = BaterryLow_ || BaterryLow || OverLoad_ || (Bt1 && blink);
           indicates.F3 = (ind_inc && (!(OverLoad))) || ((!(blink)) && OverLoad);
           indicates.F4 = (ind_dec && (!(OverLoad))) || ((blink) && OverLoad);
         }
    //Baterry
       BaterryEmpty_ = (voltage ‹ 138); // U ‹ 2.7V (5.4 / 2)
       BaterryLow_ = (voltage ‹ 154); // U ‹ 3V (6 / 2) 25%
    //Speed
       RunCommand = ( 
              (!(BaterryEmpty)) && 
              (!(RemoteReverse)) &&
              (!(Break)) &&
              (!(OverLoad)) &&
              (!(Charge)) &&
              ((Pedal && Local && Enable) || rem_fwd || rem_rew) 
              );
       if (RemoteUsed) TaskSpeed_ = rem_speed; else TaskSpeed_ = locspeed;
       if ( (Baterrylow)&&(TaskSpeed_ › LowBatSpeed) ) TaskSpeed_ = LowBatSpeed;
       if (BaterryEmpty || OverLoad || Break) TaskSpeed_ = 0;
       TaskSpeed = TaskSpeed_;
       Stop = (CurrSpeed == 0);
    //Direction
       if ( ((!(Enable))&&(!(RemoteUsed))&&(Stop))||(Break) ) {RewRelay = 0; FwdRelay = 0;}
       if (rem_break) Break = 1;
       if (Stop)
          {
            if ( (!(rem_fwd))&&(!(rem_rew))&&(!(Pedal)) ) Break = 0;
            if (RemoteUsed) {if (rem_rew) reverse_ = 1; else reverse_ = 0;}
            else reverse_ = Reverse;
          };
       if ( (!(BaterryEmpty)) && ((Enable)||(RemoteUsed)) && (!(Break)) )
         {
           if (Reverse_) {RewRelay = 1; FwdRelay = 0;}
                    else {RewRelay = 0; FwdRelay = 1;}
         }
       if ( (!(Stop)) && ((Reverse_ && rem_fwd)||(!(Reverse_) && rem_rew)) ) RemoteReverse = 1; //reverse was called
       if (Stop && RemoteReverse && (rem_fwd || rem_rew)) {RemoteReverse = 0; BackReverse = 1;} //remote button still hold
       if (Stop && RemoteReverse) {RemoteReverse = 0;} //remote button released
       if ( (!(rem_fwd))&&(!(rem_rew))&&(BackReverse) ) {RemoteReverse = 1; BackReverse = 0;} //back from reverse
    //Turn wheel
       LeftTurn = rem_left;
       RightTurn = rem_right;
    //Remote
       RemoteUsed = rem_fwd || rem_rew;
    //Protect
       OverLoad_ = ( (current › OverCurrent) && (!(Teaching)) );
       if ( (!(rem_fwd))&&(!(rem_rew))&&(!(Pedal))&&(Stop) ) OverLoad = 0;
    //display
     //  Out_send();
     data_out = indicates.F1;
     PORTB.F3 = indicates.F2;
     PORTB.F2 = indicates.F3;
     PORTB.F1 = indicates.F4;

    }
  }
//-------------------------------------------------------------------------------
void interrupt(void)
{ 
  if (PIR1.TMR2IF) //TMR2, speed change steps
    {
    //Speed
      if (RunCommand)
          {if (CurrSpeed‹TaskSpeed) {CurrSpeed ++; ind_inc = 1; ind_dec = 0;} else ind_inc = 0;}
          {if (CurrSpeed›TaskSpeed) {CurrSpeed --; ind_dec = 1; ind_inc = 0;} else ind_dec = 0;}
      if (!(RunCommand))
          {if (CurrSpeed›0) {CurrSpeed --; ind_dec = 1; ind_inc = 0;} else ind_dec = 0;}
      if (OverLoad || Break) CurrSpeed = 0;
      if (Charge) CCPR1L = 0; else CCPR1L = CurrSpeed;
      PIR1.TMR2IF = 0;
    }
  if (PIR1.ADIF) //ADC done, read and select ADC
    {
      if (ADCindex == 0)
         {
            current = ADRESH;
            ADCON0 = 0b01001001; //on An1
         }
      if (ADCindex == 1)
         {
            voltage = ADRESH;
            ADCON0 = 0b01011001; //on An3
         }
      if (ADCindex == 2)
         {
            locspeed = ADRESH;
            ADCON0 = 0b01000001; //on An0
         }
      ADCindex++;
      if (ADCindex›2) ADCindex=0;
      delay_us(20);
      ADCON0.GO = 1; //run ADC
      PIR1.ADIF = 0;
    }
  if (PIR1.TMR1IF) //TMR1, timers, each 0.26 S
    {
      //Lost signal
      RecieveTimer ++;
      if (RecieveTimer ›= 5) //each 1.3 s
         {
           RecieveTimer = 0; 
           rem_left = 0;
           rem_right = 0;
           rem_fwd = 0;
           rem_rew = 0;
           rem_break = 0;
           reading = 0;
         }
      //Baterry timers
      if (BaterryEmpty_) BaterryEmptyTimer++; else BaterryEmptyTimer = 0;
      if (BaterryEmptyTimer ›= 5) BaterryEmpty = 1; // 1.3 S
      if (BaterryLow_) BaterryLowTimer++; else BaterryLowTimer = 0;
      if (BaterryLowTimer ›=  50) BaterryLow = 1; // 13 S
      //Teach
      if (Bt1) TeachTimer++; else TeachTimer = 0;
      if ( (Bt1)&& (TeachTimer › 12) ) Teaching = 1; // 3 sec
      //Protect
      if (OverLoad_) OverLoadTimer++; else OverLoadTimer = 0;
      if (OverLoadTimer › 8) OverLoad = 1; // 2 sec
      //
      blink = ~(blink);
      PIR1.TMR1IF = 0;
    }
  if (INTCON.T0IF) //TMR0 overflow, lost radio signal
    {
      b_cnt = 0;
      reading = 0;
      INTCON.T0IF = 0;
    }
  if (INTCON.INTF) //INT0, signal from radio unit
    {
      TMR0 = 0;
      while(RX) {if (INTCON.T0IF) break;}
      tiks = TMR0;
      TMR0 = 0;
    //START sign, 200 tick's
    if (tiks ›= 175 && tiks ‹ 225)
      {
         b_cnt = 0;
         reading = 1;
         addr = speed = comm = summ = 0;
      }
    //1, 100 tick's
    if (tiks ›= 75 && tiks ‹ 125)
      {
         b_cnt = b_cnt + 1;     //increate bit counter
         if (b_cnt ‹ 9) addr = (addr ‹‹ 1) + 1;                    //address
         if (b_cnt ›= 9 && b_cnt ‹ 17) speed = (speed ‹‹ 1) + 1;   //address_
         if (b_cnt ›= 16 && b_cnt ‹ 25) comm = (comm ‹‹ 1) + 1;    //command
         if (b_cnt ›= 24) summ = (summ ‹‹ 1) + 1;                 //command_
      }
    //0, 50 tick's
    if (tiks ›= 25 && tiks ‹ 75)
      {
         b_cnt = b_cnt + 1;     //increate bit counter
         if (b_cnt ‹ 9) addr = (addr ‹‹ 1);                    //address
         if (b_cnt ›= 9 && b_cnt ‹ 17) speed = (speed ‹‹ 1);   //address_
         if (b_cnt ›= 16 && b_cnt ‹ 25) comm = (comm ‹‹ 1);    //command
         if (b_cnt ›= 24) summ = (summ ‹‹ 1);                 //command_
      }
    if (b_cnt == 32)      //32 bits received
      {
         reading = 0;
         summ_ = addr+speed+comm;
         if ( (addr == 32)&&(summ_ == summ) )
            {
              RecieveTimer = 0;
              rem_left = (~(comm.F0)) && (comm.F1);
              rem_right = (~(comm.F1)) && (comm.F0);
              rem_fwd = (~(comm.F2)) && (comm.F3);
              rem_rew = (~(comm.F3)) && (comm.F2);
              rem_break = (~(comm.F4)) || ((~(comm.F2)) && (~(comm.F3)));
              rem_speed = speed;
              rem_speed = rem_speed ‹‹ 4;
            }
         else
           {
           }
         b_cnt = 0;
      }
    INTCON.INTF = 0;
    }
}
В протеусе все работало, в реальности - выявились некоторые проблемы:
1. Передатчик не всегда корректно определяет положение потенциометра и напряжение батарей. Может, неправильная задержка времени?
2. Логический "0" на А4 в передатчике поддерживает питание включенным около 30сек после отпускания кнопки. но работает не стабильно, при установке "1", транзистор закрывается, напряжение проседает, и контроллер опять открывает транзистор. Может стоит добавить НПН транзистор и поменять включающий сигнал на "1" ?
3. В приемнике: микросхема 74HC595 не заработала. пробовал 2 разных штуки. Пока она установлена, меандр на выводе С5 не превышает 2 вольт. Сам вывод Shift м.с. на общий не звонится. Пробовал делать задержки в разумных значениях, не помогло. Светодиоды временно перекинул на свободные выводы МК (в программе - учтено). С микросхемой - буду разбираться на макетке, хотя интересно, она же должна тянуть намного больше 4 МГц.
4. И еще - очень не стабильная работа радиоуправления. Модули - дешевые, на 433 МГц. До этого не раз использовал их с аналогичным алгоритмом, работали на более 50 метров, никогда проблем не было.
Попробую после приема старт сигнала выключать прерывания периферии и включать обратно после приема команды или пропажи радиосигнала. Или стоит вынести приемник дальше от платы?

Буду благодарен за конструктивную критику
Миниатюры:
Нажмите на изображение для увеличения
Название: ElCar_Prot.GIF
Просмотров: 0
Размер:	30.4 Кб
ID:	100729   Нажмите на изображение для увеличения
Название: ElCar_TX.GIF
Просмотров: 0
Размер:	30.4 Кб
ID:	100730   Нажмите на изображение для увеличения
Название: ElCar_RX.GIF
Просмотров: 0
Размер:	91.7 Кб
ID:	100731  

-vitalik- вне форума  
Непрочитано 29.09.2016, 14:30  
ovpetr
Прописка
 
Регистрация: 04.03.2005
Адрес: Альметьевск
Сообщений: 141
Сказал спасибо: 572
Сказали Спасибо 58 раз(а) в 30 сообщении(ях)
ovpetr на пути к лучшему
По умолчанию Re: Детский электромобиль и доводка его до ума

Сообщение от -vitalik- Посмотреть сообщение
2. Логический "0" на А4 в передатчике поддерживает питание включенным около 30сек после отпускания кнопки. но работает не стабильно, при установке "1", транзистор закрывается, напряжение проседает, и контроллер опять открывает транзистор. Может стоит добавить НПН транзистор и поменять включающий сигнал на "1" ?
Повторное включение может происходить через подтягивающие резисторы кнопок при выключении питания контролера (при снижении питания контролера ниже 3.3В - контролер еще работает, а открывающее напряжение на базе VT12 уже появляется). Поэтому выход А4 необходимо отключить от кнопок управления, а включать отдельной кнопкой.
Сообщение от -vitalik- Посмотреть сообщение
4. И еще - очень не стабильная работа радиоуправления.
Возможны помехи от ШИМа, движков и т. д.

У меня хорошо работает шифратор-дешифратор по протоколу из журнала РАДИО_№8 за 2008г. стр.44. Правда увеличил число аналоговых каналов до четырех, а дискретных до восьми.

Последний раз редактировалось ovpetr; 29.09.2016 в 14:55.
ovpetr вне форума  
Сказали "Спасибо" ovpetr
-vitalik- (29.09.2016)
Непрочитано 29.09.2016, 16:46  
-vitalik-
Вид на жительство
 
Аватар для -vitalik-
 
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,397
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
-vitalik- на пути к лучшему
По умолчанию Re: Детский электромобиль и доводка его до ума

Сообщение от ovpetr Посмотреть сообщение
...
У меня хорошо работает шифратор-дешифратор по протоколу из журнала РАДИО_№8 за 2008г. стр.44. ..
Точно ли №8 за 2008 ? нету там такой статьи

UPD: нашел, это в журнале за 2006 год. Но там не описаны временные интервалы посылок

Последний раз редактировалось -vitalik-; 30.09.2016 в 11:30.
-vitalik- вне форума  
Непрочитано 01.10.2016, 00:43  
ovpetr
Прописка
 
Регистрация: 04.03.2005
Адрес: Альметьевск
Сообщений: 141
Сказал спасибо: 572
Сказали Спасибо 58 раз(а) в 30 сообщении(ях)
ovpetr на пути к лучшему
По умолчанию Re: Детский электромобиль и доводка его до ума

Сообщение от -vitalik- Посмотреть сообщение
Точно ли №8 за 2008 ? нету там такой статьи

UPD: нашел, это в журнале за 2006 год. Но там не описаны временные интервалы посылок
Извините. Ошибся с годом. конечно №8 за 2006г. А временные интервалы пришлось вычислять из программы на ASMe которая находится на FTP сервере журнала. Если интересно, могу поискать то что у меня получилось. Должно где то остаться и комментировано, должно быть, по подробней.
ovpetr вне форума  
Сказали "Спасибо" ovpetr
-vitalik- (03.10.2016)
Непрочитано 03.10.2016, 10:28  
-vitalik-
Вид на жительство
 
Аватар для -vitalik-
 
Регистрация: 29.03.2009
Адрес: Бровары, Украина
Сообщений: 326
Сказал спасибо: 1,397
Сказали Спасибо 82 раз(а) в 46 сообщении(ях)
-vitalik- на пути к лучшему
По умолчанию Re: Детский электромобиль и доводка его до ума

Сообщение от ovpetr Посмотреть сообщение
...Если интересно, могу поискать то что у меня получилось. Должно где то остаться и комментировано, должно быть, по подробней.
Буду очень благодарен
-vitalik- вне форума  
Непрочитано 03.10.2016, 19:30  
ovpetr
Прописка
 
Регистрация: 04.03.2005
Адрес: Альметьевск
Сообщений: 141
Сказал спасибо: 572
Сказали Спасибо 58 раз(а) в 30 сообщении(ях)
ovpetr на пути к лучшему
По умолчанию Re: Детский электромобиль и доводка его до ума

По ссылке два АСМ файла - шифратор и дешифратор команд радиоуправления. На выходе дешифратора 4 аналоговых канала с РРМ управлением и 4 дискретных канала. Программы взяты из опубликованной в журнале Радио№8_2006 статьи С. Духовникова "Шифратор и дешифратор пропорционального управления" немного доработанных под свои нужды.
Вложения:
Тип файла: rar Radio_08_2006.rar (3.8 Кб, 0 просмотров)
ovpetr вне форума  
Сказали "Спасибо" ovpetr
-vitalik- (05.10.2016)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot