Hướng dẫn bài 7 timer1 với pwm

mta_cdt

Super Moderator
Thành viên BQT
#1
Trong các ứng dụng vi điều khiển thì pwm được sử dụng rộng rãi như điều khiển động cơ dc, RCservo. Avr cũng như các vi điều khiển khác được trang bị sẵn 4 kênh pwm trong đó có 2 kênh tối đa 16 bit và khá mềm dẻo. Trong phần này mình giới thiệu về ứng dụng timer 1 để điều chế 2 kênh pwm này.
2014-01-02_120539.png

Chương trình chạy thử, file mô phỏng tải ở file đính kèm.
 

Đính kèm

mta_cdt

Super Moderator
Thành viên BQT
#2
Đối với avr studio chúng ta làm lần lượt như sau.
- Thiết lập chân tạo xung là đầu ra
- thiết tập tần số chia bằng cách sét 3 bit cs12, cs11, cs10.
- thiết lập mode giao tiếp. bằng các bit WGM13,WGM12,WGM11,WGM10,
- thiết ngõ ra là xung đảo hay không đảo bằng cách cài đặt các bít
2014-01-02_102855.png

Mã:
#define F_CPU 8000000
#include <util/delay.h> // thu vien delay
#include <avr/io.h>  // thu vien io
#include <avr/interrupt.h> // thu vien ngat trong avr

int main(void)
{
PORTD=0x00;
DDRD=0xFF;
TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10);
// bo chia 1/64 mode 14 top=icr1, xung khong dao
ICR1=20000;
while(1)
{
OCR1A=4000;
OCR1B=10000;

}

}
kết quả
bo chia.png

 

Đính kèm

Sửa lần cuối:

NHATNGUYEN

Học sinh trung cấp
#3
Đối với avr studio chúng ta làm lần lượt như sau.
- Thiết lập chân tạo xung là đầu ra
- thiết tập tần số chia bằng cách sét 3 bit cs12, cs11, cs10.
- thiết lập mode giao tiếp. bằng các bit WGM13,WGM12,WGM11,WGM10,
- thiết ngõ ra là xung đảo hay không đảo bằng cách cài đặt các bít
Mã:
#define F_CPU 8000000
#include <util/delay.h> // thu vien delay
#include <avr/io.h>  // thu vien io
#include <avr/interrupt.h> // thu vien ngat trong avr

int main(void)
{
PORTD=0x00;
DDRD=0xFF;
TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10);
// bo chia 1/64 mode 14 top=icr1, xung khong dao
ICR1=20000;
while(1)
{
OCR1A=4000;
OCR1B=10000;

}

}
kết quả
a cho e hỏi a có viết pwm về điều khiển nhiệt độ mong muốn k a
 

hung95

Học sinh phổ thông
#4
Đối với avr studio chúng ta làm lần lượt như sau.
- Thiết lập chân tạo xung là đầu ra
- thiết tập tần số chia bằng cách sét 3 bit cs12, cs11, cs10.
- thiết lập mode giao tiếp. bằng các bit WGM13,WGM12,WGM11,WGM10,
- thiết ngõ ra là xung đảo hay không đảo bằng cách cài đặt các bít
cho mình hỏi.
mình xuất xung ra 2 chân OC1A, OC1B, sao khoảng 500 xung thì chân OC1A tắt không xuất xung nữa, chân B vẫn tiếp tục
mình thử set OCR1A=ICR1 nhưng khi đủ xung thì nó kéo lên mức 1.
còn set CS về 0 0 0 thì tắt lun 2 chân
 

vdungdt

Học sinh phổ thông
#5
luồng này còn ai tham gia không vậy, mình cũng đang gặp vấn đề về PWM,
cho mình hỏi là làm sao tự động tăng hoặc giảm xung PWM theo 1 biến nào đó
VD như 1 con cảm biến nhiệt gán cho nó 1 biến khi đo được giá trị của nó, còn xung PWM thì điều khiển 1 sợi đốt nóng chẳng hạn, mình mới tìm hiểu à, mong mọi người chỉ giúp với
 

mta_cdt

Super Moderator
Thành viên BQT
#6
luồng này còn ai tham gia không vậy, mình cũng đang gặp vấn đề về PWM,
cho mình hỏi là làm sao tự động tăng hoặc giảm xung PWM theo 1 biến nào đó
VD như 1 con cảm biến nhiệt gán cho nó 1 biến khi đo được giá trị của nó, còn xung PWM thì điều khiển 1 sợi đốt nóng chẳng hạn, mình mới tìm hiểu à, mong mọi người chỉ giúp với
bạn chỉ cần gán giá trị cho OCR là được mà. Sau khi tính toán xong bạn gán giá trị sau khi tính toán cho OCR là ok mà.
 

Quảng cáo Google