summaryrefslogtreecommitdiffhomepage
path: root/analog/motor-power-avr/algo_pwm.txt
blob: 553b74e99f8c34e8ddbbb5f69340e173ca77a5c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
** Description de l'algo2 pour a génération de PWM

* Deux OCR du timer 16 bits sont utilisés :

OCR1 qui déclenche l'IT1
OCR2 qui déclenche l'IT2

En fonction des durées respectives des PWM L et R, la variable d'état
pwm_state peut prendre 7 valeurs différentes :

Si une PWM est à 0 ou bien en high Z, elle est condidérée comme étant égale à
0%

STATE_NORMAL     : pwm_L_ + pwm_R_ différent de [95%, 105%]
STATE_EQUAL      : pwm_L_ + pwm_R_ = 100%
STATE_EQUALSUP   : pwm_L_ + pwm_R_ appartient à ]100%, 105%]
STATE_EQUALINF   : pwm_L_ + pwm_R_ appartient à [95%, 100%[
STATE_SMALL_L_   : pwm_L_ <= 4%
STATE_SMALL_R_   : pwm_R_ <= 4%
STATE_SMALL_BOTH : pwm_R_ <= 4% et pwm_L_ <= 4%

* En mode STATE_NORMAL, les IT sont afectées de la manière suivante :
- OCR1 = pwm_L_
- OCR2 = 100% - pwm_R_
- IT_OVF  : rise_edge_L_ ; fall_edge_R_
- IT_OCR1 : fall_edge_L_
- IT_OCR2 : rise_edge_R_

* En mode STATE_EQUAL, les IT sont affectées de la manière suivante :
- OCR1 = pwm_L_ (accessoirement, dans ce mode, c'est aussi égal à 100% - pwm_R_)
- OCR2 = 0
- IT_OVF  : rise_edge_L_ ; fall_edge_R_
- IT_OCR1 : fall_edge_L_ ; rise_edge_R_
- IT OCR2 désactivée

* En mode STATE_EQUALSUP, les IT sont affectées de la manière suivante :
- OCR1 = 100% - pwm_R_
- OCR2 = 0
- IT_OVF  : rise_edge_L_ ; fall_edge_R_
- IT_OCR1 : rise_edge_R_ ; attente de (pwm_L_ + pwm_R - 100%) ; fall_edge_L_
- IT OCR2 désactivée

* En mode STATE_EQUALINF, les IT sont affectées de la manière suivante :
- OCR1 = pwm_L_
- OCR2 = 0
- IT_OVF  : rise_edge_L_ ; fall_edge_R_
- IT_OCR1 : fall_edge_R_ ; attente de (100% - (pwm_L_ + pwm_R)) ; fall_edge_L_
- IT OCR2 désactivée

* En mode STATE_SMALL_R_, les IT sont affectées de la manière suivante :
- OCR1 = pwm_L_
- OCR2 = 0
- IT_OVF  : rise_edge_L_
- IT_OCR1 : fall_edge_L_ ; rise_edge_R_ ; attente de "pwm_R_" ; fall_edge_R_
- IT OCR2 désactivée

* En mode STATE_SMALL_L_, les IT sont affectées de la manière suivante :
- OCR1 = 100% - pwm_R_ - pwm_L_
- OCR2 = 0
- IT_OVF  : fall_edge_R_
- IT_OCR1 : rise_edge_L_ ; attente de "pwm_L_" ; fall_edge_L_ ; rise_edge_R_
- IT OCR2 désactivée

* En mode STATE_SMALL_BOTH, les IT sont affectées de la manière suivante :
- OCR1 = 0
- OCR2 = 0
- IT_OVF : rise_edge_L_ ; attente de "pwm_L_" ; fall_edge_L_ ; rise_edge_R_ ;
  attente de "pwm_R_" ; fall_edge_R_
- IT OCR1 désactivée
- IT OCR2 désactivée