Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi Pico zu wenig Spannung an GPIO Ausgängen


von Kevin B. (kevin_b502)


Lesenswert?

Guten Tag,

Ich möchte einen Motoren ansteuern über das Motorsteuerboard L298N. 
Allerdings habe ich nach langem Probieren festgestellt, dass an meinen 
GPIO Ausgängen nur 1.1 - 1.7V anliegen und der MotorDriver deswegen 
nicht schaltet (der bräuchte bedeutend mehr für den Schaltzustand HIGH). 
Im Netz gibt es etliche Videos, bei welchen der Motordriver mit dem Pico 
betrieben wird. Hat jmd. eine Idee, wie ich den Driver zum Schalten 
kriege oder kennt jemand alternative Komponenten die in Frage kämen?

Ausser dem MotoDriver sind noch 2 Sensoren (CO2 & Temperatur / Humidity) 
im Kreislauf, welche ich direkt über das Pico speise. Den ganzen 
Kreislauf speise ich mit einem 12V 3A Netzteil, wobei für das Pico auf 
5V heruntergebrochen wird.

Motodriver:
https://www.reichelt.com/ch/de/entwicklerboards-motodriver2-l298n-debo-motodriver2-p202829.html?PROVID=2808&gclid=EAIaIQobChMIu-zO6qfZ_AIVQvBRCh0tMg-yEAQYAiABEgJZPvD_BwE

Vielen Dank & liebe Grüsse

von Peter N. (alv)


Lesenswert?

Kevin B. schrieb:
> dass an meinen
> GPIO Ausgängen nur 1.1 - 1.7V anliegen

Wieso? Da sollte ca.3,3V rauskommen, oder hast du die Ausgänge auf OC 
geschaltet?

Der Motorteiber hat eine Logikspannung von 5V.
Du brauchst zwischen Pi und Treiber noch einen Pegelwandler.

von Andreas H. (ahz)


Lesenswert?

Kevin B. schrieb:
> Hat jmd. eine Idee, wie ich den Driver zum Schalten
> kriege oder kennt jemand alternative Komponenten die in Frage kämen?

wie ist VDDIO angeschlossen?

Btw: Es hilft wenn Du bei solchen Fragen gleich den Schaltplan und ggf. 
die Software postest.

/regards

von Kevin B. (kevin_b502)


Angehängte Dateien:

Lesenswert?

Klar da hast du recht ;)

Hier der recht Laienhafte Schaltplan & Code:
1
#LCD #https://www.waveshare.com/wiki/RP2040-LCD-0.96
2
#CO2 #https://github.com/awsiuk/ENS160
3
#Temperatur & Feuchtigkeit #https://www.elektronik-kompendium.de/sites/raspberry-pi/2703021.htm
4
5
from myENS160 import myENS160 #CO2-Sensor Konfigurationsmodul
6
from machine import Pin #Temp & Motor
7
from utime import sleep #Temp & Motor
8
from dht import DHT11 #Temp
9
from LCD_Config import LCD_0inch96 #LED Konfigurationsmodul
10
11
###Variablen###
12
13
#LCD
14
RED = 0x00F8
15
GREEN = 0xE007
16
BLUE = 0x1F00
17
WHITE = 0xFFFF
18
BLACK = 0x0000
19
20
lcd = LCD_0inch96()
21
22
#CO2 Sensor
23
obj=myENS160()
24
25
#Temp
26
sleep(1)
27
dht11_sensor = DHT11(Pin(14, Pin.IN, Pin.PULL_UP))
28
29
#Zylinder
30
in2 = Pin(16, Pin.OUT)
31
in1 = Pin(17, Pin.OUT)
32
33
###main###
34
#Messung
35
while True:
36
    # Messung durchführen
37
    TVOC = obj.getTVOC()
38
    AQI = obj.getAQI()
39
    ECO2 = obj.getECO2()
40
    dht11_sensor.measure()
41
    # Werte lesen
42
    temp = dht11_sensor.temperature()
43
    humi = dht11_sensor.humidity()
44
    #AQ definieren
