Post on 21-Dec-2015
transcript
Taking timing further
Chapter Nine9.1 – 9.8
Dr. Gheith Abandah 1
Outline
• Timer 1• Timer 2• Capture/Compare/PWM• Pulse Width Modulation (PWM)• Digital to Analog Conversion (DAC)• Summary
Dr. Gheith Abandah 2
Timing Issues
• Maintaining continuous counting functions• Recording (‘capturing’) in timer hardware the
time an event occurs• Triggering events at particular times• Generating repetitive time-based events• Measuring frequency, e.g., motor speed
Dr. Gheith Abandah 3
The PIC 16 Series
Device Pins Features
16F84A 18 1 8-bit timer1 5-bit port1 8-bit port
16F873A16F876A
28 3 parallel ports,3 counter/timers,2 capture/compare/PWM,2 serial, 5 10-bit ADC, 2 comparators
16F874A16F877A
40 5 parallel ports,3 counter/timers,2 capture/compare/PWM,2 serial, 8 10-bit ADC, 2 comparators
Dr. Gheith Abandah 4
PIC 16F84A Timer 0 Module
Dr. Gheith Abandah 5
PIC 16F84A Timer 0 Module
Dr. Gheith Abandah 6
Option Register
• T0CS: Clock source select• T0SE: Source edge select• PSA: Prescaler assignment bit• PS2:PS0: Prescaler rate select
Dr. Gheith Abandah 7
PIC 16F87XA Timer 1 Module
Dr. Gheith Abandah 8
Timer 1 Registers16-bit register:•TMR1L (0Eh)•TMR1H (0Fh)
Control Register: •T1CON (10h)
Dr. Gheith Abandah 9
Timer 1 control register
• T1CKPS1:T1CKPS0: Input Clock Prescale Select, 1:1-1:8
• T1OSCEN: Oscillator Enable Control• T1SYNC’: External Clock Input Synchronization
Control• TMR1CS: Clock Source Select• TMR1ON: Timer1 On
Dr. Gheith Abandah 10
Derbot odometer
• Timers 0 and 1 are used to count pulses generated by the optical sensors mounted on the shaft encoders.
• The program drives the Derbot forward for 1m. It then completes a 180◦ turn on the spot and runs forward for 1m again. The program loops continuously in this manner.
Dr. Gheith Abandah 11
Derbot odometer circuit
Dr. Gheith Abandah 12
Odometer Example – Page 1
;Initialization
movlw B'01000100' ;set port A for right
movwf adcon1 ;analog/digital mix
movlw B'11101000' ;T0: external input,
movwf option_reg ;low to high transition,
;no prescale
movlw B'00000011' ;T1: no prescale,
movwf t1con ;oscillator disabled,
;external sync input
Dr. Gheith Abandah 13
Odometer Example – Page 2
opto_move
clrf tmr0 ;clear timers
clrf tmr1l
clrf tmr1h
clrf flags
btfss portc,0 ;increment T1 if ip is zero,
incf tmr1l ;as 1st rising edge isn’t
;detected
call leftmot_fwd ;start motors running
call rtmot_fwdDr. Gheith Abandah 14
Because the counter must first have a falling edge before it starts to count.
Odometer Example – Page 3
opto_loop
movlw D'91' ;test for 1m
subwf tmr0,0
btfsc status,z
bcf porta,mot_en_left ;disable motor if =
movlw D'91'
subwf tmr1l,0
btfsc status,z
bcf porta,mot_en_rt ;disable motor if =
…
goto opto_loopDr. Gheith Abandah 15
Generating a ‘clock tick’ – a repetitive interrupt stream
Dr. Gheith Abandah 16
Example: ‘clock tick’ generation
• Assuming an oscillator frequency of 4MHz, what is the slowest ‘clock tick’ rate that can be obtained from Timer 0 and Timer 1?
• T0: slowest interrupt rate with prescaler ÷256.• The input frequency to T0 is 1 MHz/256, or
3.906 kHz.• The 8-bit timer divides this frequency by 256 to
produce the clock tick frequency, which will be 3.906 kHz/256, or 15.26 Hz.
Dr. Gheith Abandah 17
Example: ‘clock tick’ generation
• T1: slowest interrupt rate with prescaler ÷8.• The input frequency to T1 is 1 MHz/8, or 125
kHz.• The 16-bit timer divides this frequency by 216
to produce the clock tick frequency, which will be 125 kHz/ 216, or 1.91 Hz.
Dr. Gheith Abandah 18
PIC 16F87XA Timer 2 Module
Dr. Gheith Abandah 19
Timer 2 Registers8-bit register:•TMR2 (11h)
Control Register: •T2CON (12h)•PR2 (92h), period register
Dr. Gheith Abandah 20
Timer 2 control register
• TOUTPS3:TOUTPS0: Output Postscale Select, 1:1-1:16
• TMR2ON: Timer 2 On• T2CKPS1:T2CKPS0: Clock Prescale Select, 1:1,
1:4, 1:16
Dr. Gheith Abandah 21
The PR2 register, comparator and postscaler
Dr. Gheith Abandah 22
Example: Timer 2 interrupt rate• Assuming an oscillator frequency of 4MHz, what is
the slowest ‘clock tick’ rate that can be obtained from Timer 2?
• Slowest interrupt rate with prescaler ÷16 and postscaler ÷16 .
• The input frequency is 1 MHz/16, or 62.5 kHz.• If PR2 is preset to 255, the frequency is divided by 256
to produce the reset frequency, which will be 62.5 kHz/256, or 244.14 Hz.
• With postscaler of 16, then the interrupt frequency will be 15.26 Hz.
Dr. Gheith Abandah 23
The capture/compare/PWM (CCP) modules
Dr. Gheith Abandah 24
• 2 CCP modules• Each CCP module contains a 16-bit register
which can operate as a:1. 16-bit Capture register2. 16-bit Compare register3. Pulse width modulation Master/Slave Duty Cycle
register
CCP Registers16-bit register:•CCPR1L (15h)•CCPR1H (16h)•CCPR2L (1bh)•CCPR2H (1ch)
Control Register: •CCP1CON (17h)•CCP2CON (1dh)
Dr. Gheith Abandah 25
CCP x control register
Dr. Gheith Abandah 26
• CCPxX:CCPxY: PWM Least Significant bits• CCPxM3:CCPxM0: Mode Select bits
CCPx Mode Select bits
Dr. Gheith Abandah 27
Capture mode
Dr. Gheith Abandah 28
Compare mode
Dr. Gheith Abandah 29
Pulse width modulation
Dr. Gheith Abandah 30
Time constant small compared to ‘on’ time.
The current rises from 10 to 90% of its final value in time 2.2L/R
Pulse width modulation
Dr. Gheith Abandah 31
Time constant large compared to ‘on’ time, wide pulse
Time constant large compared to ‘on’ time,
narrow pulse.
PWM mode
Note 1: The 8-bit timer is concatenated with 2-bit internal Q clock, or 2 bits of the prescaler, to create 10-bit time base.
Dr. Gheith Abandah 32
Waveforms for the 16F873A PWM generator
Dr. Gheith Abandah 33
Calculations
T = (PR2 + 1) × (Timer 2 input clock period)= (PR2 + 1) × {Tosc × 4 × (Timer 2 prescale value)}
ton = (pulse width register) × (PWM timer input clock period),
= (pulse width register) × {Tosc × (Timer 2 prescale value)}
pulse width register = CCPR1L | CCP1CON<5:4> + 1
Dr. Gheith Abandah 34
Example
PR2 is loaded with 249D. The clock oscillator frequency is 4 MHz. Neither pre- nor postscale. Find the PWM period.
T = (PR2 + 1) × {Tosc × 4 × (Timer 2 prescale value)}
= 250 × (250 ns × 4 × 1)= 250 μs
i.e. PWM frequency = 4.00 kHz.
Dr. Gheith Abandah 35
PWM applied in the Derbot for motor control
Dr. Gheith Abandah 36
Example waveforms
Dr. Gheith Abandah 37
Derbot Motor Example – Page 1
;set up PWM
movlw B'00000100' ;switch on Timer2,
movwf t2con ;no pre or postscale
movlw B'00001100' ;enable PWM
movwf ccp1con
movwf ccp2con
movlw 0f9 ;249
movwf pr2
...
Dr. Gheith Abandah 38
Derbot Motor Example – Page 2
leftmot_fwd ;run left motor forward
bsf porta,mot_en_left
movlw D'176'
movwf CCPR2L
return
leftmot_rev ;run left motor backward
bsf porta,mot_en_left
movlw D'80'
movwf CCPR2L
returnDr. Gheith Abandah 39
Generating PWM in software
• May use up all PWM resources or don’t have them in a low-cost microcontroller.
• PWM outputs can be generated based on software delay loops only.
• PWM outputs can also be generated based on timer interrupts.
Dr. Gheith Abandah 40
Generating PWM with timer interrupt
Dr. Gheith Abandah 41
cblock assembler directive
cblock 20
var1 ;reserve 1 byte for var1
var2 ;reserve 1 byte for var2
…
endc
Dr. Gheith Abandah 42
PWM used for digital-to-analog conversion (DAC)
Dr. Gheith Abandah 43
RC low-pass filter characteristics
Dr. Gheith Abandah 44
Derbot Example
Dr. Gheith Abandah 45
fc = 1/(2π*100nF* 20kΩ) = 80 Hz
Generating a sine wave
Dr. Gheith Abandah 46
Lower: the PWM stream.Upper: detail of analog output
Dr. Gheith Abandah 47
T = 250 μsf = 4 kHz
Sine wave example – Page 1
clrf pointer
sin_loop
movf pointer,w
call sin_table ;get most significant byte
movwf ccpr1l ;move it to the PWM output
incf pointer,f ;increment the pointer
movf pointer,w
call sin_table ;get the MS byte
andlw B'11000000' ;we only use ms 2 bits
Dr. Gheith Abandah 48
Sine wave example – Page 2
movwf temp
bcf status,c ;adjust for CCP1CON
rrf temp,f
rrf temp,w
iorlw B'00001100' ;set some CCP1CON bits
movwf ccp1con
incf pointer,f
movf pointer,w
…
call delay1
goto sin_loopDr. Gheith Abandah 49
Weaknesses of this method
• The output analog voltage is directly dependent on the logic levels of the PWM stream. These in turn are dependent on the accuracy of the power supply voltage.
• The low-pass filter cannot generate fast-changing signals..
• Running the PWM faster decreases the resolution.• There will always be some residual ripple on the
analog output.
Dr. Gheith Abandah 50
Frequency measurement
Dr. Gheith Abandah 51
Both a counter and a timer are needed, the timer to measure the reference period of time and the counter to count the number of events within that time.
Derbot speed measurement program
Dr. Gheith Abandah 52
Speed measurement example – Page 1
Timer2_Int
decfsz int_cntr
goto int_end
;here if making a measurement
movf tmr0,w ;save counter values
movwf tmr0_temp
movf tmr1l,w
movwf tmr1_temp
clrf tmr0 ;clear counters
clrf tmr1l
Dr. Gheith Abandah 53
Speed measurement example – Page 1
btfss portc,0 ;inc T1 if = 0, as first
incf tmr1l ;rising edge won’t be seen
movlw D'250' ;reload interrupt counter
movwf int_cntr
int_end
bcf pir1,tmr2if
retfie
Dr. Gheith Abandah 54
Summary• Timing is an essential element of embedded system design –
both in its own right and to enable other embedded activities, like serial communication and pulse width modulation.
• A range of timers is available, with clever add-on facilities which extend their capability to capture, compare, create repetitive interrupts or generate PWM pulse streams.
• In applications of any complexity, a microcontroller is likely to have several timers running simultaneously, for quite different and possibly conflicting applications. The question remains open at this stage: how can these different time-based activities be marshaled and harmonized?
Dr. Gheith Abandah 55