Отговори на тема  [ 18 мнения ]  Отиди на страница Предишна  1, 2
Някои въпроси относно АЦП-то на PIC18f452 /мерене на честота 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Юли 22, 2006 9:50 pm
Мнения: 1638
Мнение 
Като толкова искаш да е аналогов сигнала си правиш:
1.Компаратор с хистерезис - за са може да формираш правоъгълен сигнал при преминаването през нулата.Най-подходящ е LM311.
2.От този компаратор си вземаш и сигнал за преобразувател честота/период в напрежение и така си измерваш честотата,т.е вече обърната в напрежение с друг канал на АЦП-то
3.Напрежението на мрежата си го измерваш през виокоомен делител


Пет Авг 24, 2007 9:48 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
Става само със семплиране на синусоидата и то доста прецизно - без фуриета и там бла-бла... Обаче само в диапазаон - а при теб е точно така
търса ПДФа - ако го намера ще ти го постна, иначе съм го намирал в гооглето


Пет Авг 24, 2007 10:13 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пет Юли 08, 2005 3:46 pm
Мнения: 112
Местоположение: Пловдив
Мнение 
Ето една подпрограма, която мери средната стоиност на мрежата и неговата честота, реализирана е с PIC18F2520,
написана на CCS PCWH.

int inv_mode, inv_mode_change, avg_counter, mppt_delta, v_out_delta, inv_on_off, mppt_blink;
int mppt_change, delta_change, avg_ok, positive, negative, up_start, down_start, freq_start, freq_stop;
int p_pv_mppt, v_pv_avg, i_pv_avg, v_ref_avg, v_ref_h, v_ref_l;
int v_avg_counter, i_avg_counter, v_out_avg_counter;
int v_grid_over_v_fault, v_grid_under_v_fault, grid_freq_fault, i_out_fault, i_in_fault, v_in_min_fault;
signed int delta_p_pv_mppt;
long v_grid_temp, i_out_temp, v_out_temp, v_pv_temp, i_pv_temp, v_ref_temp, grid_freq;
long charger_pwm, p_pv_old, green_led_blink;
const int write_command=0x11, shutdown_command=0x21, p_pv_delta=16, delta_min=32, delta_max=255, delta_v=16, delta_vout=32;
const int v_grid_max=180, v_grid_min=140, avg_count=32;
const int over_curr=145, short_curr=240, i_in_max=240, period_max=128;
const int v_in_max=200, v_in_max_stop=220, v_in_min=80, v_in_min_stop=60, v_out_ref=100, v_out_min=80, v_out_max=120;
const long grid_freq_max=26000, grid_freq_min=24000, green_led_blink_max=1024;


void grid_voltage_and_freq_detect(void)
{
int v_grid, v_grid_avg;
restart_wdt();
v_grid=adc_read(v_grid_ch);
if(v_grid>=v_ref_h) {
//v_grid -=v_ref_avg;
v_grid_temp +=v_grid;
positive++;
if(negative) {
negative=0;
up_start++;
//down_start=0;
}
}
else if(v_grid<=v_ref_l) {
v_grid=255-v_grid;
//v_grid=v_ref_avg-v_grid;
v_grid_temp +=v_grid;
negative++;
if(positive) {
positive=0;
//up_start=0;
down_start++;
}
}
if(up_start||down_start) {
if(!freq_start) {
set_timer1(0);
clear_interrupt(INT_TIMER1);
output_high(PIN_C6);
freq_start++;
}
else if(up_start==2||down_start==2) {
if(!freq_stop) {
grid_freq=get_timer1();
output_low(PIN_C6);
freq_stop++;
}
}
}
v_avg_counter++;
set_pwm1_duty(v_grid);
if(v_avg_counter>=period_max) {
v_grid_avg=v_grid_temp>>7;
v_grid_temp=0;
positive=0;
negative=0;
up_start=0;
down_start=0;
freq_start=0;
freq_stop=0;
output_low(PIN_C6);
//set_pwm1_duty(v_ref_avg);
//delay_ms(20);
//set_pwm1_duty(v_grid_avg);
//delay_ms(20);
//set_pwm1_duty(v_ref_avg);
//delay_ms(20);
//set_pwm1_duty(grid_freq>>6);
//delay_ms(20);
//set_pwm1_duty(v_ref_avg);
//delay_ms(20);
v_avg_counter=0;
if(v_grid_avg>v_grid_max) v_grid_over_v_fault++;
else {
if(v_grid_over_v_fault) v_grid_over_v_fault--;
else inv_state.over_v=0;
}
if(v_grid_over_v_fault>25) inv_state.over_v=1;
if(v_grid_avg<v_grid_min) v_grid_under_v_fault++;
else {
if(v_grid_under_v_fault) v_grid_under_v_fault--;
else inv_state.under_v=0;
}
if(v_grid_under_v_fault>25) inv_state.under_v=1;
if((grid_freq>grid_freq_max)||(grid_freq<grid_freq_min)) grid_freq_fault++;
else {
if(grid_freq_fault) grid_freq_fault--;
else inv_state.uneq_freq=0;
}
grid_freq=0;
if(grid_freq_fault>25) inv_state.uneq_freq=1;
if(inv_state.over_v||inv_state.under_v||inv_state.uneq_freq) inv_mode=1;
else inv_mode=0;
}
}


Чет Авг 30, 2007 11:34 pm
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 18 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни