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Ị
- Động cơ (khác với động cơ trước, động cơ này điều khiển bằng xung PWM): https://link.hs2t.com/sE9iyeqEVTpbeJ648 (Động cơ này mình cũng sử dụng trong bài viết Chế quạt động cơ không chổi than dưới 100K)
- ATTiny13
- 7805
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ơ | ATTiny13 | 7805 | Chú thích |
---|---|---|---|
1 | X | IN | Cấp nguồn chính 12V |
2 | GND | GND | Cấp mát |
3 | X | X | Chân phanh động cơ (không dùng) |
4 | PB0 | X | Chân cấp xung PWM |
5 | X | X | Chân đảo chiều động cơ (không dùng) |
6 | VCC | OUT | Nguồn 5V giảm áp bằng 7805 |
7 | X | X | Không dùng |
8 | X | X | Không dùng |
X | PB1 | X | Nối ra GND chạy số 1 |
X | PB2 | X | Nối ra GND chạy số 2 |
X | PB3 | X | Nố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.
Đăng nhận xét