Sida 1 av 1

MCU för quadcopter

Postat: 4 juli 2018, 17:54:52
av Shimonu
Tja

Har jobbat på att bygga en quadcopter relativt grundligt. Ingen färdigt kontroller eller annat. Det är kroppen, ESCer och motorer som är köpta färdiga egentligen och resten ska styras med MCU och annan hårdvara som är köpt själv. Har ingen färdig radio eller så utan det körs också med annan hårdvara.

Problemet jag stött på är att hitta en MCU som kan driva 4 PWM-signaler oberoende. Har hittat MCUer som säger sig ha 6 PWM men i de fallen verkar det som att de är synkroniserade i par och man faktiskt bara kan få 3 unika PWM-signaler.

Tänker jag fel eller är det svårt att hitta MCUer med så många generatorer?

Jag vill bara ha kretasr i DIP-format om det inte finns snygga breakout boards som kan programmeras med vanliga SPI-gränssnitt. Tips?

Re: MCU för quadcopter

Postat: 4 juli 2018, 18:15:42
av Andax
Du skulle ju titta på STM32. De finns i Arduino-nano-formfaktor med två enkla stift-lister med I/O. Då får du en inbyggd ST-Link/v2 också för debuggning.

Titta på evalkortet Nucleo-L432KC...

Re: MCU för quadcopter

Postat: 4 juli 2018, 18:21:20
av Shimonu
Går det att komma runt att behöva använda Arduinos utvecklingsmiljö? Har aldrig funnit den speciellt smidig men tycker deras produkter är rätt spännande annars.

Re: MCU för quadcopter

Postat: 4 juli 2018, 18:28:50
av Klas-Kenny
Finns precis hur många som helst.

Kolla även på Output Compare, vilket kan generera PWM utan problem.

Re: MCU för quadcopter

Postat: 4 juli 2018, 18:30:05
av Glattnos
Håller med, STM32 används av många controllers och är bra, dock finns den väl inte i DIP-kapsel utan det blir nog nån breakoutbord.
Fast vad menar du med unika PWM-signaler? Du kan ju styra 4st ESC med två timers som har två PWM vardera. Det kan nog de flesta MCU.

Du kan använda Arduino-hårdvara och programmera själv via ISP eller SP-Link eller vad det nu heter.
Jag köpte en Nucleo-64 som är programmerare och en STM32 i ett kit som jag inte hunnit titta så mycket på ännu men det verkar vara en bra start om man inte använt STM32 tidigare.

Re: MCU för quadcopter

Postat: 4 juli 2018, 18:40:59
av Shimonu
Glattnos, det är fullt möjligt att jag bara inte lyckats få till den fjärde PWMen och bara tänker fel. Jag vill ju kunna styra 4 st PWM som är oberoende av varandra. Jag fick för mig att kanaler som delade timer skulle få samma signal men det kanske snarare är så att deras puls bara börjat samtidigt men kan ha olika bredd?

Re: MCU för quadcopter

Postat: 4 juli 2018, 18:54:34
av Andax
Precis, ta STM32L432 som exempel. TIM1 och TIM2 har båda 4 compare channels. Dvs skapar du PWM med TIM1 så kan du ha 4 oberoende pulsbredder ut, men timingen startar samtidigt då de är baserade på samma räknare.

Re: MCU för quadcopter

Postat: 4 juli 2018, 19:10:32
av Shimonu
Inser också att jag måste gjort något fel. Försöker jag köra PD6 och PB3 så får ingen output, linorna är bara låga.

PD3 och PD5 ger output.

Ser ni något fel?

Kod: Markera allt

void Pwm_Initialize(Pwm_Type Pwm_Source, U8 Compare_Value)
{
  C8 Error_Message[ MAX_LOGMESSAGE_LENGTH ];

  switch(Pwm_Source)
  {
    case PWM_PD6:
      TCCR0A = _BV(COM0A1) | _BV(WGM02) | _BV(WGM01) |_BV(WGM00);
      TCCR0B = _BV(CS01) | _BV(CS00);
      OCR0A  = Compare_Value;
      Set_Output(MP_GPIO_PD6);
      break;
    case PWM_PB1:
      TCCR1A = _BV(COM1A1) | _BV(WGM12) | _BV(WGM10);
      TCCR1B = _BV(CS11) | _BV(CS10);
      OCR1A  = Compare_Value;
      Set_Output(MP_GPIO_PB1);
      break;
    case PWM_PB3:
      TCCR2A = _BV(COM2A1) | _BV(WGM22) | _BV(WGM21) |_BV(WGM20);;
      TCCR2B = _BV(CS21) | _BV(CS20);
      OCR2A  = Compare_Value;
      Set_Output(MP_GPIO_PB3);
      break;

    case PWM_PD5:
      TCCR0A = _BV(COM0B1) | _BV(WGM02) | _BV(WGM01) |_BV(WGM00);
      TCCR0B = _BV(CS01) | _BV(CS00);
      OCR0B  = Compare_Value;
      Set_Output(MP_GPIO_PD5);
      break;
    case PWM_PB2:
      TCCR1A = _BV(COM1B1) | _BV(WGM10);
      TCCR1B = _BV(CS11) | _BV(CS10);
      OCR1B  = Compare_Value;
      Set_Output(MP_GPIO_PB2);
      break;
    case PWM_PD3:
      TCCR2A = _BV(COM2B1) | _BV(WGM22) | _BV(WGM21) |_BV(WGM20);
      TCCR2B = _BV(CS21) | _BV(CS20);
      OCR2B  = Compare_Value;
      Set_Output(MP_GPIO_PD3);
      break;
    default:
      sprintf(Error_Message, "Pwm_Initialize: Pwm pin does not exist %u", Pwm_Source);
      Logger_Log(Error_Message);

  } // switch
}

Re: MCU för quadcopter

Postat: 4 juli 2018, 19:15:31
av Andax
Vad är det för MCU? Kolla så det inte är en open-drain/open-collector utgång på de pinnar som du bara får låg ut.

Re: MCU för quadcopter

Postat: 4 juli 2018, 19:18:04
av Shimonu
Atmega328P

Vad jag kan läsa mig till ska ingen vara open drain/collector.

Kan det dumma till sig av att jag initierar samma timer flera gånger? Om jag struntar i att initiera andra utgångarna på samma timer så funkar det.

Dumskalle man är, jag skriver ju över initieringen. Så enkelt var det.

Re: MCU för quadcopter

Postat: 1 oktober 2018, 08:41:54
av LHelge
Har byggt en multirotorcontroller med en STM32F405RG. använder 8 st capture för att läsa inputs från RC receivern och 8 st compare för att styra 8 ESC, funkar utmärkt. Just F4:an verkar vara väldigt populär även till köpe-controllers.

Trevligt med hårdvarustöd för flyttal om man vill köra lite skojiga filter.

Re: MCU för quadcopter

Postat: 1 oktober 2018, 13:42:05
av Micke_s
En fri bra Utvecklingsmiljö för stm32 är atollic truestudio

Re: MCU för quadcopter

Postat: 1 oktober 2018, 13:47:18
av AndLi
IAR är också fri upp till en relativt stor kodmängd, 128k om jag inte missminner mig... Det gjorde jag, eller så är den sänkt till 32kByte nu...