Stránka 1 z 2

Přenos přes HC-05 narušuje ovládání serva

Napsal: 30 čer 2019, 17:58
od Awandalor
Ahoj, BT - HC-06 z číny (dle AT příkazů bych řekl že to je HC-05), Arduino nano klon. BT připojen napřímo bez děliče.

pokud cokoliv posílám přes BT tak servo cuká, nemusím ani na straně BT "poslouchat" a servo pocukává.

delay má vliv na cukání ale neodstraní ho, zkoušel jsem použít jiný pin k ovládání serva ale nepomohlo, zkusil jsem změnit baudrate BT z 9600 na 19200 ale taky nepomohlo.


Níže uvedený kód funguje bezchybně (BT.print je zakomentované)
Jakmile použiju BT.print tak servo cuká. Má někdo nějaký nápad?


Je to jen část kódu, jinak celé to bude sloužit k testování modelářských BLDC motorů. Ovládání motoru přes ESC, měření odběru proudu, napětí, teploty, zobrazení na LCD + zasílání přes BT do PC (tabletu) a tvorba grafu. Posílání dat přes BT i na LCD bylo ok, měření proudu, teploty taky ok. A když jsem připojil servo a jeho kód tak jsem narazil na problém. Tak jsem to celé začal stavět obráceně, nejprve kód pro servo + HW a vše ok, potom jsem začal přidávat další části kódu a u BT jsem narazil.

Kód: Vybrat vše


#include <SoftwareSerial.h>
#include <Servo.h>

Servo ESC;     // create servo object to control the ESC
int potValue;  // value from the analog pin

SoftwareSerial BT = SoftwareSerial(10,11);

void setup() {
  // Attach the ESC on pin 9
  ESC.attach(9,1000,2000); // (pin, min pulse width, max pulse width in microseconds) 
  BT.begin(19200);
  Serial.begin(9600);
}

void loop() {
  potValue = analogRead(A3);   // reads the value of the potentiometer (value between 0 and 1023)
  potValue = map(potValue, 0, 1023, 0, 180);   // scale it to use it with the servo library (value between 0 and 180)
  ESC.write(potValue);    // Send the signal to the ESC
  Serial.println(potValue);
 
  
 // BT.print("Ahoj");        //Servo cuká
 // BT.print(potValue);      //Servo cuká
  delay(100);
}

Re: Přenos přes HC-05 narušuje ovládání serva

Napsal: 30 čer 2019, 19:15
od Awandalor
Když v kodu nakonci ze slova "Ahoj" udělám "AhojAAAAAAAAAAAAAAAAAAAAAAAAA" je cukání mnohem horší servo pulzuje.

Re: Přenos přes HC-05 narušuje ovládání serva

Napsal: 30 čer 2019, 19:24
od gilhad
IMHO to cukámí může mít dva různé důvody:

a) servo cuká - BT může mít odběrové špičky a ovlivňuje napájení serva - změřit (nejlíp osciloskopem), průběh napájecího napětí při cukání serva, dát tam nějaké kondenzátory do napájení pro vykrytí špiček, dát dvě různá napájení, použít lepší zdroj ...
b) servem je cukáno - zápis do BT ovlivní generování řídícího signálu pro servo (používá interrupty, co zablokujou výpočet, zakáže interrupty pběhem nějaké kritické fáze, nebo tak něco) - zase osciloskopem sledovat řídící vsut serva, zda se při vysílání nezmění ty pulzy na něm Pokud ano, tak to rozdělit na dvě Arduina, jedno se bude starat o servo, druhé o BT a navzájem s polu boudou komunikovat a koordinovat se.

c) že by vysílání BT ovlivňovalo řídící elektroniku serva mi přijde nepravděpodobné, že by do analogového vstupu generovalo šum by mělo být vidět na Serial.println(potValue); (že by se měnila i bez točení potenciometrem)

Re: Přenos přes HC-05 narušuje ovládání serva

Napsal: 30 čer 2019, 20:48
od Awandalor
Verze A) vyloučena. Kond tam mám 100uF v základu, zkusil jsem ještě 330uF přidat ale bez výsledku, zapojení jsem zkoušel i s jiným napájením než USB port. Blbne to jak se servem tak s ESC a BLDC motorem který má své napájení.

Verze B) více méně potvrzena. Nastavil jsem delay na 2s servo periodicky po 2S cukne na skopu je to taky vidět. Možným řešením by mohlo být použití jiné knihovny SoftwareSerial nebo jak píšeš 2 arduina.

Verze 2 arduina - 1. arduino je připojeno k ESC (servu) a potenciometrem řídím otáčky. Informace o poloze potenciometru se přes seriovou?? linku posílá do 2. arduina na které je pověšen BT, LCD, termistor, proudový senzor, a odporový dělič - měření napětí. Pochopil jsem to dobře?

No už se s tím babrám 2. den, asi se na BT vyprdnu a pošlu to do PC kabelem. Při seriove komunikace s PC to neblbne.

Re: Přenos přes HC-05 narušuje ovládání serva

Napsal: 30 čer 2019, 21:17
od pavel1tu
Již loni jsem s někým řešil řízení tanku (2 motory, serva, svícení, střelba) po BT a Arduino nakonec opustil a dal tam STM32 .... měl podobné problémy. Ale již je to dlouho tak si detaily nepamatuji. Půjčil si mé STM a již mi ho nevrátil - koupil mi rovnou nové.

Arduino prostě nestíhá přepínat mezi 2 porty a ještě generovat PWM , natož několik PWM .... je to i logické, pokud si přečteš v manuálu ATmega jak to obsluhuje, vezmeš v potaz takt procesoru a co vše musí stihnout...

Re: Přenos přes HC-05 narušuje ovládání serva

Napsal: 01 črc 2019, 06:37
od kiRRow
Nebo vypustit softwareserial a připojit BT modul na piny RX a TX. Pak ale za běhu nepůjde komunikovat přes USB a při programování bude asi potřeba vše z pinů RX a TX odpojit.

Re: Přenos přes HC-05 narušuje ovládání serva

Napsal: 01 črc 2019, 08:27
od kiRRow
A nebo použít pro ovládání serva další obvod, kterému jednou řekneš jakou má mít servo polohu a on jí bude držet jak hluchý dveře ... např https://navody.arduino-shop.cz/navody-k ... a9685.html

Re: Přenos přes HC-05 narušuje ovládání serva

Napsal: 16 pro 2020, 06:08
od ripaxxx
Máte vyřešeno? Já mám podobný problém. Nejedná se o servo, ale relé. Na piny 2,3 softSerial NANO mám připojený HC-05 a na další piny asi 3 relé. Ovládání přes bluetooth mi funguje. Ale... :cry: Vidím, že když HC-05 zakomunikuje, tak mi vypnutá relé náhodně, střídavě mžikově spínají. Předpokládám tedy, že při mé logice, kdy relé je rozepnuté 5V napětím na pinu dochází k nějakému náhodnému výpadku napětí při komunikaci. Próóóč :roll: Zkusím připojit na komunikaci 0,1 pinů a uvidím.

Re: Přenos přes HC-05 narušuje ovládání serva

Napsal: 16 pro 2020, 08:49
od Ming
Někde jsem kdysi vyčetl, že knihovny softwareserial a servo "sdílejí" jedno přerušení a tudíž se pak spolu "hádají". Řešením je, jak popsáno výše, použití standardního Serial.

Re: Přenos přes HC-05 narušuje ovládání serva

Napsal: 16 pro 2020, 11:18
od ripaxxx
Já nepoužívám servo, ale obyčejné čínské modré relé nastavené na OUTPUT pin. Tak to mě zaráží...