Chế quạt động cơ không chổi than 10W

Chế quạt động cơ không chổi than 10W

 


Arduino cho ATTiny13: https://github.com/sleemanj/optiboot/blob/master/dists/README.mdKhác với Chế quạt động cơ không chổi than 12V Wifi, hôm nay mình làm hướng dẫn đơn giản để chuyển đổi từ quạt thông thường sang quạt không chổi than với ATTiny13




CHUẨN BỊ

VIDEO HƯỚNG DẪN

SƠ ĐỒ NỐI DÂY

Thứ tự chân của động cơ như trong ảnh



Thứ tự các chân của ATTiny13 (anh em mở ảnh trong tab mới cho rõ nhé)

Động cơATTiny137805Chú thích
1XINCấp nguồn chính 12V
2GNDGNDCấp mát
3XXChân phanh động cơ (không dùng)
4PB0XChân cấp xung PWM
5XXChân đảo chiều động cơ (không dùng)
6VCCOUTNguồn 5V giảm áp bằng 7805
7XXKhông dùng
8XXKhông dùng
XPB1XNối ra GND chạy số 1
XPB2XNối ra GND chạy số 2
XPB3XNối ra GND chạy số 3

HƯỚNG DẪN FLASH ATTINY13

Bài viết: Hướng dẫn nạp code cho ATTiny13

SOURCE CODE CHO ATTINY13

/* ---------------------------------------------------------------------
   PWM FAN speed control for ATtiny13.
   Datasheet for ATtiny13: http://www.atmel.com/images/doc2535.pdf

   Pin configuration -
   PB1/OC0B: LED output (Pin 6)


   Find out more: https://hs2t.com
   -------------------------------------------------------------------*/

// 9.6 MHz, built in resonator
#define F_CPU 9600000

#include <avr/io.h>

void pwm_setup (void)
{
  // Set Timer 0 prescaler to clock.
  // See ATtiny13 datasheet, Table 11.9.
  TCCR0B |= (1 << CS00);

  // Set to 'Fast PWM' mode
  TCCR0A |= (1 << WGM01) | (1 << WGM00);

  // Clear OC0A output on compare match, upwards counting.
  TCCR0A |= (1 << COM0A1) | (1 << COM0A0);
}

void pwm_write (int val) {
  OCR0A = val;
}

int main (void)
{
  DDRB |= (1 << DDB0);
  PORTB |= (1 << PORTB1) | (1 << PORTB2) | (1 << PORTB3);
  pwm_setup();
  while (1) {
    if (((PINB >> PINB1) & 1) == 0) {
      TCCR0A &= 0x3F;
      PORTB &= 0xFE;
    } else if (((PINB >> PINB2) & 1) == 0) {
      TCCR0A |= (1 << COM0A1) | (1 << COM0A0);
      pwm_write(170);
    } else if (((PINB >> PINB3) & 1) == 0) {
      TCCR0A |= (1 << COM0A1) | (1 << COM0A0);
      pwm_write(86);
    } else {
      TCCR0A &= 0x3F;
      PORTB |= (1 << PORTB0);
    }
  }
}

Function pwm_write (int val) dùng để thay đổi độ rộng xung PWM, các bạn thay đổi trong khoảng 5~250 nhé. Không nên để giá trị 0 hoặc 254 khi đó timer/counter có thể hoạt động không tốt.

Bạn có thể thích những bài đăng này