45
    if TVOC<50 and ECO2<800 and AQI<=2:
46
        AQ = "good"
47
    if 6000>TVOC>50 or 1500>ECO2>800 or 4>AQI>2:
48
        AQ = "generally"
49
    if TVOC>6000 or ECO2>1500 or AQI>4:
50
        AQ = "bad"
51
    # Werte ausgeben
52
    lcd.fill(BLACK)
53
    lcd.text("Temperatur: " + str(temp) + "C",5,15,WHITE)
54
    lcd.text("Feuchtigkeit: " + str(humi) + "%",5,35,WHITE)
55
    lcd.text("AQ: " + str(AQ),5,55,WHITE)
56
    lcd.display()
57
    print("ECO2:" + str(ECO2))
58
    print("TVOC:" + str(TVOC))
59
    print("AQI:" + str(AQI))
60
    print("AQ:" + str(AQ))
61
    
62
    #Zylinder ansteuern
63
    if  TVOC<50 and ECO2<800 and AQI<=2 or temp<16:
64
        in1.value(0)
65
        in2.value(1)
66
        sleep(2)
67
    if 6000>TVOC>50 or 1500>ECO2>800 or 4>AQI>2 and temp>21:
68
        in1.value(1)
69
        in2.value(0)
70
        sleep(2)
71
    if TVOC>6000 or ECO2>1500 or AQI>4 and temp>16:
72
        in1.value(1)
73
        in2.value(0)
74
        sleep(2)

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Peter N. schrieb:
> Der Motorteiber hat eine Logikspannung von 5V.
> Du brauchst zwischen Pi und Treiber noch einen Pegelwandler.

Beim L298 ist der minimale High-Pegel für die Eingänge ViH mit 2.3V 
spezifiziert. Warum sollten da zwischen den 3.3V-Ausgängen des Rapsberry 
Pi und dem L298 noch ein Pegelwandler erforderlich sein?

Wenn der Pi wirklich die 3.3V liefert, hätte man komfortable 1V als 
Reserve.

von Kevin B. (kevin_b502)


Lesenswert?

Wolfgang schrieb:
> Peter N. schrieb:
>> Der Motorteiber hat eine Logikspannung von 5V.
>> Du brauchst zwischen Pi und Treiber noch einen Pegelwandler.
>
> Beim L298 ist der minimale High-Pegel für die Eingänge ViH mit 2.3V
> spezifiziert. Warum sollten da zwischen den 3.3V-Ausgängen des Rapsberry
> Pi und dem L298 noch ein Pegelwandler erforderlich sein?
>
> Wenn der Pi wirklich die 3.3V liefert, hätte man komfortable 1V als
> Reserve.

Dachte ich auch, nun hab ich aber zu wenig Spannung. Kann das sonst eine 
Ursache haben?

von Kevin B. (kevin_b502)


Lesenswert?

Peter N. schrieb:
> Kevin B. schrieb:
>> dass an meinen
>> GPIO Ausgängen nur 1.1 - 1.7V anliegen
>
> Wieso? Da sollte ca.3,3V rauskommen, oder hast du die Ausgänge auf OC
> geschaltet?
>
> Der Motorteiber hat eine Logikspannung von 5V.
> Du brauchst zwischen Pi und Treiber noch einen Pegelwandler.

Was meinst du mit auf OC geschaltet?

von Gerd E. (robberknight)


Lesenswert?

Kevin B. schrieb:
> Dachte ich auch, nun hab ich aber zu wenig Spannung. Kann das sonst eine
> Ursache haben?

Miss doch mal Vcc vom Pi gegen den GND (am Pico). Hast Du da 3,3V oder 
was anderes?

Was ich mir als Ursache vorstellen könnte wäre eine Masseverschiebung. 
Wenn ich mir die vielen Drähte im Schaltplan so anschaue, könnte es gut 
sein daß zwischen der eingezeichneten Masse und der, die am Pico 
anliegt, einiges an Widerstand ist und sich damit die Spannungen 
zwischen verschiedenen Massepunkten wesentlich unterscheiden.

