PWM servosignál (RC) a krokový motor
PWM servosignál (RC) a krokový motor
Ř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)?
- 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
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 ...
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"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
-
- 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
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/
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
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...
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
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
- 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
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"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: PWM servosignál (RC) a krokový motor
Tady je ten můj výplod, verze asi tak V86.64
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
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.
http://www.schmalzhaus.com/chipKIT/RCSe ... epper.html kdyby se to někomu hodilo.
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 18 hostů