Stránka 1 z 2
Pocukávání servomotoru
Napsal: 29 lis 2019, 20:55
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
Napsal: 29 lis 2019, 21:37
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
Napsal: 29 lis 2019, 21:47
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á
Napsal: 29 lis 2019, 23:36
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.
Napsal: 29 lis 2019, 23:45
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á...
Napsal: 30 lis 2019, 00:31
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.
Napsal: 30 lis 2019, 00:49
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
Napsal: 02 pro 2019, 21:27
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)
{
}
Napsal: 02 pro 2019, 21:30
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.
Napsal: 02 pro 2019, 21:48
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?
Napsal: 02 pro 2019, 23:34
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)
{
}
Napsal: 03 pro 2019, 00:37
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.
Napsal: 03 pro 2019, 19:04
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
Napsal: 03 pro 2019, 20:00
od FHonza
Pro jakou to máš desku ? Docela důležitý údaj ...
Napsal: 04 pro 2019, 00:20
od doga
Arduino nano, napájené přes VIN z 6v baterie. Servo napájeno přímo z baterie.