Mình đang làm đồ án về LM35...đề tài là sử dụng LM35 để điều khiển tốc độ quạt bằng PWM..
mình làm và viết code mô phỏng thì chạy nhưng làm mạch thực tế thì không chạy...các bạn giúp mình kiểm tra với....
ý tưởng của bài này là LM35 > ADC > PWM > FAN > xuất thêm ra LCD tốc độ quạt và nhiệt độ nữa....
Đây là toàn bộ những ji mình làm đk: http://www.mediafire.com/download/ap...k8rh/lm+35.rar
mình làm và viết code mô phỏng thì chạy nhưng làm mạch thực tế thì không chạy...các bạn giúp mình kiểm tra với....
ý tưởng của bài này là LM35 > ADC > PWM > FAN > xuất thêm ra LCD tốc độ quạt và nhiệt độ nữa....
#include "E:\Learning\Do An\oo\lm35.h"
#include "E:\Learning\Do An\oo\lcd_new.h"
#include "E:\Learning\Do An\oo\MH_16F877A.h"
#INT_EXT
float read,t = 0.0f;
int8 x,y,k;
void main(void)
{
set_tris_a(0xFF);
set_tris_d(0x00);
//khoi tao ngat ngoai
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);
enable_interrupts(GLOBAL);
//Khoi tao ADC
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(50);
// PWM dieu che xung
output_low(PIN_C1);
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);
while(TRUE)
{
lcd_init();
read=read_adc();
t=read*0.48828125; //adc 10 bit
//dien ap ra(mV) = nhietdo * 0.01
//5V dien ap = 1024 ADC
//(read ADC *5/1024) / 0.01 = nhietdo
printf(lcd_putc "Nhiet Do: %0.0f C\n",t);
delay_us(20);
x = ((read-21)*100)/102; // 123----100%
// 52----30%
//(52-k)--30% =>k =>start point=52-k
if (t<61)
if (t>25)
{
y=x*2.55;
}
else y=0;
if (t>60){y=255;}
k=y/2.55;
printf(lcd_putc "Toc Do: %u",k);
set_pwm1_duty(y);
};
}
#include "E:\Learning\Do An\oo\lcd_new.h"
#include "E:\Learning\Do An\oo\MH_16F877A.h"
#INT_EXT
float read,t = 0.0f;
int8 x,y,k;
void main(void)
{
set_tris_a(0xFF);
set_tris_d(0x00);
//khoi tao ngat ngoai
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);
enable_interrupts(GLOBAL);
//Khoi tao ADC
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
delay_ms(50);
// PWM dieu che xung
output_low(PIN_C1);
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 255, 1);
while(TRUE)
{
lcd_init();
read=read_adc();
t=read*0.48828125; //adc 10 bit
//dien ap ra(mV) = nhietdo * 0.01
//5V dien ap = 1024 ADC
//(read ADC *5/1024) / 0.01 = nhietdo
printf(lcd_putc "Nhiet Do: %0.0f C\n",t);
delay_us(20);
x = ((read-21)*100)/102; // 123----100%
// 52----30%
//(52-k)--30% =>k =>start point=52-k
if (t<61)
if (t>25)
{
y=x*2.55;
}
else y=0;
if (t>60){y=255;}
k=y/2.55;
printf(lcd_putc "Toc Do: %u",k);
set_pwm1_duty(y);
};
}
