Pocukávání servomotoru

Dotazy na technické problémy, vlastní řešení technických problémů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
doga
Příspěvky: 132
Registrován: 26 bře 2018, 02:00
Bydliště: okr. Bruntál

Pocukávání servomotoru

#1 Příspěvek od doga »

Ahoj,
ovládám arduinem servomotorek a ten nahodile pocukává, polohu nemění, jen to v něm cukne.
Aplikace pojede na akumulátor a proto se snažím minimalizovat spotřebu.
Je toto chování u servomotoru normální?
Dík

Uživatelský avatar
misocko
Příspěvky: 1250
Registrován: 26 čer 2009, 02:00
Bydliště: Hlohovec (Sk)

#2 Příspěvek od misocko »

na zaklade coho ovladas? nemeni sa vstupna hodnota? hlavne ked ides cez analog tak to bude ono. pomoze kondenzator na analog pin alebo osciloskop

Uživatelský avatar
pajosek2
Příspěvky: 3992
Registrován: 24 úno 2007, 01:00
Bydliště: Zlínsko
Kontaktovat uživatele:

#3 Příspěvek od pajosek2 »

Servo neni typ motoru,ale typ pohonu. Může to byt klidne uhlikovy motor a stejně tak krokový motor. Takže o jaký motor se jedná
To,že někdo dělá věci jinak než by jsi je dělal Ty ještě neznamená,že to dělá špatně.

Nemám zájem o korekci pravopisu.

Uživatelský avatar
doga
Příspěvky: 132
Registrován: 26 bře 2018, 02:00
Bydliště: okr. Bruntál

#4 Příspěvek od doga »

Jedná se o analogový servomechanismus - modelářský. Ovládám to pomocí knihovny Servo, která by to měla ovládat délkou pulzu.

Uživatelský avatar
Artaban001
Příspěvky: 9457
Registrován: 01 dub 2004, 02:00
Bydliště: Pendrov

#5 Příspěvek od Artaban001 »

Ahoj Dogo. Dáváš příliš málo informací. Servopohon bývá většinou zařízení, kde je nějaký motorek, který pohání nějaký akční člen, pak je tam něco, co snímá polohu akčního členu a posílá to zpět regulačnímu členu. Může se stát, že "zpětná vazba" v podobě snímání polohy akčního členu je příliš silná a proto se Ti to může rozkmitat. Taktéž to mohou způsobovat vůle v převodech, pokud není akční člen poháněn přímo. Pak ještě může nastat nežádoucí stav, kdy je zpětná vazba moc rychlá, nebo pomalá...

Uživatelský avatar
Celeron
Příspěvky: 16140
Registrován: 02 dub 2011, 02:00
Bydliště: Nový Bydžov

#6 Příspěvek od Celeron »

Modelářský servo má přeci zpětnou vazbu přímo v sobě, poloha výstupní páky je přesně daná dýlkou řídícího pulzu v rozsahu cca 0,9-2 ms s opakováním každých cca 20 ms u analogových serv.
Zkus napsat jednoduchej prográmek, kterej by posílal na servo cca 1,2 ms počkat 30 sekund, pak 1,3 ms, zase pauzu a tak přidávat stále dokola do cca 1,9 ms aby do toho nemohlo nic jinýho z programu kecat. Jestli to servo bude v některý poloze cukat, tak bude zasviněnej zpětnovazební potenciometr v servu. U většiny jde vyčistit a promazat třeba Kontoxem.
Jirka

Proč mi nemůže všechno chodit hned ?!!

Uživatelský avatar
doga
Příspěvky: 132
Registrován: 26 bře 2018, 02:00
Bydliště: okr. Bruntál

#7 Příspěvek od doga »

Dík za vaši snahu,
už jsem vyzkoušel ukázkový program a funguje to jak má. V mém programu používám Tasker a tak jsem původní cyklus pro pozvolné otáčení předělal na přičítací podmínku, kterou volám Taskerem. Původní cyklus by mi blokoval tlačítka a display ale to už je do jiné části fóra. Ještě jednou dík

Uživatelský avatar
doga
Příspěvky: 132
Registrován: 26 bře 2018, 02:00
Bydliště: okr. Bruntál

#8 Příspěvek od doga »

Ahoj,
tak to dělá onewire s čidly Dalas. Čidla nemusí být ani připojeny, stačí doplnit kód a servopohon začne pocukávat.
Nějaký nápad?
Dík

Kód: Vybrat vše

#include <Tasker.h>
#include <OneWire.h>
#include <DallasTemperature.h>

Tasker tasker;


#define ONE_WIRE_BUS 11 //pin 13 sběrnice pro DS
OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature.
DeviceAddress inside1 = { 0x28, 0x80, 0x4E, 0xE9, 0x08, 0x00, 0x00, 0x40 };
DeviceAddress outside1 = { 0x28, 0x36, 0x66, 0x40, 0xA, 0x00, 0x00, 0x46 };

float Tin1 = 0;
float Tout1 = 0;

#include <Servo.h>     //zahrnutí knihovny pro ovládání servo motoru
Servo myservo;         //každý motor má svou instanci třídy Servo
int pos = 0;           //proměnná obsahující pozici motoru (úhel natočení)

