# Συζήτηση Κυκλωμάτων > Ψηφιακά Κυκλώματα > Μικροελεγκτές >  >  Μικροελεγκτής PIC κ έλεγχος ανεμιστήρα υπολογιστή. (PIC-based PWM fan controller)

## Stergios_[.gr]

Προσπαθώ να φτιάξω έναν ελεγκτή για ανεμιστηράκια από ΗΥ. Ο ελεγκτής αυτός θα δέχεται ψηφιακά σήματα (είτε από την σειριακή θύρα, είτε από μΕ) και θα ρυθμίζει την ταχύτητα περιστροφής του ανεμιστήρα.

Το κάνω κυρίως για να μάθω να δουλεύω pic και σειριακή θύρα, όχι τόσο για το έτοιμο αποτέλεσμα (οπότε, δεν θα με  βοηθούσαν αγοραστές λύσεις). Έχω καταφέρει να δημιουργήσω PWM με έναν PIC16F84A τον οποίο είχα πρόχειρο, αλλά μάλλον θα περάσω σε κάποιον άλλον pic o oποιος θα υποστηρίζει (E)CCP/PWM από μόνος τους, όπως ο PIC16F887. Σε οποιαδήποτε περίπτωση το ύψος του PWM θα είναι 5V, όχι αρκετά υψηλή τάση ώστε να οδηγήσει στο μέγιστο έναν 12V ανεμιστήρα. 

Η ερώτησή μου είναι λοιπόν η εξής: τι είδους τρανζίστορ χρειάζομαι για να πάρω το PWM που θέλω στα 12V? 



Το έκανα στο multisim για ένα BC337, επειδή έτσι σκέφτηκα ότι θα γίνει, αλλά δεν δουλεύει.. Συμπαθάτε με για τις "βασικές" μου ελλείψεις γνώσεων, αλλά τώρα μαθαίνω.. Hobby-στας είμαι, μην πυροβολείτε! :Laugh: 

ΕΥΧΑΡΙΣΤΩ!

----------


## klik

Τωρα σου δίνει περίπου 5V στον ανεμηστηρα.

Για NPN, στο *συλλέκτη* βάζεις τον ανεμηστηρα και τον εκπομπό στη γειωση. Το άλλο άκρο του ανεμηστηρα στο +.
(Ιδια συνδεσμολογια με τα ρελε).
Στη βάση πρέπει να βάλεις και μια αντίσταση π.χ. 1ΚΩ.

Για PNP τρανζιστορ, μοιαζει η συνδεσμολογία έτσι οπως την έχεις (θα οδηγείτε ο ανεμηστηρας αν πάρει 0 στη βάση).

----------


## billtech

φιλε μου στεργιε σε mikrobasic  εκανες τον κωδικα?
αν θελεις ανεβασε τον.
επισης... δεν ξερω την ισχυ του κινητηρα σου αλλα λογικα μικρος ειναι αρα οπως ειναι βαλε τον εκπομπο στη γη και το κινητηρα μεταξυ συλλεκτη και 12βολτ.και μια αντισταση 10κ περιπου στη βαση του συλεκτη.

----------


## Stergios_[.gr]

Βασίλη, ναι σε MikroBasik Pro έχω γράψει τον κώδικα, και αργά χθές μεταπήδησα από pic16f84A σε *pic16F887*!

Ορίστε ο κώδικας:



```
program FanControl
' * Description
' Fan controller through PIC16F887
'
' * Test configuration
'     MCU:            P16F887
'     Dev.Board:      44pin demo board
'     Oscillator:     internal 8Mhz

dim temp as word

sub procedure WAIT(dim temp10 as word)
dim i as word
i = 0
for i = 0 to temp10
delay_us(1)
next i
end sub

main:
  OSCCON = %1111101
  ANSEL = %00000001          ' Configure AN0 pin as analog
  TRISA = %00000001          ' PORTA is input
  TRISC = %00000000          ' PORTC is output for pulses
  TRISD = %00000000          ' PORTD is output for temp on 8 LEDs
  PORTD = %00000000          ' initialize PORTD
  PWM1_Init(5000)            ' Start PWM function at 5kHz
  PWM1_Start
  while true
    temp = ADC_Read(0) / %100
    portd = temp             ' Show "temp" on the 8 LEDS
    PWM1_set_duty(temp)
  wend
  PWM1_stop
end.
```


