Sari la conținut
ELFORUM - Forumul electronistilor

Control PWM si RPM ventilator 4 pini cu Raspberry Pi


Blacksmith

Postări Recomandate

Sint incepator in Raspberry Pi si as vrea sa va intreb cate ceva...

Obiectivul final este sa controlez un ventilator din ASTA prin PWM si sa masor RPM-ul, totul cu Raspberry Pi 4.

Aceasta postare va fi si despre hardware si despre software... Pentru software folosesc Python 3.

 

Hai sa incepem cu RPM-ul... Ventilatorul asta are un pin pe care da 2 impulsuri la fiecare rotatie. Merge cu maxim 2100 RPM, deci 70 impulsuri pe secunda. Cum as putea sa masor asta cu RPi ? Mi-ar place sa fac asta intr-un mod in care sa nu prea solicite procesorul, ceva hardware daca s-ar putea. Dar din ce am studiat eu, nu prea cred ca are asa ceva. Singurul mod pe care l-am gasit ar fi urmatorul... Ar solicita codul asta procesorul ? Adica la fiecare 15ms se va declansa procedura de numarare "count_impulses"...

 

import RPi.GPIO as GPIO
import time

fan_pin = 17  # Replace with the GPIO pin you've connected the RPM signal wire to

GPIO.setmode(GPIO.BCM)
GPIO.setup(fan_pin, GPIO.IN)

count = 0

def count_impulses(channel):
    global count
    count += 1

GPIO.add_event_detect(fan_pin, GPIO.RISING, callback=count_impulses)

try:
    while True:
        time.sleep(1)
        print(f"Impulses in the last second: {count}")
        count = 0  # Reset count for the next second

except KeyboardInterrupt:
    GPIO.cleanup()

 


 

Link spre comentariu
  • Răspunsuri 70
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Blacksmith

    30

  • Stefan

    12

  • stryx

    9

  • BRANCA

    6

Top autori în acest subiect

Imagini postate

Mda, vad ca si ei tot asa au facut citirea RPM-ului. Adica nu sint 100% sigur, ca nu inteleg prea bine limbajul C, dar cam asa arata.

 

E cam ca dracu sa incerci sa faci ceva fara sa ai datasheet-ul piesei. In cazul de fata, al ventilatorului... De unde sa stiu eu ce are ala inauntru ca sa stiu cum trebuie comandat ? Vad ca cei din link-ul pus de Daniels au conectat si PWM si RPM direct la ventilator, fara rezistente, fara nimic... Imi e frica sa merg asa pe ghicite, ca nu vreau sa ard nici RPi-ul nici ventilatorul.

Link spre comentariu

https://noctua.at/pub/media/wysiwyg/Noctua_PWM_specifications_white_paper.pdf

 

La pg.3 sunt specificatiile pentru tacho:

• two cycles per revolution
• open collector output
• Maximum current is 5mA for 5V and 12V fans and 2mA for 24V fans, so for example,
when using a 12V fan a resistor value of 2.7K Ohm or larger is suitable

 

La pg.6 sunt specificatiile pentru control PWM:

• Target frequency: 25kHz, acceptable range 21kHz to 28kHz
• Maximum voltage for logic low: VIL=0,8V
• Absolute maximum current sourced: Imax=5mA (short circuit current)
• Absolute maximum voltage level: VMax=5,25V (open circuit voltage)
• Allowed duty-cycle range 0% to 100%

 

Astea sunt specificatii standard pentru ventilatoarele de PC indiferent de producator sau model.

 

Ca noob (adica eu) cea mai mare problema pe care o vad ar fi limitarea semnalului tacho de la 12V (sau la cat alimentezi ventilatorul) in limita acceptata de PR4 (daca tin bine minte 3,3V).

 

Inca un document in legatura cu ventilatoarele PC:

https://www.glkinst.com/cables/cable_pics/4_Wire_PWM_Spec.pdf

 

PS: in proientul postat de @daniels e folosit un ventilator de 5V.

Editat de stryx
Link spre comentariu

Din cate am inteles @Blacksmith vrea sa alimenteze ventilatorul direct la 12V (borna de alimentare a NAS-ului) iar semnalul PWM sa-l dea pe al partulea fir de la ventilator (dedicat controlului in PWM).

Daca foloseste PWM direct pe alimentarea ventilatorului (12V) are nevoie de frecventa mica (parca pe la 300-500hz), dar aasta o sa-i dea peste cap citirea turatiei deoarece si tacho o sa fie alimentat in PWM.

Link spre comentariu

PWM-ul trebuie sa iasa dintr-un pin al RPi-ului si sa intre in pin-ul 4 al ventilatorului. Din ce am mai studiat, se pare ca pinul 4 merge in poarta unui mosfet care alimenteaza ventilatorul. Din masuratori reiese ca ar avea si o rezistenta de 47k legata la +12V, deci cu pinul 4 in aer merge la full-speed. Se spune ca acel mosfet se deschide si cu cei 3.3V pe care ii scoate RPi-ul (teoretic standardul ar fi 5V, nici nu se recomanda mai mult). Dar acum eu nu inteleg cum sa fac conexiunile... Sa zicem ca vreau 100% si RPi-ul meu da 3.3V pe pin-ul de PWM. In cazul asta avem o legatura de +12V la cei 3.3V printr-o rezistenta de 47k... E ok asa, sa se scurga curent (0.2mA) din 12V in RPi ?

 

 

