Maskinnära programmering 6B2266
Maskinnära programmering 6B2266
Maskinnära programmering 6B2266
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