Ðăng Nhập

View Full Version : dùng Pic18f4520 để kích scr


nuacuatoi2010
14-12-2008, 06:39 PM
mình đang dùng pic18f4520 để kích scr.bây giờ đang bí ở viết chương trình để nạp cho pic
cụ thể mình muốn như sau:
- khi có ngắt ngoài(ngắt cạnh lên"cái này dùng để xác định đầu mỗi chu kì điện áp")thì khời tạo Timer0 với 1 thời gian bất kì tuy thuộc vào điện áp đọc qua bộ ADC là bao nhiêu
-sau 1 khoảng thời gian timer0 ngắt thì xuất ra chân DO một xung để kích scr(xung này có bề rộng khoảng 10us"chủ yếu là tạo ra 1 cái gai để kích scr") đồng thời khởi tạo Timer1 (sau 10ms)thì kích tiếp một xung nữa ở chân D1

mong các bạn góp ý giùm mình.
dưới đây là sơ đồ nguyên lý.

namqn
14-12-2008, 06:53 PM
mình đang dùng pic18f4520 để kích scr.bây giờ đang bí ở viết chương trình để nạp cho pic
cụ thể mình muốn như sau:
- khi có ngắt ngoài(ngắt cạnh lên"cái này dùng để xác định đầu mỗi chu kì điện áp")thì khời tạo Timer0 với 1 thời gian bất kì tuy thuộc vào điện áp đọc qua bộ ADC là bao nhiêu
-sau 1 khoảng thời gian timer0 ngắt thì xuất ra chân DO một xung để kích scr(xung này có bề rộng khoảng 10us"chủ yếu là tạo ra 1 cái gai để kích scr") đồng thời khởi tạo Timer1 (sau 10ms)thì kích tiếp một xung nữa ở chân D1

mong các bạn góp ý giùm mình.
dưới đây là sơ đồ nguyên lý.
Không rõ bạn nối gì vào J5. Mạch reset của PIC không nên dùng trở 10 k và tụ 10 uF.

Để đảm bảo việc kích SCR thành công thì người ta kích bằng một chuỗi xung, chứ ít khi kích bằng một xung đơn.

Thân,

nuacuatoi2010
14-12-2008, 07:59 PM
cám ơn bạn nhiều.nếu có thể bạn có thể gợi ý cho mình với.minh suy nghĩ hơn 1 tháng rùi nhưng vẫn viết ko dc

j5 mình nối nó với 1 biến áp để hạ điện áp 220VAC từ đầu cực máy phát xuống 3VAC qua lm324 để biến tín hiệu Sin thanh xung vuông.dùng tín hiệu này đề xác định đầu chu kì để kích SCR

nói như bạn rất đúng.kích scr phải kích bằng một chuỗi xung,nhưng vì viết thế minh ko viết dc nên giờ viết kích 1 chu kỳ trước đã.

a vậy nếu ko dùng điện trở 10K và tụ 10uf.thì dùng gì hả bạn.cái này tại mình làm theo con 89c51.mình cứ nghi là lam the thi no có thể reset,hay la phải làm theo datasheet :dùng 2 điện trở và 1 tu Pi (tụ thì trong datasheet ko nói rõ là tụ nhiêu Picofara )1 diode

namqn
15-12-2008, 12:03 AM
cám ơn bạn nhiều.nếu có thể bạn có thể gợi ý cho mình với.minh suy nghĩ hơn 1 tháng rùi nhưng vẫn viết ko dc

j5 mình nối nó với 1 biến áp để hạ điện áp 220VAC từ đầu cực máy phát xuống 3VAC qua lm324 để biến tín hiệu Sin thanh xung vuông.dùng tín hiệu này đề xác định đầu chu kì để kích SCR

nói như bạn rất đúng.kích scr phải kích bằng một chuỗi xung,nhưng vì viết thế minh ko viết dc nên giờ viết kích 1 chu kỳ trước đã.

a vậy nếu ko dùng điện trở 10K và tụ 10uf.thì dùng gì hả bạn.cái này tại mình làm theo con 89c51.mình cứ nghi là lam the thi no có thể reset,hay la phải làm theo datasheet :dùng 2 điện trở và 1 tu Pi (tụ thì trong datasheet ko nói rõ là tụ nhiêu Picofara )1 diode
Với mạch reset cho PIC18F, tôi thường dùng một điện trở 10 k đến 33 k nối giữa VDD và MCLR.

Để phát hiện cực tính điện áp (thực ra bạn đang dò điểm không-zero crossing point) thì nên dùng vi mạch so sánh. Dùng OP-AMP với tần số lưới cũng được, nhưng OP-AMP vốn không được thiết kế để hoạt động ở chế độ này.

Trước khi nói về code, bạn nên cho biết bạn dự định viết bằng hợp ngữ hay một ngôn ngữ cấp cao nào đó (Basic, Pascal, C, ...). Tốt hơn nữa thì bạn cho biết trình biên dịch bạn đang/dự định sử dụng.

Thân,

nuacuatoi2010
15-12-2008, 12:07 AM
mình viết bằng ccs.
mình dùng opamp tai vì thầy hướng dẫn bảo mình dùng con đó.
mình cũng thử mô phỏng Protues rui.lm324 co tao ra xung vuong. và minh cũng thử viết 1 ngắt ngoài(ngắt cạnh lên) để kiểm tra trên mạch thực tế và thấy nó cũng hoạt động

- à minh hỏi cái này nữa:trong mạch của mình sau cầu Chỉnh lưu dùng tụ 1uF thì có được không.tại mình nghĩ dùng tụ 1uF thì nó lọc áp chưa phẳng nên khi qua lm324 sau đó vào AN0 và AN1 thì ADC của pic nó đọc kô chính xác.

mình đã thử viết một chương trình để đọc ADC:

bạn thử kiểm tra giùm xem code nó đúng không nhé:

#include <18f4520.h>
#DEVICE ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, STOP=1)
int16 ap=0,dong=0;

void main()
{
setup_ADC(All_Analog);
setup_ADC(ADC_CLOCK_INTERNAL);
while(1)
{
set_adc_channel(0);
delay_us(10);
ap=read_adc();
set_adc_channel(1);
delay_us(10);
dong=read_adc();
printf("%lu %lu \n\r",ap,dong);
}
}