Δεν τον δημοσίευσα απευθείας επειδή δεν ήταν έτοιμος! :Laugh: 

Ο ανεμιστήρας τραβάει ΜΕΓΙΣΤΟ ρεύμα 0.25Α, μια χαρά δεν θα μπορεί να το διαχειριστεί το BC337? 800 mA γράφει το datasheet... Δεν υπάρχουν τίποτα περίεργα ή μεταβατικά φαινόμενα, απλό πράγμα δεν είναι?.. :Blush:  

Ο φίλος Kopla είπε να βάλω και μια *δίοδο* (και όχι αντίσταση όπως εσφαλμένα έγραψα) παράλληλα στον ανεμιστήρα για να μην μου στείλει κανένα peak ρεύματος πίσω σε περίπτωση που σταματήσει απότομα ο ανεμιστήρας..

----------


## billtech

αυτος ο κωδικας ειναι ο δικος σου?
επαιξες με το παραδειγμα της mikrobasic?
δεν ξερω σιγουρα αν πρεπει να βαλεις αντισταση.εγω νομιζω διοδο πρεπει να βαλεις.
ας μας πει καποιος αλλος σιγουρα.

----------


## Stergios_[.gr]

Δικός μου είναι ο κώδικας, απλά χρησιμοποιώ το φορμάτ που μου έμαθε η ΜΒ. Γι'αυτό μοιάζει τόσο.. Ποιό παράδειγμα? Έχει έτοιμο και παιδεύομαι τζάμπα??

----------


## billtech

τα LEDS που κολλανε με το μοτερ?
στα LED λες οτι δειχνεις τη θερμοκρασια.ποια θερμοκρασια?
ποιο ADC χρησιμοποιεις?με πληκτρα δεν αναιβοκατεβαζεις τις στροφες?

----------


## Stergios_[.gr]

XAXA
ΔΙΚΙΑ ΜΟΥ ΑΝΟΗΣΙΑ Bill!! Δεν είναι *TEMP*erature, αλλά *TEMP*orary*!* Με συγχωρείς!
Στην πλακέτα μου έχω 8 LEDs τα οποία χρησιμοποιώ ως debugger για να δώ αν πηγαίνει σωστά ή όχι το πρόγραμμα...

