chào cả nhà,mình đang viết code điều khiển 2 động cơ 1 chiều dùng phương pháp điều chế độ rộng xung,khi test với chíp atmega 8 thì chương trình có điều khiển được,chuyển sang atmega32 thì không còn ổn nữa,mình đã tách hai chương trình tạo ngắt ngoài và tạo PWM thì hai chương trình đều chạy ổn,khi ghép lại thì PWM vẫn hoạt động,ngắt ngoài hầu như không có tác dụng.nhà mình ai biết giúp mình với.
Thông báo
Collapse
No announcement yet.
PWM với ATMEGA32A
Collapse
X
-
đây là code:
/************************************************** ***
Chip type : ATmega32
Program type : Application
AVR Core Clock frequency: 12.001000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
************************************************** ***/
#include <mega32.h>
unsigned char val=0;
/* ham phuc vu ngat ngoai 0 INT0 */
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(val==0)
{
OCR1A=18000;/*4650*/
val=1;
//PORTD.5^=1;/*test ngat ngoai*/
}
else
{
//PORTD.5=1;
OCR1A=10000;/*2710H*/
};
}
/* ham phuc vu ngat ngoai 1 INT1*/
interrupt [EXT_INT1] void ext_int1_isr(void)
{
if(val==1)
{
// PORTD.4^=1; /* TEST ngat mgoai */
OCR1B=15000;/* 3A98H*/
val=0;
}
else
{
//PORTD.4=1;
OCR1B=8000;/*1F40h*/
};
}
void main(void)
{
PORTD=0x0C;
DDRD=0x30;
/* ham khoi tao pwm che do 14 fast pwm */
TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10);/* do chia la 1 clock cua bo dao dong*/
ICR1H =0x4E;
ICR1L=0x20;
TIMSK=(1<<OCIE1A)|(1<<OCIE1B);
/* ham khoi tao ngat toan cuc */
GICR|=0xC0;
MCUCR=0x0F; /* ngat timer0 va timer 1 deu la ngat canh len */
MCUCSR=0x00;
GIFR=0xC0;
#asm("sei")
while (1)
{
};
}
-
mọi người gợi ý cho mình vài hướng điều chế pwm với mình đang bí trong việc thoát khỏi pwm. đây là code test 2 động cơ dựa trên phương pháp điều chế độ rộng xung:
/*
* test2_motor.c
*
* Created: 10/15/2012 9:55:42 PM
* Author: dtcn_112
*/
#include <avr/io.h>
#include <avr/delay.h>
#include <math.h>
/****** dung chay robot*/
void stop_motor()
{
duty_cycle(0,0);
_delay_ms(10);
}
/************ khoi tao pwm tren chan PD4,PD5********/
void init_pwm(void)
{
TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);/*che do 14 fast pwm*/
TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10);
ICR1=255;
TIMSK=(1<<OCIE1A);
}
/**** ham cap phat do rong xung dieu khien toc do dong co****/
void duty_cycle(uint8_t a,uint8_t b)
{
OCR1A=a;
OCR1B=b;
}
/**** bat dau chay hai banh******/
void run_motor()
{
duty_cycle(250,250);
_delay_ms(1);
}
/*********** cho robot re trai*******/
void shift_left_motor()
{
duty_cycle(100,50);
_delay_ms(2);
}
/**** cho robot chay re phai****/
void shift_right_motor()
{
duty_cycle(50,100);
_delay_ms(2);
}
int main(void)
{ DDRC=0xF0;/* 4 nut start,stop,right,left cho dong co */
PORTC=0x0F;
DDRD|=_BV(PD5)|_BV(PD4);
PORTD=0x00;
init_pwm();
while(1)
{
key_pad();
}
}
void key_pad()
{
if(bit_is_clear(PINA,0))
run_motor();
else
if(bit_is_clear(PINA,1))
stop_motor();
else
if(bit_is_clear(PINA,2))
shift_left_motor();/* re trai*/
else
if(bit_is_clear(PINA,3))
shift_right_motor();/**re sang phai**/
}
Comment
Bài viết mới nhất
Collapse
-
bởi mèomướpDạ chú rủ cô ấy đi ăn uống, cà phê, xem phim...nhớ nắm tay, rồi thì ôm hôn,...trong vòng 1 tuần mà ko nắm tay được, 1 tháng mà ko ôm đc thì dẹp ngay và luôn ạ. Nhắn tin, gọi điện ít thôi ạ, trả lời quá lâu hoặc ko trả lời cũng dẹp ngay ạ. Nên thể hiện chú là người có điều kiện nữa ạ...
-
Channel: Tâm tình dân kỹ thuật
08-02-2026, 18:50 -
-
bởi songchodep76Cảm ơn bác đã nhiệt thành chia sẻ kinh nghiệm bản thân mình cho mọi người.
Tuy nhiên, theo tiếp xúc hạn hẹp của em với mosfet thì vấn đề bác đo vôn ở cực D và thấy đỉnh nó 70V/55V Vds max, như thí nghiệm và trong hình của bác...-
Channel: Hướng dẫn sử dụng diễn đàn
07-02-2026, 09:46 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Cho tới thời điểm này, quả thật Đình Thường đây quá thất vọng, không hào hứng với Suno-AI lắm bởi ra lệnh Creat mấy chục lần với các thay đổi thì mới chọn được 2 bản hát đúng giai điệu tầm 80% để cắt ghép tạo thành bài hát...
-
Channel: Tâm tình dân kỹ thuật
06-02-2026, 17:01 -
-
Trả lời cho Yêu thơ mê nhạc, mời các bác vào đây!bởi dinhthuong92Kính chào cả nhà, nhân dịp Tết đang về, sắp 23 tháng chạp rồi, xin gởi lời chúc xuân qua bài hát sau ạ:
Bao nhiêu hân hoan
Chúc Mừng Năm Mới, xuân sang!
Nơi nơi hát vang
nâng chén vui chúc câu An Lành.
Vạn Sự đều Hanh Thông,
Rạng...-
Channel: Tâm tình dân kỹ thuật
06-02-2026, 16:46 -
-
bởi ittcChán quá các bác, em nhạt nhẽo quá nên tán em nào cũng tạch, tuyệt vọng vô cùng, nay lại được mấy anh đồng nghiệp cty đối tác mách cho em gái kia sinh năm 2K đầu, em chả biết nhóm đối tượng này phải tán ra sao bây giờ ?
Tính ra em...-
Channel: Tâm tình dân kỹ thuật
06-02-2026, 00:18 -
-
bởi bqvietCó thể, ví dụ phần phản hồi gồm vi mạch cách ly quang, zener thứ cấp, transistor và điện trở phản hồi dòng ... Bất kỳ linh kiện nào nhóm đó hỏng dẫn tới mất đường phản hồi. TNY chính hãng phát hiện được chuyện đó nhưng linh kiện...
-
Channel: Điện tử công suất
05-02-2026, 18:36 -
-
bởi Nexus 6Pcho e hỏi, khi mạch có linh kiện nào đó hư thì có làm hỏng led đắt tiền (osram) không?
-
Channel: Điện tử công suất
05-02-2026, 10:42 -
-
bởi chinhnguyen9· Thí nghiệm 1 (Mạch boost, Vcc=12V, kích bằng dao động PƯM, duty 10%):
* Không có snubber + không tải: Xuất hiện hiện tượng dao động tắt dần tại cực D Mosfet (ringing). Hình 1 cho thấy trong chu kỳ đầu, điện áp spike lên tới hàng trăm V, điện...-
Channel: Hướng dẫn sử dụng diễn đàn
04-02-2026, 09:16 -
-
bởi Nexus 6Pe dùng KiCad 9.0 và đã xuất được file PDF mạch in gòi bác...
-
Channel: Điện tử công suất
03-02-2026, 16:25 -
-
bởi bqvietBấm chuột vào các tệp sẽ bật ra chương trình tương ứng. Nên dùng bản KiCAD sau
https://kicad-downloads.s3.cern.ch/a...ll_version.exe-
Channel: Điện tử công suất
03-02-2026, 14:57 -

Comment