Auch ein nicht sauber kontaktiertes Kabel irgendwo in der 
Spannungsversorgung wäre eine mögliche Ursache.

von Andreas H. (ahz)


Lesenswert?

Kevin B. schrieb:
> Dachte ich auch, nun hab ich aber zu wenig Spannung.

Wie ist denn die Spannung zwischen den Pins 36 & 38 am Pico?
Hast Du Ausgaben auf dem Display?

/regards

: Bearbeitet durch User
von DvD (Gast)


Lesenswert?

> Dachte ich auch, nun hab ich aber zu wenig Spannung.

Laienloesung 1:
Mit Pullupwiderstaenden ein wenig aufpaeppeln.

Laienloesung 2:
Etwas einfacheres benutzen, und dann nicht nur 1/4 des
Datenblatts lesen, sondern alles.

Laienloesung 3:
Mal die Batterie vom Multimeter wechseln.

Laienloesung 4:
Den ganzen Kram in die Tonne stossen.


Mein Favorit: #4

von Peter N. (alv)


Lesenswert?

Kevin B. schrieb:
> Was meinst du mit auf OC geschaltet?

Die Ausgänge sind normalerweise im Pusch/Pull-Betrieb.
D.h. Ausgangsspannung 0V oder 3,3V.
Man kann sie aber auch als "Open Collector" konfigurieren.
Dann ist die Ausgangsspannung 0V oder offen.

DvD schrieb:
> Laienloesung 3:
> Mal die Batterie vom Multimeter wechseln.

Normalerweise zeigen DMM bei schwacher Batterie zuviel an.

von Uwe D. (monkye)


Lesenswert?

DvD schrieb:
>> Dachte ich auch, nun hab ich aber zu wenig Spannung.
>
> Laienloesung 1:
> Mit Pullupwiderstaenden ein wenig aufpaeppeln.
>
> Laienloesung 2:
> Etwas einfacheres benutzen, und dann nicht nur 1/4 des
> Datenblatts lesen, sondern alles.
>
> Laienloesung 3:
> Mal die Batterie vom Multimeter wechseln.
>
> Laienloesung 4:
> Den ganzen Kram in die Tonne stossen.
>
>
> Mein Favorit: #4

#5: Der Effekt sieht eher so aus, als wenn die Ausgänge als Open 
Collector (OC) bzw. ‚Open Drain’ geschaltet 
(Beitrag "RP2040 MCU open drain fehlt in C-SDK-Dokumentation") sind oder überlastet.

Bei 2-4 mA maximaler Strom pro PIN könnte man auf letzteres tippen… aber 
der L298 braucht deutlich <1mA am Eingang.

Nachtrag: Mach mal ein Foto vom fliegenden Aufbau.

: Bearbeitet durch User
von Uwe D. (monkye)


Lesenswert?

Noch ein Nachtrag: Du verwendest die gleichen Pins für den Motortreiber 
wie den UART0. Und im Programm verwendest Du „Print“. Stichwort 
SYS.STDOUT

Tausche einfach mal die Pins auf GP20 + GP21.

von Wolfgang (Gast)


Lesenswert?

Kevin B. schrieb:
> nun hab ich aber zu wenig Spannung. Kann das sonst eine
> Ursache haben?

Fehler in der Verschaltung.
Zeig mal einen (lesbaren) Schaltplan.

Wieviel Spannung hast du am Pin, wenn der Ausgang offen ist und stabil 
auf High steht?
Was steht im Datenblatt zur Ausgangsspannung?

von Cha-woma M. (Firma: --------------) (cha-ar-196)


Lesenswert?

Wolfgang schrieb:
> Kevin B. schrieb:
>> nun hab ich aber zu wenig Spannung. Kann das sonst eine
>> Ursache haben?
Wie wäre es mal mit der Spannungsversorgung?
So wie ich den "Schaltplan" lese  hast du die Spannungsversorgung vom 
Pico und dem Motor von der "selben" Quelle.

