Announcement

Collapse
No announcement yet.

Digital Fan Control คิดเองทำเองครับพี่น้อง

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Digital Fan Control คิดเองทำเองครับพี่น้อง

    นั่งคิดนั่งเขียนโปรแกรมอยู่หลายวันเลยกว่าจะสำเร็จแบบว่าไม่ได้เรียนอิเล็กทรอนิกส์มาและไม่เคยเรียนการเขียนโปรแกรมด้วยเลยใช้เวลานานนนนนนนนนนนหน่อย

    เมื่อหลายปีก่อนใช้ไอซี 317 ทำไปแล้วคราวนี้อัพเกรดเป็นแบบ Digital บ้าง ตัวนี้เป็นระบบ PWM ครับควบคุมด้วยไมโครคอนโทรลเลอร์ใช้ Mosfets เป็นตัวจ่ายไฟ มีชุความคุมพัดลมทั้งหมด 8แชลแนล Mosfets ผมใช้เบอร์ STN3NF06 ราคาประมาณตัวละ 5บาท เป็นตัวถังแบบ SOT-223 ขนาดเล็กดีแต่จ่ายกระแสต่อเนื่องได้สูงถึง 4A เลยจากการทดสอบต่อกับพัดลม 8cm 5000รอบ กินกระแส 0.7A จับตัว Mosfets ดูไม่ร้อนแม้แต่น้อยเลยครับ

    รูป Mosfets ครับ


    อันนี้ลองต่อทดลองบนโปรโตบอร์ด
    BORKED



    ตอนนี้ยังไม่ได้ออกแบบลายปริ้นเลยเดี๋ยวถ้าทำเสร็จจะเอามาให้ดู

  • #2
    โห่ แจ่มๆ
    รอดูนะครับ

    Comment


    • #3
      เข้ามาจด เด็กใหม่หัดทำ


      ตอนนี้ไปทำแอมก่อน

      Comment


      • #4
        เก่งมากเลยน่ะครับ ไม่ได้เรียนมาทำได้ขนาดนี้ เจ๋งมากๆ
        อยากเห็นแบบวงจรอ่ะครับ แล้วก็ ขอดูซอดโค๊ดหน่อยได้มั้ยครับ

        เผื่อจะเอาไปทำเล่นมั่ง

        Comment


        • #5
          สุยอดมากท่าน

          Comment


          • #6
            Originally posted by masterxz View Post
            เก่งมากเลยน่ะครับ ไม่ได้เรียนมาทำได้ขนาดนี้ เจ๋งมากๆ
            อยากเห็นแบบวงจรอ่ะครับ แล้วก็ ขอดูซอดโค๊ดหน่อยได้มั้ยครับ

            เผื่อจะเอาไปทำเล่นมั่ง
            จัดให้ครับรูปวงจรเดี๋ยวตามมาครับ เป็นโค๊ดของโปรแกรม mikroC PRO for AVR นะครับใช้ ATmege48 ตั้งให้ใช้ความถี่ภายใน 8MHz

            sbit LCD_RS at PORTC0_bit;
            sbit LCD_EN at PORTC1_bit;
            sbit LCD_D4 at PORTC2_bit;
            sbit LCD_D5 at PORTC3_bit;
            sbit LCD_D6 at PORTC4_bit;
            sbit LCD_D7 at PORTC5_bit;

            sbit LCD_RS_Direction at DDC0_bit;
            sbit LCD_EN_Direction at DDC1_bit;
            sbit LCD_D4_Direction at DDC2_bit;
            sbit LCD_D5_Direction at DDC3_bit;
            sbit LCD_D6_Direction at DDC4_bit;
            sbit LCD_D7_Direction at DDC5_bit;

            char *text = "Speed000";
            char *text2 = " FAN 00 ";

            void Display(unsigned char speed)
            {
            if(speed>99)
            {
            text[5] = speed/100 + 48;
            }
            else
            {
            text[5] = ' ';
            }
            if(speed>9)
            {
            text[6] = (speed/10)%10 + 48;
            }
            else
            {
            text[6] = ' ';
            }
            text[7] = speed%10 + 48;
            }

            char pwm[9];
            char pwmup[9];
            char pwmdown[9];
            char i,t,ch=1;
            unsigned int eep;

            void main()
            {
            for(t=1;t<9;t++)
            {
            pwm[t] = EEPROM_Read(t+50);
            }

            Lcd_Init();
            Lcd_Cmd(_LCD_CURSOR_OFF);
            Lcd_Cmd(_LCD_CLEAR);

            DDRD = 0xFF;
            DDRB = 0x00;

            WGM21_bit = 1;
            OCF2A_bit = 1;
            OCIE2A_bit = 1;
            CS20_bit = 0;
            CS21_bit = 1;
            CS22_bit = 1;
            OCR2A = 2;
            SREG_I_bit = 1;

            while(1)
            {
            if(eep<1670)
            {
            eep++;
            if(eep == 1666)
            {
            for(t=1;t<9;t++)
            {
            EEPROM_Write(t+50,pwm[t]);
            }
            }
            }

            text2[6] = ch +48;
            Lcd_Out(1, 1, text2);
            Display(pwm[ch]-1);
            Lcd_Out(2, 1, text);

            if(PINB6_bit == 0)
            {
            ch++;
            while(PINB6_bit == 0)
            {
            if(ch>8)
            {
            ch = 1;
            }
            Delay_ms(20);
            }
            }

            if(PINB7_bit == 0)
            {
            ch--;
            while(PINB7_bit == 0)
            {
            if(ch<1)
            {
            ch = 8;
            }
            Delay_ms(20);
            }
            }

            if(PINB0_bit == 0)
            {
            eep=0;
            pwm[ch]++;
            while(PINB0_bit == 0)
            {
            i++;
            if(pwm[ch]>=101)
            {
            pwm[ch] = 101;
            }
            Display(pwm[ch]-1);
            Lcd_Out(2, 1, text);
            if(i>=70)
            {
            while(PINB0_bit == 0)
            {
            Display(pwm[ch]-1);
            Lcd_Out(2, 1, text);
            pwm[ch]++;
            if(pwm[ch]>=101)
            {
            pwm[ch] = 101;
            }
            Delay_ms(100);
            }
            }
            Delay_ms(5);
            }
            i = 0;
            }

            else if(PINB1_bit == 0)
            {
            eep=0;
            pwm[ch]--;
            while(PINB1_bit == 0)
            {
            i++;
            Display(pwm[ch]-1);
            Lcd_Out(2, 1, text);
            if(pwm[ch]<=1)
            {
            pwm[ch] = 1;
            }
            if(i>=70)
            {
            while(PINB1_bit == 0)
            {
            Display(pwm[ch]-1);
            Lcd_Out(2, 1, text);
            pwm[ch]--;
            if(pwm[ch]<=1)
            {
            pwm[ch] = 1;
            }
            Delay_ms(100);
            }
            }
            Delay_ms(5);
            }
            i = 0;
            }
            }
            }

            void Timer2COMPAOverflow() org IVT_ADDR_TIMER2_COMPA
            {
            //PWM CH1--------------------------------------------------------------
            if(pwmup[1] < pwm[1] && pwmdown[1] == 1)
            {
            pwmup[1]++;
            PORTD.B0 = 1;
            }
            else if(pwmdown[1] < 101 - pwm[1] && pwmup[1] >= pwm[1])
            {
            pwmdown[1]++;
            PORTD.B0 = 0;
            }
            else
            {
            pwmup[1] = 1;
            pwmdown[1] = 1;
            }
            //PWM CH2--------------------------------------------------------------
            if(pwmup[2] < pwm[2] && pwmdown[2] == 1)
            {
            pwmup[2]++;
            PORTD.B1 = 1;
            }
            else if(pwmdown[2] < 101 - pwm[2] && pwmup[2] >= pwm[2])
            {
            pwmdown[2]++;
            PORTD.B1 = 0;
            }
            else
            {
            pwmup[2] = 1;
            pwmdown[2] = 1;
            }
            //PWM CH3--------------------------------------------------------------
            if(pwmup[3] < pwm[3] && pwmdown[3] == 1)
            {
            pwmup[3]++;
            PORTD.B2 = 1;
            }
            else if(pwmdown[3] < 101 - pwm[3] && pwmup[3] >= pwm[3])
            {
            pwmdown[3]++;
            PORTD.B2 = 0;
            }
            else
            {
            pwmup[3] = 1;
            pwmdown[3] = 1;
            }
            //PWM CH4--------------------------------------------------------------
            if(pwmup[4] < pwm[4] && pwmdown[4] == 1)
            {
            pwmup[4]++;
            PORTD.B3 = 1;
            }
            else if(pwmdown[4] < 101 - pwm[4] && pwmup[4] >= pwm[4])
            {
            pwmdown[4]++;
            PORTD.B3 = 0;
            }
            else
            {
            pwmup[4] = 1;
            pwmdown[4] = 1;
            }
            //PWM CH5--------------------------------------------------------------
            if(pwmup[5] < pwm[5] && pwmdown[5] == 1)
            {
            pwmup[5]++;
            PORTD.B4 = 1;
            }
            else if(pwmdown[5] < 101 - pwm[5] && pwmup[5] >= pwm[5])
            {
            pwmdown[5]++;
            PORTD.B4 = 0;
            }
            else
            {
            pwmup[5] = 1;
            pwmdown[5] = 1;
            }
            //PWM CH6--------------------------------------------------------------
            if(pwmup[6] < pwm[6] && pwmdown[6] == 1)
            {
            pwmup[6]++;
            PORTD.B5 = 1;
            }
            else if(pwmdown[6] < 101 - pwm[6] && pwmup[6] >= pwm[6])
            {
            pwmdown[6]++;
            PORTD.B5 = 0;
            }
            else
            {
            pwmup[6] = 1;
            pwmdown[6] = 1;
            }
            //PWM CH7--------------------------------------------------------------
            if(pwmup[7] < pwm[7] && pwmdown[7] == 1)
            {
            pwmup[7]++;
            PORTD.B6 = 1;
            }
            else if(pwmdown[7] < 101 - pwm[7] && pwmup[7] >= pwm[7])
            {
            pwmdown[7]++;
            PORTD.B6 = 0;
            }
            else
            {
            pwmup[7] = 1;
            pwmdown[7] = 1;
            }
            //PWM CH8--------------------------------------------------------------
            if(pwmup[8] < pwm[8] && pwmdown[8] == 1)
            {
            pwmup[8]++;
            PORTD.B7 = 1;
            }
            else if(pwmdown[8] < 101 - pwm[8] && pwmup[8] >= pwm[8])
            {
            pwmdown[8]++;
            PORTD.B7 = 0;
            }
            else
            {
            pwmup[8] = 1;
            pwmdown[8] = 1;
            }
            }

            Comment


            • #7
              เมพขิงๆ

              Comment


              • #8
                อยากทำได้บ้าง แต่ทำไม่เปน

                Comment


                • #9
                  รอรอ

                  Comment


                  • #10
                    รูปวงจรมาแล้วครับ ชุดเฟตผมใส่ไปแค่ชุดเดียวนะครับตอนทำจริงๆต้องทำทั้งหมด8ชุดโดยต่อเข้ากับขา PD0-PD7 ตามลำดับ ตอนอัดโปแกรมให้เซ็ต fuse bit High=0xDF Low=0xE2 ส่วน LCD ใช้ขนาด 8x2 ครับ

                    Comment


                    • #11
                      แหล่มเลย

                      Comment


                      • #12
                        ทำให้อันดิ


                        ถ่าหน่อย ตัวไอซีหายากไหมอะ

                        Comment


                        • #13
                          ถ้าต่อพัดลมตัวที่ 2-8 ทำวงจรในกรอบสีแดงเพิ่มแล้วมาต้อในกรอบสีเขียวใช่ไหมครับ

                          Comment


                          • #14
                            Originally posted by mookDANG2008 View Post
                            ทำให้อันดิ


                            ถ่าหน่อย ตัวไอซีหายากไหมอะ
                            หาได้ตามร้านใหญ่ๆทั่วไปชัวร์ๆเลยก็ อีเลคทรอนิคส์ ตอนซื้อมาตัวละ40฿แต่ตอนรู้สึกว่าจะตัว60฿แล้วมั้ง
                            ซื้อมาแล้วใช่ว่ามันจะใช้ได้เลยนะต้องอัดโปแกรมเข้าไปก่อนมันถึงจะทำงานตามที่เราต้องการ

                            ถ้าต่อพัดลมตัวที่ 2-8 ทำวงจรในกรอบสีแดงเพิ่มแล้วมาต้อในกรอบสีเขียวใช่ไหมครับ
                            ถูก

                            Comment


                            • #15
                              Originally posted by YuE View Post
                              หาได้ตามร้านใหญ่ๆทั่วไปชัวร์ๆเลยก็ อีเลคทรอนิคส์ ตอนซื้อมาตัวละ40฿แต่ตอนรู้สึกว่าจะตัว60฿แล้วมั้ง
                              ซื้อมาแล้วใช่ว่ามันจะใช้ได้เลยนะต้องอัดโปแกรมเข้าไปก่อนมันถึงจะทำงานตามที่เราต้องการ
                              อัดโปรแกรมยังไงหว่า อิอิ สอนผมหน่อย (มือใหม่ครับ)

                              Comment

                              Working...
                              X