screenshot.1.png

Link spre comentariu

Am incercat deja, inainte sa citesc mesajele voastre, doar cu o rezistenta de 470R inseriata si se pare ca nu a patit nimic. Am reusit sa scot PWM, dar problema este ca imi sta procesorul intre 5 si 10% cand genereaza PWM. Pentru ca cica metoda pe care am folosit-o eu este software, nu hardware:

:84

 

import RPi.GPIO as GPIO
import time

# Set the GPIO mode to BCM
GPIO.setmode(GPIO.BCM)

# Define the GPIO pin
pwm_pin = 18

# Setup GPIO pin as PWM output
GPIO.setup(pwm_pin, GPIO.OUT)
pwm = GPIO.PWM(pwm_pin, 25000)
pwm.start(100)

try:
    while True:
      print('Speed: 100 %')
      pwm.ChangeDutyCycle(100)
      time.sleep(20)

      print('Speed: 50 %')
      pwm.ChangeDutyCycle(50)
      time.sleep(20)

except KeyboardInterrupt:
    pass

finally:
    # Stop PWM and cleanup GPIO
    pwm.stop()
    print("\nPWM stopped. Cleaning up GPIO...")
    GPIO.cleanup()

 

In primul exemplu al lui Daniels e varianta hardware si arata aia acolo ca nu mananca deloc din procesor... Dar e programul facut in nenorocimea aia de C, pe care eu nu-l inteleg. Si chiar daca l-as intelege n-as avea cum sa-l folosesc, ca tot programul proiectului meu e scris in Python.

Link spre comentariu
1 oră în urmă, antemir a spus:

Vad ca ai pus 25KHz la PWM. Chiar trebuie sa fie asa mare ?

Aia este frecventa standard pentru ventilatoarele de PC cand sunt controlate pe firul dedicat (ventilatoare cu 4 fire).

Documentatie am pus mai sus (doua documente ca exemplu), chiar daca nu e fix pentru modelul folosit de OP specificatiile pentru PWM si tacho sunt identice deoarece vorbim de un standard.

Link spre comentariu

Da, trebuie 25 KHz, ca asa se recomanda.

Am cautat toata ziua de mi-au iesit ochii din cap....

Cica ar mai fi o librarie gpiozero, care poate folosi pwm hardware, dar e tare complicat de setat. Nu primeste decat anumite valori ale frecventei, pe care eu nu le stiu. Au legatura cu clock-ul de la pwm-ul raspberry-ului meu.

Link spre comentariu

:dans: Am reusiiiiiiiiiiit !!

 

Am downloadat sursa bibliotecii direct de pe pagina aia si am pus-o in folderul cu proiectului meu, si merge sa o folosesti asa. Si se pare ca genereaza cu succes PWM hardware ! Pentru ca ventilatorul se invarte dupa ce duty cycle ii dau eu. Iar procesorul sta la 0%. 'Ai de capul meu... Mersi mult, Stefane ! De 12 ore caut non-stop pe internet dupa o solutie si in sfarsit am gasit-o !

Editat de validae
Library=Bibliotecă Nu Librărie...
Link spre comentariu

Am reușit sa o instalez direct din repository-urile lor dar într-adevăr comenta cum ca " externally-managed-environment", nu am mai postat pentru ca era destul de târziu si nu avem chef sa fac scurt pe GPIO. Adică m-am apucat pe la 12 sa instalez un Debian curat dar pana a terminat cu totul (cauta card, OS, python...) deja imi picau ochii.

Așa am aflat ca modulul PWM poate sa tina pasul pana la frecventa de 50MHz :56 Desigur ca de pe la 10MHz in sus nici nu iți mai dai seama ca a fost o unda dreptunghiulara dar cu circuite externe se poate reface cum dorești.

 

Cu comanda top nu am reușit sa vad nimic legat de PWM deci ii credem pe cuvânt ca e generat hardware, mă gândesc ca la 50MHz PWM procesorul trebuia sa gâfâie ceva.

 

import sys
from rpi_hardware_pwm import HardwarePWM

pwm = HardwarePWM(pwm_channel=0, hz=60)
pwm.start(100) # full duty cycle

pwm.change_duty_cycle(50)
pwm.change_frequency(int(sys.argv[1]))

#pwm.stop()

stefan@raspberrypi:~ $ python3 pwm_script.py 25000

25KHz.png

python3 pwm_script.py 250000

250KHz.png

python3 pwm_script.py 2500000

2-5MHz.png

python3 pwm_script.py 25000000

25MHz.png

python3 pwm_script.py 50000000

RPi-50-MHz.png

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări