PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Monster-Motor-Shield an Raspberry Pi wie anschließen?



stepbystep
17.06.2020, 22:14
Hallo,
will meinen Fahrroboter der mit 2 Scheibenwischermotoren ausgestattet ist jetzt von Arduino auf Raspi 3B umstellen.
Bekomme jetzt leider den Motor nicht zum laufen. Habe 3 "WiringPi Ausgänge" jetzt mit dem Shield verbunden:



#include <iostream>
#include <softPwm.h>
#include <unistd.h>
#include <wiringPi.h>

// Motorvariablen

const int M1_VORPIN = 22; // Pin 31 an D7 von Shield
const int M1_RUEPIN = 23; // Pin 33 an D8 von Shield
const int M1_SWPWM = 1; // Pin 12 an D5 von Shield

int main()
{

wiringPiSetup();

pinMode(M1_VORPIN, OUTPUT);
pinMode(M1_RUEPIN, OUTPUT);
softPwmCreate(M1_SWPWM,10,100);

digitalWrite(M1_VORPIN, LOW);
digitalWrite(M1_RUEPIN, LOW);

//VOR m1
digitalWrite(M1_VORPIN, HIGH);
digitalWrite(M1_RUEPIN, LOW);
softPwmWrite(M1_SWPWM, 10);

sleep(5);

//M1 auslaufen lassen
digitalWrite(M1_VORPIN, LOW);
digitalWrite(M1_RUEPIN, LOW);

sleep(1);

return 0;
}


Kann mir jemand einen Tipp geben warum nichts geht? Was ist mit dem Enable-Anschluss am Shield?

Bei Hardware-PWM habe ich gleich aufgegeben da nur ein Raspi-Ausgang (pin 12) HW-tauglich ist.

Die 3,3V-Pegel müssten doch am Shield funktionieren?

Danke

HaWe
18.06.2020, 09:42
hallo,
muss man nicht erst auch die pwm-pins als OUTPUT definieren oder PWM_OUTPUT (bin mir nicht sicher)?
Und dann kontrolliere mal sicherheitshalber auch die Pin-Nummern (bcm- versus wiringPi- oder physical Nummerierungen):
wiringPiSetupGpio(), wiringPiSetup(), oder wiringPiSetupPhys()

Außerdem benutze ich die Voreinstellung
softPwmCreate (pin, 0, 100) ;
und
softPwmWrite(pin, x); (x von 0...100)
evtl ist auch 10 zu niedrig?

Außerdem:
Welches Motorshield benutzt du?
Welches Betriebssystem?

Funktioniert damit sonst die Ansteuerung auch beim Arduino?

stepbystep
18.06.2020, 20:31
hallo,
Und dann kontrolliere mal sicherheitshalber auch die Pin-Nummern (bcm- versus wiringPi- oder physical Nummerierungen):


Daran lag es! Ist mir doch ein Fehler unterlaufen:(


muss man nicht erst auch die pwm-pins als OUTPUT definieren oder PWM_OUTPUT (bin mir nicht sicher)?
Nein muss man nicht



Außerdem benutze ich die Voreinstellung
softPwmCreate (pin, 0, 100) ;
und
softPwmWrite(pin, x); (x von 0...100)
evtl ist auch 10 zu niedrig?
Klappt! Fährt auch bei 10 aber sehr laut und unrund


Welches Motorshield benutzt du?
30A VNH2SP30 Stepper Motor Driver Monster Moto Shield


Welches Betriebssystem?
Buster

Danke

HaWe
18.06.2020, 20:55
super, freut mich zu hören! 8)
Auch gut zu wissen, dass wiringPi mit dem 3B (oder sogar 3B+ ?) noch auf Buster läuft! 8)

- - - Aktualisiert - - -

PS,
wenn du oft mit kleinen pwms fähst, kann man auch die wiringPi-pwm-Frequenz hochsetzen, dann hauen die dutycycles nicht so knallhart durch ;)

stepbystep
19.06.2020, 08:22
wenn du oft mit kleinen pwms fähst, kann man auch die wiringPi-pwm-Frequenz hochsetzen, dann hauen die dutycycles nicht so knallhart durch

Ich habe dann einen Servo und zwei Motoren dann auf SWPWM. Wie weit kann ich mit der Frequenz dann hoch damit der Raspi nicht überlastet wird? Zwischendrin muss er auch noch Entfernungen (US) messen. Vor der Messung werde ich dann alle SWPWM's dann auf LOW setzen?
Bisher hatte ich am Arduino alles auf HWPWM da war das kein Problem.

HaWe
19.06.2020, 09:24
der Pi 3B ist ein Quadcore, d.h. er ist durch 2 softpwm Pins nicht überfordert.
IIRC läuft softwPwm mit timer-IRQs (kann mich aber nicht mehr genau erinnern) und daher störungsfrei parallel zu anderen threads/tasks.

Ich kann mich dunkel erinnern, dass das mal im Raspi.org forum diskutiert wurde mit der Freq., und dass Arduino-ähnliche Werte locker erreicht werden können (ca. 500Hz).
HWpwm auf dem Pi besitzt der kernel (bcm GPIOs 12+13), da brauchst du also root-Rechte, hat aber ansonsten IMO keine besonderen Vorteile.
Ich habe übrigens mit pthread-Programmen bisher bisher 6 pwm-Motoren mit softwPwm plus 6x Rotationsencoder-Reading im 100µs Takt plus UART-Kommunikation mit einem Arduino im 10ms Takt plus IR-Sensoren im 50ms Takt plus HDMI-Display-paint und plus console-print im 30ms Takt.

PS,
Nur 1 Anm.:
weil US-Sensoren MEIST sehr lange blockierende delays brauchen, solltest du diese dann am besten schon auch in eigene pthreads packen, damit der Rest störungsfrei weiterläuft (zB. bei einer ununterbrochenen i2c-, SPI-, pwm- oder UART-Auslesung, softwPwm ist dabei aber auch außen vor).
Wenn du kein MT nutzt, dann nimm also US-Sensoren, die das nicht brauchen oder nimm von vornherein IR-Sensoren (Sharp GP2D120 o.ä.).
pthread läuft übrigens störungsfrei schon auf Singlecores (dafür wurde es entwickelt), aber auf einem Pi Quadcore läuft es wie ein Rudel Schlittenhunde ;)
(wenn du pthread nutzen willst und dazu Fragen hast, mach am besten dazu ein neues topic auf.)