void dvirka(int) {
    // Serial.println(pos);
    pos = 0;
     myservo.write(pos);
 }

void ctiSensor(int) {
Tin1 = sensors.getTempC (inside1);
Tout1 = sensors.getTempC (outside1);
}

void ctiTeplotu(int) {
    sensors.requestTemperatures();
    tasker.setTimeout(ctiSensor, 750);
    Serial.println(Tout1);
}

void setup() {

myservo.attach(12);   //tento motor je připojen na pin 9
Serial.begin(9600);
sensors.begin(); // Spuštění knihovny
sensors.setResolution(inside1, 12); // set the resolution to 10 bit (good enough?)
sensors.setResolution(outside1, 12);
   sensors.setWaitForConversion(false);
   
    tasker.setInterval(ctiTeplotu, 3000);
    tasker.setInterval(dvirka, 50);
    tasker.run();
 }

void loop(void)
{
} 

p32
Příspěvky: 15069
Registrován: 13 led 2007, 01:00
Bydliště: Olomouc

#9 Příspěvek od p32 »

Dával jsi to předtím jinam, ale teď je to zde. Když už tam něco vkládáš, tak to trošku porovnej. #include všechny za sebou atd. :wink:

Uživatelský avatar
misocko
Příspěvky: 1250
Registrován: 26 čer 2009, 02:00
Bydliště: Hlohovec (Sk)

#10 Příspěvek od misocko »

#define ONE_WIRE_BUS 11 //pin 13 sběrnice pro DS - tak 13 alebo 11?
myservo.attach(12); //tento motor je připojen na pin 9 - 12 alebo 9 ?

v loope nemas nic, takto ti to cuka?

kedze tomu vobec nerozumiem, napada ma iba "delay" v citani DS senzora, ked ti nebezi pin na riadenie serva a servo cukne - alebo je tento pin rieseny ako PWM a bezi furt?

Uživatelský avatar
doga
Příspěvky: 132
Registrován: 26 bře 2018, 02:00
Bydliště: okr. Bruntál

#11 Příspěvek od doga »

Ahoj, nabyl jsem dojmu, že pokračování mého problému patří do jiné části fóra a admin mě vrátil zpět.
Omlouvám se za nepřesnosti v kódu, komenty jsou pouze informační ale pokusil jsem se to trochu učesat.

Kód: Vybrat vše

#include <Tasker.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Servo.h>     //zahrnutí knihovny pro ovládání servo motoru

Tasker tasker;

Servo myservo;         //každý motor má svou instanci třídy Servo

#define ONE_WIRE_BUS 11 //pin sběrnice pro DS
OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature.
DeviceAddress inside1 = { 0x28, 0x80, 0x4E, 0xE9, 0x08, 0x00, 0x00, 0x40 };
DeviceAddress outside1 = { 0x28, 0x36, 0x66, 0x40, 0xA, 0x00, 0x00, 0x46 };

float Tin1 = 0;
float Tout1 = 0;
int pos = 0;           //proměnná obsahující pozici motoru (úhel natočení)

void dvirka(int) {
    // Serial.println(pos);
    pos = 90;
     myservo.write(pos); 
 } 

void ctiSensor(int) {
Tin1 = sensors.getTempC (inside1);
Tout1 = sensors.getTempC (outside1);
}

void ctiTeplotu(int) {
    sensors.requestTemperatures();
    tasker.setTimeout(ctiSensor, 750);
    Serial.println(Tout1);
}

void setup() {
myservo.attach(12);   //tento motor je připojen na pin 12
Serial.begin(9600);
sensors.begin(); // Spuštění knihovny
sensors.setResolution(inside1, 12); // set the resolution to 10 bit (good enough?)
sensors.setResolution(outside1, 12);
sensors.setWaitForConversion(false);
   
    tasker.setInterval(ctiTeplotu, 3000);
    tasker.setInterval(dvirka, 50);
    tasker.run();
 }

void loop(void)
{
}

Uživatelský avatar
doga
Příspěvky: 132
Registrován: 26 bře 2018, 02:00
Bydliště: okr. Bruntál

#12 Příspěvek od doga »

misocko píše: kedze tomu vobec nerozumiem, napada ma iba "delay" v citani DS senzora, ked ti nebezi pin na riadenie serva a servo cukne - alebo je tento pin rieseny ako PWM a bezi furt?
servo jsem dal na 3 pin s PWM ale bohužel bezezměny.

Uživatelský avatar
misocko
Příspěvky: 1250
Registrován: 26 čer 2009, 02:00
Bydliště: Hlohovec (Sk)

#13 Příspěvek od misocko »

len je otazne ako ho riadi servo kniznica , ci ako PWM a teda kmita nezavisle na behu zvysku programu alebo len proste kmita a ked procak prave nema cas , tak sa kmity predlzuju

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#14 Příspěvek od FHonza »

Pro jakou to máš desku ? Docela důležitý údaj ...

Uživatelský avatar
doga
Příspěvky: 132
Registrován: 26 bře 2018, 02:00
Bydliště: okr. Bruntál

#15 Příspěvek od doga »

Arduino nano, napájené přes VIN z 6v baterie. Servo napájeno přímo z baterie.

Odpovědět

Zpět na „Poradna“