Οπότε:
εμφανίζω στα 8 LED την τιμή που παίρνει η προσωρινή μεταβλητή *ΤΕΜΡ*orary (πχ temp = 01000011 τότε θα έχω αναμμένα τα 0#0000## LEDs)

Χρησιμοποιώ το ADC ΑΝ0 στο οποίο έχω ποτενσιόμετρο, βλ. κ σχηματικό. με πλήκτρα ήμουν στο 16f84A, που δεν είχε ADC, τώρα από αναλογική είσοδο..Με συγχωρείς που σε κουράζω με ημιτελείς δημοσιεύσεις, αλλά το φτιάχνω τώρα και αλλάζουν όλα κάθε 10 λεπτά!! Βλέπεις κανένα λάθος?

----------


## kopla

> Ο φίλος Kopla είπε να βάλω και μια αντίσταση παράλληλα στον ανεμιστήρα για να μην μου στείλει κανένα peak ρεύματος πίσω σε περίπτωση που σταματήσει απότομα ο ανεμιστήρας..



Οχι αντίσταση Στεργιε.... θα μας κράξουν. Δίοδο σου είπα. Όπως το εχει ο Klik... αυτο δεν σου έστειλα?  :Blush: 
Επίσης όχι σε περίπτωση που σταματήσει απότομα ο κινητήρας... λόγω του πηνίου η δίοδος. :Blink:

----------


## Stergios_[.gr]

*ΑΝΑΠΗΡΙΑ 100%!!!***

Ο Μένιος είπε να βάλω *ΔΙΟΔΟ* όπως και ο Klik! *ΚΑΙ ΜΑΛΙΣΤΑ ΕΓΡΑΨΑ ΒΙΑΣΤΙΚΑ ΤΟ ΜΗΝΥΜΑ ΓΙΑ ΝΑ ΠΡΟΛΑΒΩ ΤΑ ΜΑΓΑΖΙΑ, ΝΑ ΠΑΡΩ ΤΗΝ 1Ν4001!!!!


ΣΥΓΓΝΩΜΗ!*

----------


## Stergios_[.gr]

Ερμ... στο Multisim, για 12V ανεμιστήρα, τι βάζω?  :Blushing:  "DC_MOTOR"?
άλλους μΕ δεν υποστηρίζει? Πιό καινούργιους, όπως ο PIC16F887...?

----------


## Stergios_[.gr]

*ΕΠΙΤΥΧΙΑ!!!*
Τα κατάφερα τελικά να το οδηγήσω μέσω ενός PIC12F615 (~1.5€)!



Έβαλα και ένα LED για να έχω μια ένδειξη πόσο μεταβάλλεται το duty cycle. 

Ορίστε ο κώδικας για MikroBasic Pro:



```
Program PWM_test

' * DESCRIPTION
' PWM Fan controller through PIC12F615
'
' * TEST CONFIGURATION
'     MCU:            P12F615
'     Oscillator:     internal 4Mhz
'
' * NOTES
'   Pin (Function):
'   1(Vdd, +5V)    5(CPP1, pwm and led/fan)
'   2              6
'   3(AN3)         7
'   4              8(Vss, GND)
'
' * CONFIGURATION BITS: 
'       Oscillator: Internal RC no clock
'       Watchdog: ON
'       Power Up timer: ON
'       Master Clear Enable: Enabled
'       Code protect: OFF
'       Internal Oscillaotr Frequency: 4 MHz
'       BOD: BOD enabled

dim temp as byte
main:
  GPIO = %000000           ' initialize GPIO
  TRISIO = %001000         ' configure GPIO as output
  ANSEL = %001000          ' setting GPIO as digital I/O

  PWM1_init(250)            'Starting PWM function at 250HZ
  PWM1_start
  while TRUE
  temp = adc_read(3)
  PWM1_set_duty(temp)
  wend
  PWM1_stop
end.
```


Δύο παρατηρήσεις:

Από τον ανεμιστήρα ακούγεται συνέχεια ένας ήχος, μάλλον βόμβος σε υψηλή συχνότητα ο οποίος είναι πιο ισχυρός όταν το duty cycle είναι μικρό. Ο ανεμιστήρας μου είναι ένας κλασικός 12Vdc Brushless fan, ο οποίος έχει είσοδο 2 καλωδιάκια, ένα κόκκινο και ένα μαύρο.Με duty cycle στο 100%, ο ανεμιστήρας δεν αποδίδει όσο αποδίδει με συνεχή τάση 12V. Υπάρχει τρόπος να του δώσω λίγη παραπάνω ισχύ? ΠΧ μειώνοντας την αντίσταση R3 1kΩ? Την τιμή 1ΚΩ την έβαλα επειδή μου αυτήν είδα σε παλιότερα κυκλώματα, μπορεί κάποιος να μου εξηγήσει γιατί την χρησιμοποιούσαν ως τόση?
Ευχαριστώ!

----------


## Stergios_[.gr]

Το παρέκαμψα το ζήτημα με τον βόμβο.. 
Του έστειλα PWM με συχνότητα *25 kHz*, το οποίο είναι εκτός του φάσματος που μπορεί να συλλάβει το ανθρώπινο αυτί (20 Hz - 20 kHz) οπότε ΔΕΝ το ακούω, και ΔΕΝ με ενοχλεί! 

Μήπως κάνει κακό στον ανεμιστήρα, ή δεν θα έπρεπε να με νοιάζει?

Ορίστε και ο κώδικας για *PIC16F887* και *MikroBasic Pro*:



```
 
program FanControl
' * DESCRIPTION
' PWM Fan controller through PIC16F887. RS232 (serial port) communication
'
' * TEST CONFIGURATION
'     MCU:            P16F887
'     Dev.Board:      44pin demo board
'     Oscillator:     internal 8Mhz
dim tempus as word


main:
  OSCCON = %1111101
  ANSEL = %00000001          ' Configure AN0 pin as analog
  TRISA = %00000001          ' PORTA is input
  TRISC = %00000000          ' PORTC is output for pulses
  TRISD = %00000000          ' PORTD is output for 'tempus' on 8 LEDs
  PORTD = %00000000          ' initialize PORTD
  PWM1_Init(25000)            ' Start PWM function at 25kHz
  PWM1_Start
  while true
    tempus = ADC_Read(0)/4
    portd = tempus              ' Show "temp" on the 8 LEDS
    PWM1_set_duty(tempus)
  wend
  PWM1_stop
end.
```


Τώρα παίζω λίγο με UART και RS232 για επικοινωνία με την σειριακή θύρα.. 

...more to come!

----------


## Nemmesis

> Από τον ανεμιστήρα ακούγεται συνέχεια ένας ήχος, μάλλον βόμβος σε υψηλή συχνότητα ο οποίος είναι πιο ισχυρός όταν το duty cycle είναι μικρό. Ο ανεμιστήρας μου είναι ένας κλασικός 12Vdc Brushless fan, ο οποίος έχει είσοδο 2 καλωδιάκια, ένα κόκκινο και ένα μαύρο.



εγω θα ελεγα οτι πρεπει να ανεβασεις την συχνοτητα αρκετα δλδ ας πουμε 10khz και να βαλεις ενα ισως και εναν μικρο ηλεκτρολητικο. παρακατο βλεπω εκανες πολυ χαμηλη την συχνοτητα πραγμα οχι κακο απλα το προβλημα υπαρχει απλα δεν το ακουμε.. τωρα δεν νομιζω να παιζει ρολο στην ζωη του fan. 




> Με duty cycle στο 100%, ο ανεμιστήρας δεν αποδίδει όσο αποδίδει με συνεχή τάση 12V. Υπάρχει τρόπος να του δώσω λίγη παραπάνω ισχύ? ΠΧ μειώνοντας την αντίσταση R3 1kΩ? Την τιμή 1ΚΩ την έβαλα επειδή μου αυτήν είδα σε παλιότερα κυκλώματα, μπορεί κάποιος να μου εξηγήσει γιατί την χρησιμοποιούσαν ως τόση?Ευχαριστώ!



βλεπω εχεις το bc337 το οποιο μαλλον ειναι κακη επιλογη λογο του οτι εχει αρκετα μεγαλη εσωτερικη αντισταση με αποτελεσμα ακομα και οταν εχεις φουλ το pwm να μην στανουν τα 12στο fan.. αν εχεις βαλε κανα μοσφετ.. το bc337 δεν σου ζεστενεται?

----------


## Stergios_[.gr]

> εγω θα ελεγα οτι πρεπει να ανεβασεις την συχνοτητα αρκετα δλδ ας πουμε 10khz και να βαλεις ενα ισως και εναν μικρο ηλεκτρολητικο. παρακατο βλεπω εκανες πολυ χαμηλη την συχνοτητα πραγμα οχι κακο απλα το προβλημα υπαρχει απλα δεν το ακουμε.. τωρα δεν νομιζω να παιζει ρολο στην ζωη του fan.



"Το παρέκαμψα το ζήτημα με τον βόμβο.. 
 Του έστειλα PWM με συχνότητα *25 kHz*, το οποίο είναι εκτός του φάσματος που μπορεί να συλλάβει το ανθρώπινο αυτί (20 Hz - 20 kHz) οπότε ΔΕΝ το ακούω, και ΔΕΝ με ενοχλεί!"





> βλεπω εχεις το bc337 το οποιο μαλλον ειναι κακη επιλογη λογο του οτι εχει αρκετα μεγαλη εσωτερικη αντισταση με αποτελεσμα ακομα και οταν εχεις φουλ το pwm να μην στανουν τα 12στο fan.. αν εχεις βαλε κανα μοσφετ.. το bc337 δεν σου ζεστενεται?



Το BC337 δεν ζεσταίνεται, ούτως ή άλλως το έχω δοκιμάσει το πολύ για 15 λεπτά συνεχόμενα... Μπορείς να μου προτείνεις ένα κατάλληλο MOSFET κ τις μετατροπές που θα πρέπει να κάνω? Σε ευχαριστώ πολύ Παναγιώτη!

----------


## Stergios_[.gr]

Mήπως θα μπορούσε κάποιος να μου εξηγήσει πώς ακριβώς να περάσω από το ΝΡΝ σε MOSFET? τι θα χρειαστεί να αλλάξω? Σας ευχαριστώ!

----------


## Stergios_[.gr]

Τελείωσα και το PCB! Μου μένει η συναρμολόγηση και η τοποθέτηση σε κουτί, θα ποστάρω μόλις ξεμπερδέψω με κάποια τρεξίματα που έχω στην σχολή..

----------


## Stergios_[.gr]

Μήπως έχετε να προτείνετε κάποιον καλύτερο αντικαταστάτη για το BC337 που χρησιμοποιώ? 
Ή μήπως είναι αρκετό?

Έχω εύκαιρα τα 2N2222 και IRFZ44N...

Ευχαριστώ!

----------


## FILMAN

Βρε η 1Ν4001 δεν είναι για 25kHz!

----------


## Stergios_[.gr]

> Βρε η 1Ν4001 δεν είναι για 25kHz!



???  :Unsure:  Τι έπρεπε να βάλω ???
Τώρα το έβαλα και το δουλεύω 1 χρόνο βέβαια, αλλά για δώσε μου τα φώτα σου Φίλλιπε.. Τουλάχιστον να γλυτώσει το καινούργιο project  :Smile:

----------


## FILMAN

Μια γρήγορη δίοδο. Ίσως μια 1Ν5819. Ή για μικρά ρεύματα, μια 1Ν4148.

----------


## Stergios_[.gr]

*Διορθωμένο σχέδιο με σωστή δίοδο 1Ν4148!*

----------


## spiroscfu

Στέργιο εντάξει είναι η δίοδος αλλά το led εκεί που το έβαλες δεν θα σου δείχνει κάτι,
μπορείς να το βάλεις κατευθείαν στο πιν5(GP2) με μια αντίσταση 220Ω σε σειρά ή στον συλλέκτη του τρανζίστορ.

----------


## Stergios_[.gr]

Μου δείχνει την ρύθμιση του ποτενσιόμετρου. 100% ποτενσιόμετρο, 100% φωτεινό LED..κ.ο.κ...

----------


## FILMAN

Ναι αλλά κάτω από 1.5V σβήνει...

----------


## spiroscfu

Και επιπλέον έχει το ποτενσιόμετρο 5ΚΩ και μια αντίσταση σε σειρά 470Ω, αν πούμε πως γυρνάμε το δρομέα στο 20% θα έχουμε άλλη μια αντίσταση σε σειρά ~1ΚΩ και έτσι το led θα πάρει 3/(470+1000)=2mA (δεν θα ανάβει κάν).

----------


## Stergios_[.gr]

Σωστό παιδιά, το έχω κάνει λάθος.. Απλά ήθελα μια "ένδειξη" του τι παίζει στο ποτενσιόμετρο.. 
Δίκιο έχετε..
Ευχαριστώ

----------


## billtech

καλημερα!!!! δοξασι ο θεος που υπαρχει και ο στεργιος..πανω που νομιζα εμεινα μονος μου με τους uC και PIC γενικα.
αμα εβαζες ενα πολυμετρο στο ποτενσιομετρο σου δεν θα εβλεπες αν παιζει το ποτενσιομετρο? και να δεις και τι τιμες βγαζει στη εξοδο?

----------


## Stergios_[.gr]

Σωστό!
Μην με κτυπάτε άλλο! ΟΧΙ ΑΛΛΟ ΚΑΡΒΟΥΝΟ! ΕΚΑΝΑ ΛΑΘΟΣΣΣΣΣΣ!!!

Χαχαχα

(Επέστρεψα Βασίλη!! 313 ΛΕΛΕ!  :Wink: )

----------

