[arduino] Servo en electro motor op 1 bordje

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • HaerdenCliff
  • Registratie: November 2019
  • Laatst online: 30-11-2024
Beste allen, gisteren enkele uren lopen zoeken maar er zelf niet uitgeraakt. Ik probeer een DC motor te gebruiken alsook een servo. Voor de DC Motor gebruik ik 2 PWM signalen die naar een HW354 gaan dit werkt perfect. Vervolgens had ik aan mijn code de servo.h toegevoegd en deze werkt ook, samen doen ze het niet

Voor de mensen die een globaal idee willen hebben van waarvoor ik het wil gaan gebruiken (niet echt relevant voor het probleem maar wel voor context)

Ik heb een afstandsbediening gebouwd met een Arduino Mega, 2 joysticks, 2 potmeters en een berg pulse knoppen, deze zijn voorzien van een RF module, dit geheel vormt de afstandsbediening

Vervolgens ben ik de micro Pro aan het coden als ontvanger met daaraan een aantal led kringen, 2 servo's waarvan 1 voor het sturen en 1 voor de achterlift en een electro motor. Dit geheel zal in een Siku Control 1:32 tractortje ingebouwd worden. Het geheel zal dus een tractor op afstandsbediening zijn.

Ik gebruik:
Arduino Micro Pro 5V 16 Mhz -> Zelfde code ook getest op een volwaardige originele UNO en identiek hetzelfde gedrag
HW354 motor sturing (H Bridge) waarvan ik maar 1 van de 2 poorten gebruik
standaard servo

Dit is de layout van de controller
Afbeeldingslocatie: https://images-na.ssl-images-amazon.com/images/I/81nOeGRzxPL._AC_SL1500_.jpg

Motor controller hangt aan poorten 9 en 10
Servo hangt aan poort 6

De motor controller werkt vrij eenvoudig en heeft geen extra modules nodig.
Pin 9 digital low - Pin 10 pwm -> regelbaar vooruit
Pin 10 digital low - Pin 9 pwm -> regelbaar achteruit

Voor de servo gebruik ik gewoon de standaard code.


Wat ik al gevonden of geprobeerd heb is dus beide onafhankelijk laten werken en dat werkt perfect. Het gaat mis op het moment dat ik voor de servo de attach functie oproep, vanaf dat moment wil de electro motor niet meer.

Ik begin me ernstig vragen te stellen bij de servo.h header en hoe daar alles in werkt, het lijkt er op dat die iets doet met de interne klokken en daardoor geen beschikbaarheid meer te geven voor de pwm van de motor kanalen.

Mij leek het toch wel te moeten kunnen ... 1 motortje en 1 servo samen laten werken leek me op het eerste zicht geen rocket science ...

Dit is de code die ik tot nu toe gebruik:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <Servo.h>

Servo mySteering;
//define servo limits
int SteerMinPos = 0;    //steeringservo minimum position
int SteerMaxPos = 80;   //steeringservo maximum position
int SteeringSteps = 1;  //steps for the steeringservo
int SteeringPin = 6;

//define the motor pins these need to be PWM's
int MOTOR_IN1 = 9;
int MOTOR_IN2 = 10;

int pos = 0;

void setup() {
  Serial.begin(9600);
  mySteering.attach(SteeringPin);
  pinMode(MOTOR_IN1, OUTPUT);
  pinMode(MOTOR_IN2, OUTPUT);
}

void loop() {
  for (pos = SteerMinPos; pos <= SteerMaxPos; pos += SteeringSteps) {
    // in steps of 1 degree
    mySteering.write(pos);
    Serial.println(pos);
    digitalWrite(MOTOR_IN2, LOW);
    analogWrite(MOTOR_IN1, pos * 2);
    delay(15);
  }
  for (pos = SteerMaxPos; pos >= SteerMinPos; pos -= SteeringSteps) {
    mySteering.write(pos);
    Serial.println(pos);
    digitalWrite(MOTOR_IN1, LOW);
    analogWrite(MOTOR_IN2, pos * 2);
    delay(15);
  }

Beste antwoord (via HaerdenCliff op 30-11-2020 14:31)


  • Comp-Freak
  • Registratie: Juni 2004
  • Laatst online: 02-10 22:50
De Atmega32U4 heeft op die pinnen (PB5 en PB6) de output compare 1A en 1B outputs zitten als ik het goede bordje voor me heb. De OC1A interrupt wordt ook als timebase gebruikt voor de Servo lib, dus daarom inderdaad niet meer bruikbaar voor PWM output via de output compare output pinnen.

Alle reacties


Acties:
  • +1 Henk 'm!

  • HaerdenCliff
  • Registratie: November 2019
  • Laatst online: 30-11-2024
Ik denk dat ik vandaag met een frisse kop het gevonden heb.

The Servo library supports up to 12 motors on most Arduino boards and 48 on the Arduino Mega. On boards other than the Mega, use of the library disables analogWrite() (PWM) functionality on pins 9 and 10, whether or not there is a Servo on those pins. On the Mega, up to 12 servos can be used without interfering with PWM functionality; use of 12 to 23 motors will disable PWM on pins 11 and 12.

zucht gewoon een kwestie van andere pinnen kiezen dus lijkt het...

Acties:
  • 0 Henk 'm!

  • AlphaRomeo
  • Registratie: Maart 2007
  • Nu online

AlphaRomeo

FP PowerMod
In ieder geval fijn dat ze het gedocumenteerd hebben. Nog wel interessant is de vraag waarom ze die pinnen moeten disablen? Gebruiken ze bepaalde timers waardoor PWM niet langer mogelijk is? Misschien dat iemand daar nog iets over kan uitleggen for future reference.

Acties:
  • Beste antwoord
  • +2 Henk 'm!

  • Comp-Freak
  • Registratie: Juni 2004
  • Laatst online: 02-10 22:50
De Atmega32U4 heeft op die pinnen (PB5 en PB6) de output compare 1A en 1B outputs zitten als ik het goede bordje voor me heb. De OC1A interrupt wordt ook als timebase gebruikt voor de Servo lib, dus daarom inderdaad niet meer bruikbaar voor PWM output via de output compare output pinnen.

Acties:
  • 0 Henk 'm!

  • HaerdenCliff
  • Registratie: November 2019
  • Laatst online: 30-11-2024
Pin 9 en 10 hangen aan timer 1 en reserved voor de servo dus, net als op een uno eigenlijk. Kort samen gevat heb ik nu mijn 2 servo's hangen aan poort 9 en 10 en gebruik ik pwm 5 en 6 voor de motor controller en dat werkt volledig. Nu al mijn code opschonen, documenteren en dan kan mijn zoon aan de inbouw beginnen. Indien er mensen interesse hebben zal ik een topic maken van de volledige ombouw en code :) Het gaat dus om een volledige afstandsbediening, 2 joysticks, 4 knoppen voor het inschakelen van 3 ledkringen, zwaailicht. Een links rechts switch voor pinkers, een vierpinker switch en 2 potmeters voor het aansturen van front en achter lader. Verder dus motor conctroller voor 2 richtingen DC N tupe motor en dus een stuurservo alwaar ik problemen mee had voorheen. De software is verrevan perfect maar alles werkt nu.

Het idee is ook om er voor te zorgen dat meerdere voertuigen aan te sturen zijn op termijn of toch dat de afstandsbediening herbruikbaar is op meerdere voertuigen. We willen alles ook online zetten zodat andere mensen het geheel ook kunnen gebruiken om makkelijk auto op afstandsbediening te maken met wat extra's.