PWM fan speed control with a 12F683


Closed Thread
Results 1 to 18 of 18

Hybrid View

  1. #1
    Join Date
    Jan 2006
    Location
    Istanbul
    Posts
    1,185


    Did you find this post helpful? Yes | No

    Default Re: PWM fan speed control with a 12F683

    Since you have an onboard PWM module running in the background, you can also have a second pwm by software running in the foreground.

    The code would be as follows.
    You are now using two buttons, one is for LED and the other is for Fan.
    I suggest that you use Fan on GPIO.2 (on board module), and LED on GPIO.5 pin.
    Also, you have button on GPIO.3, and you are puling it down .
    Nowyou have a second button but is is being pulled high.



    Code:
    @ DEVICE PIC12F683, FCMEN_OFF, IESO_OFF, INTRC_OSC_NOCLKOUT , WDT_OFF, PWRT_ON, MCLR_OFF, PROTECT_ON, BOD_OFF
     
     OSCCON   = %01110001         ' Internal 8MHz osc.
     DEFINE OSC 8
     
     ' ======= Common Settings =================================
     ADCON0 = 0
     ANSEL   = 0
     CMCON0 = 7                     ' Comparators off.
     
     TRISIO = 0
     GPIO     = 0
     
     ' ============= PWM Settings =========
     CCP1CON =     %00001100             ' CCP1, PWM mode
     PR2         =     250                         '
     T2CON     =     %00000101             ' TMR2 on, prescaler 1:4
     CCPR1L   = 0
     Speed VAR CCPR1L ' Speed variablefor LED brightness.   
     
     Speed2 VAR BYTE   ' Speed2  variable for fan speed.
     
     ' GPIO.0         ' Empty.
     ' GPIO.1         ' Empty.
     ' GPIO.2         ' LED is connected to GPIO.2 (on board PWM module)
     Btn   VAR GPIO.3   ' Assuming ; the pin is pulled down to GND by 10K resistor, and button pulls it high to Vdd.
     Btn2 VAR GPIO.4   ' Second button. But the pin is pulled high internally. So no external pull up or pull down resistor is required.
                      ' Have a button between this pin and GND (unlike the first button).   
     Fan   VAR GPIO.5   ' Fan motor output. 
     
     
     INPUT Btn2             ' Make the second button pin an input pin.
     OPTION_REG.7 = 0 '
     WPU.4 = 1               ' Enable internal pull up resisitor for Second button pin (GP4)
     
     
     
     PAUSE 10
     Speed2 = 0
     
     ' First button, btn, controls the LED via onboard PWM module.
     ' Second button controls the FAN via software PWM via GPIO.5 output pin and GPIO.4 input pin.
     ' Having the Fan on GPIO.2 and LED on GPIO.5 would be better I think.
     
     Start:
     
              IF Btn = 1 THEN           ' When this button  is pressed, it pulls the pin high.
                     IF Speed + 85 < 256 THEN       ' 0, 85, 170, 255, 0 
                              Speed = Speed + 85
                     ELSE
                             Speed = 0
                     ENDIF
             
             WHILE Btn = 1           ' When this button is being pressed, have no interruption on Fan control.
                             PWM Fan,Speed2,1   
                        WEND
         ENDIF
         
         IF Btn2 = 0 THEN           ' When this button  is pressed, it pulls the pin low.
                     IF Speed2 + 85 < 256 THEN       ' 0, 85, 170, 255, 0 
                              Speed2 = Speed2 + 85
                     ELSE
                             Speed2 = 0
                     ENDIF
             
             WHILE Btn2 = 0                 ' When this button is being pressed, have no interruption on Fan control.
                             PWM Fan,Speed2,1    
                         WEND
         ENDIF
         
         
         PWM Fan,Speed2,1   ' Always drive the fan output.  
         
         
     GOTO Start
     
     END
    "If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte

  2. #2
    Join Date
    Sep 2010
    Location
    Las Vegas, NV
    Posts
    305


    Did you find this post helpful? Yes | No

    Default Re: PWM fan speed control with a 12F683

    You are my hero. I've yet to try it but I really appreciate your help. Thanks

  3. #3
    Join Date
    Sep 2010
    Location
    Las Vegas, NV
    Posts
    305


    Did you find this post helpful? Yes | No

    Default Re: PWM fan speed control with a 12F683

    I have a couple of questions I hope you'll answer so I can understand what's going on better.

    Why is it important to put the fan on gpio.2? I realize it's the "on-board pwm module" but what does that buy you in either performance or code simplicity? Why couldn't I put it on any pin like the LED?

    Why turn all these off: FCMEN_OFF, IESO_OFF, WDT_OFF ?

    Are these two statements redundant:
    OSCCON = %01110001 ' Internal 8MHz osc.
    DEFINE OSC 8


    Thanks for your time and patience.



  4. #4
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default Re: PWM fan speed control with a 12F683

    Why turn all these off: FCMEN_OFF, IESO_OFF, WDT_OFF ?
    Since you're using the internal OSC... there's no need to use the internal/external switchover feature, same goes for FailSafe clock.... check out the datasheet for the whole set of crispy and ... obscure... details

    WDT_OFF? It's really up to you to decide, I tend to left it to ON... but, it's always case by case... still the datasheet will provide you some detail about the benefits of WDT to ON.

    Are these two statements redundant:
    OSCCON = %01110001 ' Internal 8MHz osc.
    DEFINE OSC 8
    No they're not, the OSCCON line specify the OSC speed to the PIC, while the DEFINE OSC specify the OSC Speed to the compiler.
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  5. #5
    Join Date
    Sep 2010
    Location
    Las Vegas, NV
    Posts
    305


    Did you find this post helpful? Yes | No

    Default Re: PWM fan speed control with a 12F683

    Got the program and got the circuit set up. It seems to work well with LEDs but feeding the output to a FET, at least the FET I'm using, won't trigger the FET.

    I looked at it with a scope and I'm getting barely over a 2V Peak signal. I assumed I'd get 5V square wave pulses spaced to get the right voltage from the PWM module. Did I do something wrong or do I need to find another FET?

    I do appreciate the help and your patience.

  6. #6
    Join Date
    Jan 2006
    Location
    Istanbul
    Posts
    1,185


    Did you find this post helpful? Yes | No

    Default Re: PWM fan speed control with a 12F683

    What FET?
    MosFet?

    Need to see the circuit anyway.
    "If the Earth were a single state, Istanbul would be its capital." Napoleon Bonaparte

  7. #7
    Join Date
    Sep 2010
    Location
    Las Vegas, NV
    Posts
    305


    Did you find this post helpful? Yes | No

    Default Re: PWM fan speed control with a 12F683

    Ok forget about the FET and talk to me about the PWM signal. Should it be 5V pulses or 2.2V pulses? If 5V, what do I need to set to make it be that level?

Members who have read this thread : 1

You do not have permission to view the list of names.

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts