nemoj me pogresno svatiti, ja rekoh da sam video da ljudi kontrolisu bez feedback-a, ne da je to dobro resenje :)
da bi mogao da odrzis brzinu obrtaja, potrebno je da koristis taj feedback, ima i fora da zakacis i accelerometar pa ako uredjaj krene da "skakuce" (posebno ves masina) da usporis po potrebi ...
Citat:
znači da neko ili nešto treba tom trijaku da "podeblja protok"
"podebljas" protok tako sto povecas duty cycle, "potanjis" protok tako sto smanjis duty cycle.
primer (sa linka za picbasic software pwm iz jednog od mojih prethodnih postova samo izmenjen - onaj primer sa linka radi tacno ono sto ti treba, cita ulaz sa ADC-a i menja pwn duty cycle u skladu sa tim):
Code:
dutyCycle var byte ' OVDE CUVAS DUTY CYCLE
dutyCycle = 0 ' POCNI SA 0%
main:
' PWM the PORTD.2. The third parameter is the number of
' cycles to repeat the PWM. at 4MHz, 1 cycle = 5 ms.
pwm portd.2, dutyCycle, 100 'OVO ZOVE PICBASIC SOFTWARE PWM RUTINU
' NA SVAKIH 100 ciklusa (500ms) povecaj dutyCycle za 1 (jedan ciklus je 256 tikova)
dutyCycle = dutyCycle + 1
'DUTY CYCLE NE SME DA BUDE VECI OD 255, tako da ako smo stigli do 255, vrati na 0
If dutyCycle > 255 Then dutyCycle = 0
goto main
probaj ovo sa obicnom ledarom i bice ti jasnije kako sljaka, svakih 500ms ce "malo jace" svetleti i tako 255 koraka dok ne dodje do najsvetlijeg (127sec) i onda opet krece od nule ka najsvetlijem ....
dakle ovaj primer svakih pola sekunde poveca dutyCycle za 1 (od 0 do 255)
primer je u picbasic-u posto si rekao da njega imas ...
mozes i sam da generises pwm paljenjem i gasenjem pinova ... na primer (glup source ali mozda dobar da svatis sta se desava, ja ne znam basic tako da cu ga ocukati u c-u ali kapiram da ces svatiti poentu bez obzira na jezik)
Code:
TRISD = 0x0;
PORTD.F1 = 0;
// 50% duty cycle
// dakle, vreme koliko je port 1 je isto "10 taktova" koliko i vreme koliko je port 0 "10 taktova"
while(1){
PORTD.F1 = 1;
nop(); //1
nop(); //2
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop(); //10
PORTD.F1 = 0;
nop(); //1
nop(); //2
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop(); //10
}
// 25% duty cycle
// vreme za 1 je 5 taktova, vreme za 0 je 15 taktova
while(1){
PORTD.F1 = 1;
nop(); //1
nop(); //2
nop();
nop();
nop(); //5
PORTD.F1 = 0;
nop(); //1
nop(); //2
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop(); //10
nop();
nop();
nop();
nop();
nop(); //15
}
// 75% duty cycle
// vreme za 1 je 15 taktova, vreme za 0 je 5 taktova
while(1){
PORTD.F1 = 1;
nop(); //1
nop(); //2
nop();
nop();
nop();
nop();
nop();
nop();
nop();
nop(); //10
nop();
nop();
nop();
nop();
nop(); //15
PORTD.F1 = 0;
nop(); //1
nop(); //2
nop();
nop();
nop(); //5
}
ja ne umem jednostavnije da ti objasnim
generalno, uC-ovi su toliko jeftini danas da za 1-2 komada, uvek mozes da uzmes neki sa hardware pwm-om (cisto da se ne smaras sa tim ako nisi siguran u sebe), adc-om i nemas problem ... mada, ja ti iskreno preporucujem da sednes i isprobas sve ovo na nekom malom pic-u, znacice ti za kasnije