> Fehler in der Verschaltung.
Gibt`s nur wenn das ganze in einer anderen "gleichen" Verschaltung 
funktioniern würde. So liegt es vllt. mehr am Genieus des Erschaffers, 
dass es halt nur suboptimal funktioniert!
> Zeig mal einen (lesbaren) Schaltplan.
Hmmm???????
SW-Entwickler und dann noch einen Schalt- oder Logikplan erwarten?
Ob es sowas jemals gab oder jemals geben wird?

von DvD (Gast)


Lesenswert?

> SW-Entwickler und dann noch einen Schalt- oder Logikplan erwarten?

SW-Entwickler, aka Informatiker, sind chronisch unfaehig.
Ich habe da schon von Faellen gehoert, die nicht einmal die
Existenz des Datenblatts kannten und sich ueber "Kollisionen"
bei der Zuweisung von Pinfunktionen beklagten.
Was willst du da erwarten?

von Uwe D. (monkye)


Lesenswert?

@Kevin, in Deinem Code sehe ich keine Konfiguration für den Gassensor, 
der ja per I2C angebunden ist - fehlt da was?

Dann hast Du den DHT11 im Code so definiert:
1
dht11_sensor = DHT11(Pin(14, Pin.IN, Pin.PULL_UP))
Aber im Schaltplan liegt der an GP28.

Und bitte messen und gleich ein Bild machen:
* den Motortreiber dazu weglassen !!! (nicht am RP Pico anschließen)
* Pin36 (3.3V)
* Pin40 (Vbus)

Irgendwie passt dass alles nicht zusammen. Und nochmal die Bitte: mach‘ 
ein Foto.

ACHTUNG: Du darfst nicht USB und Vsys gleichzeitig verwenden.

: Bearbeitet durch User
von Norbert (Gast)


Lesenswert?

Uwe D. schrieb:
> ACHTUNG: Du darfst nicht USB und Vsys gleichzeitig verwenden.

Die beiden sind durch eine Diode entkoppelt, es sollte nur sicher 
gestellt sein das die 12V->5V eingeschaltet sind. Sonst schiebt USB 
rückwärts in den Spannungsregler. Besser wäre es aber, wenn nach dem 
externen Regler auch eine Diode auf Vsys zeigen würde.

von Uwe D. (monkye)



Lesenswert?

Norbert schrieb:
> Uwe D. schrieb:
>> ACHTUNG: Du darfst nicht USB und Vsys gleichzeitig verwenden.
>
> Die beiden sind durch eine Diode entkoppelt, es sollte nur sicher
Mega Culpa. Richtig.

Nachtrag: Es ist VBus…

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Uwe D. schrieb:
> Norbert schrieb:
>> Uwe D. schrieb:
>>> ACHTUNG: Du darfst nicht USB und Vsys gleichzeitig verwenden.
>>
>> Die beiden sind durch eine Diode entkoppelt, es sollte nur sicher
> Mega Culpa. Richtig.

Dann gleich noch einen Tipp: solche Zeichnungen postet man als PNG, 
nicht als JPEG. JPEG ist nur für Fotos sinnvoll.

von Norbert (Gast)


Lesenswert?

Kevin B. schrieb:
> Guten Tag,

Hast du schon einmal die IN1 und IN2 Kabel entfernt und dann gemessen 
welche Spannung Pins 16 und 17 heraus geben? Das sollte sehr nahe an der 
Versorgungsspannung liegen. Ein langsames ›Blinky‹ sollte auch für DMM 
gehen.

Des weiteren: MicroPython oder CircuitPython?
›from machine import Pin‹ deutet ja auf Ersteres. v1.19.1 ist die 
neueste Version.
Ach ja, für MicroPython sind die Pins jedenfalls korrekt als Push/Pull 
Ausgang geschaltet.

von Uwe D. (monkye)


Lesenswert?

Vorhin habe ich das mal getestet. Da kommen brav 3.3V raus. Und die 
Überschneidungen mit STDOUT gibt es nur dann, wenn man diese zuvor aktiv 
umbiegt.

Mal gucken ob es nochmal ein richtiges Bild gibt und ein paar 
Klarstellungen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.