21.12.2013 Views

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Programuppgift med PIC16F628<br />

Varvtalsratt till<br />

LEGO-motorn,<br />

medurs/moturs<br />

rotation<br />

Pulsgivare och PWM<br />

Uppgiften är nu att med pulsgivarens ratt styra motorns varvtal i två rotationsriktningar.<br />

När ratten vrids åt ena hållet ska hastigheten öka, om den vrids tillbaka åt andra hållet<br />

ska den minska tills den blir ”0”. Fortsätter man nu vridningen ska motorn byta<br />

rotationsriktning och ratten ska styra hastigheten i den andra riktningen!<br />

Byte av rotationsriktning<br />

Byte av rotationsriktning kan ske genom att man ändrar spänningen vid motorns<br />

jordpunkt från ”0” till ”1”. Om jordspänningen är ”0” ger PWM-signalen en proportionell<br />

hastighet i ena rotationsriktningen. Om jordspänningen är ”1” ger PWMsignalen<br />

en omvänt proportionellt varvtal i den motsatta rotationsriktningen, här bör<br />

man således programmera DutyCycle’s inverterade värde ( se figur )!<br />

Detta låter komplicerat, men det är faktiskt enklare än det ser ut eftersom det stämmer<br />

överens med hur datorer lagrar tal med tecken.<br />

Om variabeln count inte är teckenlös (char) utan i stället deklareras som ett tal<br />

med tecken ( int count; ) har den talområdet –128 < 0 < +127. Max- och mingränserna<br />

i programmet måste då omdefinieras:<br />

if( (trans == 0b00.01) && (count != 127) ) count ++;<br />

if( (trans == 0b01.00) && (count != -128) ) count --;<br />

42

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!