PWM problema

T

Tom2

Guest
i naudoti analoginius įėjimo į pic ir i kurti pwm.When ir pakeisti amplitute apie pirkimo i wanna change muito ciklo metu pwm.This nėra happen.Is anyone know why.I naudoti Pic16F777 ir pcm CCS kompiliatorių.Mano kodas:

#
include <16F777.h>
# prietaisas ADC = 16
# saugikliai XT NOWDT, NOPROTECT
# naudoti vėlavimą (laikrodis = 4000000)
/ / ilgai duty_cycle, laikotarpį;void main ()
(
ilgai adc_result;

setup_adc_ports (ALL_ANALOG);
setup_adc (ADC_CLOCK_DIV_16);
setup_ccp1 (CCP_PWM);
setup_timer_2 (T2_DIV_BY_1, 255, 1);
KARTU (1)
(
set_adc_channel (0);
delay_ms (1);
adc_result = read_adc ();
adc_result>> = 6;
set_pwm1_duty (adc_result);

)
)

 
Labas!
Kodėl ir tai daryti

adc_result>> = 6;

Kadangi, jei rezultatas yra pasakyti 1023 (3FF, kiek įmanoma), tai po šios operacijos taps 15 (0x0f).Dabar CCSC kai gimęs priėmimo projekto ir pasirinkite ypač nustatyti PWM tai rodo daug darbo ciklą, kuris gali būti naudojamas.Jūs turite siųsti tik tuos ADC rezultatus į set_pwm1_duty (), kuris priklauso tame areale.

Ką supratau iš gimęs parametrai yra tai, kad jūs generuoti PWM su dažnio 3.906Khz su ciklo programuojamosios 0-1024.
taip ir donot daryti bet teisę perkelia į ADC rezultatas.Tiesiog gauti resut ir įdėkite jį į set_pwm1_duty (); funkcija ir ji darbo.
Tačiau geriau, kad pirmas tiesiog pažymėkite gimęs pwm funkcija vykdydama šį kodą į kilpą, o vietoj ADC kodas.

set_pwm1_duty (512); / / 50%
darbo ciklą
DELAY_MS (5000) / / patikrina muitą dviračių, kurių taikymo sritis
set_pwm1_duty (768); / / 75%
darbo ciklą
DELAY_MS (5000) / / patikrina muitą dviračių, kurių taikymo sritis

po šio bandymo yra ok, tada naudokite ADC pagrįstas pwm kodą bet prisimena ne teisę perkelti adc_result.

hope this helps.
Linkėjimai.

 
Dar daugiau po imstruction
adc_result = read_adc (); ir įdėti instrukcijos
output_high (PIN_B0), ir matau, kad kažkas vyksta neteisingai, jei i skaityti rezultatus konverterį.o (1) (
set_adc_channel (0);
delay_us (1);

adc_result = read_adc ();

output_high (PIN_B0);
....}

 
Labas!
Aš stengsiuosi rašyti kodą u.Tuo ir išbandyti šį kodo fragmentą

set_adc_channel (0);
o (1) (
delay_ms (10);

adc_result = read_adc ();

output_high (PIN_B0);
....}

Vėlavimas labai kritiškai.

Donot rozpacz kaip vienas mokosi tik per savo klaidų.

Linkėjimai.

 

Welcome to EDABoard.com

Sponsor

Back
Top