PWM servosignál (RC) a krokový motor

Odpovědět
jyrry
Příspěvky: 6
Registrován: 20 led 2019, 23:44
Reputation: 0

PWM servosignál (RC) a krokový motor

Příspěvek od jyrry » 21 led 2019, 00:06

Ř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)?

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

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

Příspěvek od pavel1tu » 21 led 2019, 07:09

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 ...
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

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

Příspěvek od jankop » 21 led 2019, 07:35

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/

jyrry
Příspěvky: 6
Registrován: 20 led 2019, 23:44
Reputation: 0

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

Příspěvek od jyrry » 21 led 2019, 07:45

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...

jyrry
Příspěvky: 6
Registrován: 20 led 2019, 23:44
Reputation: 0

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

Příspěvek od jyrry » 21 led 2019, 07:54

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 :-)

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

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

Příspěvek od pavel1tu » 21 led 2019, 17:17

Já pochopil z toho RC, že je to klasické RC servo, kde šířka signálu v ms určuje natočení serva ...
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

jyrry
Příspěvky: 6
Registrován: 20 led 2019, 23:44
Reputation: 0

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

Příspěvek od jyrry » 21 led 2019, 17:46

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);
  }

jyrry
Příspěvky: 6
Registrován: 20 led 2019, 23:44
Reputation: 0

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

Příspěvek od jyrry » 22 led 2019, 07:35

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.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 12 hostů