Stránka 1 z 1

PWM servosignál (RC) a krokový motor

Napsal: 21 led 2019, 00:06
od jyrry
Řešil jste někdo řízení (směr a otáčky) malého krokového motoru klasickým servosignálem PWM (50Hz, impulzy o šířce 1,0-2,0ms)?

Re: PWM servosignál (RC) a krokový motor

Napsal: 21 led 2019, 07:09
od pavel1tu
ANO,
koukni na knihovnu Servo.h myslím

pak jedině že bych doma něco vyhrabal ze zálohy ...

PS: dost velký problém po zapnutí arduina, pokud vadí že se to hejbne ...

Re: PWM servosignál (RC) a krokový motor

Napsal: 21 led 2019, 07:35
od jankop
Jsou dvě možnosti. RC členem vyfiltrovat PWM signál a A/D převodníkem měřit napětí. Na základě tohoto napětí pak pomocí vhodné knihovny, kterých je spousta, krokový motor ovládat. Mnohem lepší by ovšem bylo pomocí přerušení měřit délku impulzu. Pokud jsem dobře pochopil tvůj dotaz, tak chceš přijímačem řídit krokový motor a v tom případě zmiňovanou knihovnu Servo.h nevyužiješ.
Tady bys mohl najít inspiraci pro první krok:
http://www.benripley.com/diy/arduino/th ... h-arduino/

Re: PWM servosignál (RC) a krokový motor

Napsal: 21 led 2019, 07:45
od jyrry
No... ja uz neco napsaneho mam a chodi mi to... knihovny nevyuzivam, ani tu stepper.h z Arduina. Spis mne zajimalo jestli nekdo uz neco ma, ze bych se priucil, jsem strojar a elektroniku mam jako druheho konicka, pristupuju k tomu strojarsky :-)
Programoval jsem si male PICy, s A. sj hraju teprve chvili...
Jsem ted mimo domov ale pak sem dam ten muj kod, na zkouknuti.
PWM servosignal ctu pri preruseni na vstupu, pres micros() nacitam jeho delku. To mi tak nejak jde. Horsi je generovani pulzu STEP pro driver. Tam bych rad vyuzil preruseni od timeru ale to jsem zatim nerozlousknul, v PICech to bylo snazsi...

Re: PWM servosignál (RC) a krokový motor

Napsal: 21 led 2019, 07:54
od jyrry
Dik za odkaz, koukam ze jsem dosel skoro k tomu samemu, jen jsem nevedel ze jdou prirazovat preruseni v programu; ja mam preruseni na CHANGES a pak testuju jestli je 0 nebo 1... Tohle si hned vyzkousim, to pak bude uplne super :-)

Re: PWM servosignál (RC) a krokový motor

Napsal: 21 led 2019, 17:17
od pavel1tu
Já pochopil z toho RC, že je to klasické RC servo, kde šířka signálu v ms určuje natočení serva ...

Re: PWM servosignál (RC) a krokový motor

Napsal: 21 led 2019, 17:46
od jyrry
Tady je ten můj výplod, verze asi tak V86.64 :-D

Kód: Vybrat vše

// impulzy pro step driver @ Arduino nano
// rizeni otaceni veze tanku RC impulzy PWM 

namespace {
  byte pin_krok = 12; // pin STEP
  byte pin_smer = 11; // pin DIR
  byte inp_PWM = 2;   // pin PWM in 
  int hystereze = 40;
  int neutral_uS = 1500;
  long int pauza_mS;
  int cislo;
  byte smer;
  long int inp_uS = 1500;
  long int new_uS;
  long int aktual_uS;
  int min_mS = 2;
  int max_mS = 400;
  // long int aktual_poz = 0;
  long int ne_h_uS;
  long int neah_uS;
  long int max_min_mS;
  }      

void setup() {
  pinMode(pin_krok, OUTPUT); // signál STEP
  pinMode(pin_smer, OUTPUT); // signál DIR
  pinMode(inp_PWM, INPUT_PULLUP);
  pinMode(10, OUTPUT);
  digitalWrite(10, HIGH);
  // aktual_poz = 0;
  // Serial.begin(115200);
  ne_h_uS = neutral_uS - hystereze;
  neah_uS = neutral_uS + hystereze;
  max_min_mS = max_mS + min_mS;
  delay(500);
  attachInterrupt(0, ctipuls, CHANGE);
  }

void loop() {
  
  if (inp_uS < ne_h_uS){
    cislo = map(inp_uS, ne_h_uS, 892, min_mS, max_mS);
    smer = 0;
  }
  if (inp_uS > neah_uS){
    cislo = map(inp_uS, neah_uS, 2076, min_mS, max_mS);
    smer = 1;
  }
  pauza_mS = max(min_mS, max_min_mS - cislo);
  if (inp_uS > neah_uS or inp_uS < ne_h_uS) krok();
  // tisk();  
  delay(pauza_mS);
  }

void krok() { 
  digitalWrite(pin_smer, smer);
  digitalWrite(pin_krok, HIGH);
  delayMicroseconds(8);
  digitalWrite(pin_krok, LOW);
  // if (smer == 1) aktual_poz--;
  // if (smer == 0) aktual_poz++; 
  }

 void ctipuls() {
  if (digitalRead(inp_PWM) == HIGH) {
    new_uS = micros();
    }
    else if (digitalRead(inp_PWM) == LOW) {
      aktual_uS = micros(); 
      new_uS = aktual_uS - new_uS;    
      }
  if (new_uS > 900 and new_uS < 2100) inp_uS = new_uS - 12; // osetreni delky
  }

void tisk() { 
  Serial.print(inp_uS);
  Serial.print("   ");
  Serial.println(pauza_mS);
  }

Re: PWM servosignál (RC) a krokový motor

Napsal: 22 led 2019, 07:35
od jyrry
Hm, tak nic. Našel jsem při hledání něčeho jiného...
http://www.schmalzhaus.com/chipKIT/RCSe ... epper.html kdyby se to někomu hodilo.