![]() |
đo nhiệt độ điều khiển động cơ
e mới học PIC và đang làm đồ án đề tà:"đo hiển thị nhiệt độ và điều khiển tốc độ quạt làm mát DC dùng thuật toán fuzzy nhưng có gặp 1 số khó khăn sau xin các a giúp đỡ:
e đã làm và hiển thị dc nhiệt độ trên led7seg và LCD,về thuật toán fuzzy thì ok!nhưng khi đưa chế độ PWM vào thì mạch lại không thể chạy dc(e đã mô phỏng trên protues). xin các a chỉ giáo cho! |
bạn gữi sơ đồ nguyên lý lên cho mọi người rõ hơn chút xiu đi
|
Trích:
|
đây là code của chương trình!
code[ // Mo ta phan cung : Dung PIC16F877A - thach anh 20MHz // : Led7seg giao tiep voi PORTD // : Dau ra LM335 dua vao chan AN0 //---------------------------------------------------------------- // Chu thich : // : dung che do Power On Reset // : chuong trinh tham khao cua anh linhnc308 //================================================= ======= #include <16F877A.h> #include <def_877a.h> #device *=16 adc=10 #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT #use delay(clock=20000000) #define speak PIN_A1 #use fast_io(d) #byte portd=0x8 int8 low,high,min,max,i,j,low1,high1; int1 do_F; void convert_bcd(int8 x); const char led7seg[12]={0xC0,0xcf,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x9 0,0x8e,0xc6}; const char quet[3]={0b00100000,0b01000000,0xb10000000}; #INT_EXT void test() { if (do_F == 1) do_F=0; else do_F=1; } //----------------------------------------------------------------- void main() { float value; min =15; //nhiet do min max =35; //nhiet do max do_F =0 ; i = 10 ; set_tris_d(0); trisa = 0xFF; trisb = 0x01; trisc=0x00; portd=0xff; output_low(speak); //==== Khoi tao cho ngat ngoai============================================= == enable_interrupts (INT_EXT); ext_int_edge(H_TO_L); enable_interrupts (GLOBAL); //=========== Khoi tao che do cho bo ADC===================================== setup_adc_ports(AN0); setup_adc(ADC_CLOCK_INTERNAL); delay_us(10);// Lay mau nhiet do lan dau tien value=(float)read_adc(); value = (value - 558.5)/2.048; // For 5V supply // value = (value - 754.8)/2.048; // For 3.7V Supply // value = (value - 698.2)/2.048; // For 4V supply convert_bcd((int8)value); // Tach so tram, chuc, donvi de hien thi len LED 7 delay_ms(500); while(1) { if (i==10) { value = read_adc(); value=(value-558.5)/2.048; if (do_F==1) value=1.8*value+32; convert_bcd((int8)value); if (do_F==0) { for(j=0;j<25;j++); { PORTD=led7seg[high1]; portc=quet[0]; delay_us(100); portd=0xff; delay_us(30); Portd=led7seg[low1]; portc=quet[1]; delay_us(100); portd=0xff; delay_us(30); portd=led7seg[11]; portc=quet[2]; delay_us(100); portd=0xff; delay_us(30); } } if (do_F==1) { for(j=0;j<25;j++); { PORTD=led7seg[high1]; portc=quet[0]; delay_us(100); portd=0xff; delay_us(30); Portd=led7seg[low1]; portc=quet[1]; delay_us(100); portd=0xff; delay_us(30); portd=led7seg[10]; portc=quet[2]; delay_us(100); portd=0xff; delay_us(30); } } i=0; } if( ( (int8)value > max ) || ( (int8)value < min) ) { output_high(speak); } i++; } } //The End=============================================== ======================== void convert_bcd(int8 x) { low1=x%10; //chia lay phan du, so hang don vi high1=x/10; //tach hang tram va hang chuc low = low + 0x30; high = high + 0x30; } ] |
khi m đưa chế độ PWM vào CC1 thì nó hông chạy!
bạn nào có code do nhiệt độ khác chuẩn hơn không!mong các bạn giúp đỡ! |
1 Attachment(s)
đây là sơ đồ của mình
|
cảm ơn anh em nhiều
|
Lâu không vao threat nay nhi. Vấn đề về đo 2 cảm biến nhiệt độ và điều chỉnh tốc độ quạt điều hòa or. Điều chỉnh nhiệt độ bình nước theo thuật toán fuzzy đã được minh làm thanh công.
Nếu ai cần nghiên cứu tiếp thì gửi mail co mình dinhnambkhn@gmail.com .đang thất nghiệp nên free time,sẽ giúp a e hết mình.hj! Ai đang ở Vinh or Hà Tĩnh thì a e trao đổi trực tiếp.hj Thân! |
Ah!code đã hoàn thiện và thuật toán đươc cải tiến hơn nhiều!
Thân |
Ah!code đã hoàn thiện và thuật toán đươc cải tiến hơn nhiều!
Thân |
Múi giờ GMT. Hiện tại là 02:37 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam