TEC controller


Closed Thread
Results 1 to 19 of 19

Thread: TEC controller

Hybrid View

  1. #1
    Join Date
    Sep 2009
    Posts
    755


    Did you find this post helpful? Yes | No

    Default Re: TEC controller

    Why not add another sensor on hot side of TEC to control fans independently from TEC?

  2. #2
    Join Date
    Oct 2012
    Posts
    83


    Did you find this post helpful? Yes | No

    Default Re: TEC controller

    Hi Pedja089,

    This might be one of the improvements that I thought about too, in case this first minimal approach will not work.
    I’m also planning on adding a temperature sensor / thermostat on the cold side (if my testing finds it necessary) to prevent freezing of the TEC. I have some trusty DS1821 that can be programmed for different trigger temperatures.
    I wanted to start simple which is the reason why I’m using the same output for fans and TEC for now.
    The nice part is that the cooler is back together, I have access to all wiring and I can do all the work /changes externally.

    Thank you for interest and support.

    Nick

  3. #3
    Join Date
    Oct 2012
    Posts
    83


    Did you find this post helpful? Yes | No

    Default Re: TEC controller

    This is the latest addition to the TEC controller: One pot on ADC1 sets the temperature.
    I’ve done it such way so with a linear pot the target temperature can be set between 40 and 65 degrees F.

    Code:
    'Last release 9_16_16 Implements pot for setting set_temp
    @__config_device_pic16f819
    @__config_wdt_off
    @__config_hs_osc
    @__config_pwrt_on
    @__config_mclr_off
    @__config_lvp_off
    @__config_protect_on
    
    DEFINE OSC 8        
    
    DEFINE DEBUG_REG PORTB
    DEFINE DEBUGIN_REG PORTB
    DEFINE DEBUG_BIT 6
    DEFINE DEBUGIN_BIT 7
    DEFINE DEBUG_MODE 1                
    DEFINE DEBUG_BAUD 38400
    
    DEFINE  ADC_BITS        8
    DEFINE  ADC_CLOCK       3
    DEFINE  ADC_SAMPLEUS    50
    ADCON1=%01001110  
    
    pwm_out         var     PORTB.2
    
    adval           var     word
    val_1           var     byte
    val_2           var     byte
    val_3           var     byte
    new             var     word
    act_temp        var     byte
    set_temp        var     byte
    new_temp        var     byte
    temp_index      var     byte
    i               var     word
    pwm_pars        var     word
    id              var     byte
    pwm_flag        var     bit
    
    start_ch        con     126
    end_sym         con     251
    samples         con     39 
    divider         con     20
    hysteresis      con     1
    min_pwm         con     30
    max_pwm         con     50
    full_pwm        con     40
    
    CCP1CON = %00001100     
    PR2 = 15            
    CCPR1L = 0         
    CCP1CON.5 = 0
    CCP1CON.4 =0
                                                                                                   
            High pwm_out
            Pause 500
            Low pwm_out
            T2CON.2 = 1
    '        set_temp=69
            id="1"
            pwm_flag=0
            goto main     
    
    send_out:
            debug start_ch,id,val_1,val_2,val_3,end_sym
            return 
    
    set_pwm_pars:
            CCPR1L = pwm_pars >> 2
            CCP1CON=$0C|((pwm_pars&$3)<<4) 
            return
    
    read_act_temp:
            new = 0
            For temp_index = 1 TO samples
            ADCIN 0,adval
            new = new + adval
            Next
            act_temp=new/divider
            return
    read_set_temp:
            new = 0
            For temp_index = 1 TO 9
            ADCIN 1,adval
            new = new + adval
            Next
            set_temp= 40 + new/100  'keeps set_temp between 40 and 65 deg. F
            return
    
    decide:
            If act_temp < (set_temp-hysteresis) then 
            pwm_pars =0
            pwm_flag=1
            endif
            If act_temp > set_temp and pwm_flag =0 then 
            pwm_pars = min_pwm+(act_temp - set_temp)
            goto jump
            endif  
            If act_temp > (set_temp + hysteresis) and pwm_flag =1 then
            pwm_pars = start_pwm
            pwm_flag=0
            endif
    jump:
            gosub set_pwm_pars
            val_1=act_temp
            val_2=pwm_pars
            val_3=set_temp
            Return
    Main:
            gosub read_act_temp
            gosub read_set_temp
            gosub decide
            gosub send_out
            pause 1500 
            goto Main    
    end
    I think that I will settle for that now. I will just test its performance for the next week or so and wrap the project up for this particular cooler.
    A friend of mine is offering me a huge 125 bottles cooler with refrigeration problems (old Freon compressor type). If this first attempt will prove successful I will spend more time saving the big cooler which is a lot nicer and a lot more expencie than this one.
    I manage to get 6 brand new TECs, more powerful than the other ones (7-8 Amps) and I will start experimenting with them and different setups.
    It might take a little time but I will keep you posted.

    Thank you everyone for the input.

    Nick

Similar Threads

  1. Repeater ID and controller
    By Macgman2000 in forum mel PIC BASIC Pro
    Replies: 12
    Last Post: - 30th March 2012, 00:06
  2. SMS Controller
    By savnik in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 8th September 2006, 16:12
  3. temperature controller
    By PoTeToJB in forum mel PIC BASIC Pro
    Replies: 3
    Last Post: - 24th April 2006, 21:01
  4. PID CONTROLLER help..
    By tkly36 in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 12th April 2006, 08:19

Members who have read this thread : 0

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

Posting Permissions

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