summaryrefslogtreecommitdiffhomepage
path: root/analog/motor-power-avr/motor_power_avr.txt
blob: 4c779a4923398a65b7c3c2b9fde128e3efa6b433 (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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
=================
 Motor Power AVR
=================
:Author: PP

- La carte est pilotable par le connecteur CMD micromatch 10 points, soit en
  RS232, soit par bus SPI 5V, soit par commande analogique (ou PWM > 20kHz).
  Les liaisons séries de ce connecteur sont bidirectionelles et permettent de
  remonter des infos sur l'état de la carte. 

- La carte est aussi pilotable par le connecteur I2C

- Le connecteur de DEV contient le SPI pour la programation ISP et le RS232

- Le pinout des connecteurs est étudié pour que les signaux rapides (SPI)
  soient situés proches de masses HF (GND ou signaux lents). Les signaux RS232
  sont découplés à la masse par une capa de 1nF dans ce but. La capa de 1nF
  n'est pas gênante pour le RS232, et constitue une faible impédance face aux
  hautes harmoniques des signaux à fronts rapide (10ns = 35MHz de fréquence
  équivalente)

- Il subsite 4 straps à câbler filairement. Ces straps sont des signaux de
  commande des PWM. Ils vont aux drivers de MOS. Ils devront être câblés en
  face bottom, plaqués au plus près contre le plan de masse. Leur cablage par
  strap est volontaire : il s'agit de ne pas couper le plan de masse sous les
  pistes de puissance qui supportent de très forts dI/dt et qui donc doivent
  être proches d'un signal de retour de masse. Si on passait une piste dans le
  plan, celà créerait une fente qui augmenterait l'impédance du plan à cet
  endroit jusqu'à atteindre quelques nano-henrys qui, avec des dI/dt de 15A en
  30ns (temps de montée typ des MOS, soit une fréquence équivalente de 10MHz),
  pourrait créer des ddp jusqu'à 1V voire un peu plus. Bon, en fait, c'est la
  règle CEM de base : ne jamais fendre les plans de masse surtout en présence
  de forts dI/dT.

- La carte fixe elle-même le courant max autorisé dans les ponts. Les courants
  max peuvent être différents entre les deux ponts (utile par ex si on utilise
  la carte pour driver deux moteurs d'accessoires). Cette limite en courant
  est fixée par une tension analogique produite par une PWM sortant de l'AVR
  (Vref_L et Vref_R). Sous l'effet du courant, la tension produite sur le shunt
  dans une branche du pont dépasse le Vref, le comparateur force le signal
  LIM_R ou LIM_L à 0 ce qui déclenche une interruption. Le soft relache alors
  tous les MOSFETS.

- La carte est équipée de 2 capteurs de température pour monitorer la
  température de chacun des deux ponts en H. Le monitoring s'effectue par ADC,
  puis comparaison en interne de l'AVR. Cette comparaison doit être effectuée
  régulièrement, par exemple toutes les 2s, ou moins. Eventuellement, il serait
  également intéressant de surveiller les variations rapides de température (ex
  : si au-delà de 50°C, on prend 10° en 5 secondes, il y a un problème). Cette
  comparaison est optionelle. Le strict minimum est de limiter le courant
  graduellement à partir de 60°C et de couper tous les MOS du pont concerné si
  la température dépasse 70°.
    * en dessous de 60°C : limit = 15A 
    * de 60°C à 70° : limit = descend linéairement de 15A à 4A
    * au delà de 70° : pont coupé


- La carte monitore la tension de batterie filtrée à 2,5ms. Elle peut par
  exemple limiter le courant dans les ponts en cas de baisse trop forte de la
  tension de batterie, ou renvoyer un signal "low batt" à la carte-mère.

- On pilote chaque MOS indépendament afin de pouvoir appliquer en soft un
  dead-time entre les commutations (on coupe un MOS, on attend, et on allume
  l'autre). Ca permet d'éviter les shoot-through sans avoir à rajouter une
  tripaille de composants. 100ns de dead time devraient être l'idéal. Si l'AVR
  tourne à 10MHz, ça fait 1 cycle.

- Les drivers de MOS sont alimentés en 10V. Si leur alim tombe en-dessous de
  leur UVLO (8V environ), ils se coupent. Ils consomment 1mA à 20kHz. Après il
  faut ajouter la conso des gates des MOS (2mA par MOS environ). Ca fait un
  total de 20mA sur le 10V. Les 47nF sur le 12V donnent une autonomie de 4 à
  5ms avant de tomber en dessous de 10V. Si la tension de batterie tombe
  brusquement, on a donc le temps de voir qu'elle a baissé sous son seuil
  normal, et on peut donc limiter le courant dans les ponts avant que les
  drivers ne se coupent.

- Le 10V est fait un peu bizarement, avec deux régu de 5V. Le régu 10V prend
  sa référence par rapport au 5V.

- La référence des MOSFETs est PHK24NQ04LT. Ils ont un Rdson d'environ 5mOhm.

- La référence des drivers de MOS est MAX5063AASA. Ce sont d'excellents
  drivers (rapides, fort courant, délais précis).

En cas de difficultés d'appro pour ce composant, on pourra prendre des IR2010,
de moins bonne facture, mais qui feront l'affaire.

Il faudra peut-etre modifier le soft de manière à alonger le dead time, et il
faudra limiter le courant un peu plus bas (30% environ) pour limiter la
surchauffe due aux moins bonnes performances de ce driver.

Micromatch command connector
============================

Pinout:

== ====================================
1  Gnd
2  Vcom_R (force to 0 when in SPI mode)
3  SPI_MOSI / Dir_R
4  Vcom_L (force to 0 when in SPI mode)
5  SPI_CLK / Dir_L
6  Gnd
7  SPI_MISO
8  TX_slave / SPI_IT*
9  SPI_CS*
10 RX_slave
== ====================================

Use in SPI mode:

== ==================
1  Gnd
2  Force to 0
3  SPI_MOSI
4  Force to 0
5  SPI_CLK
6  GND
7  SPI_MISO
8  TX_slave / SPI_IT*
9  SPI_CS*
10 RX_slave
== ==================

Use in old PWM mode:

========= ================ =============== ===========================
PWM conn. Master cmd conn. Slave cmd conn. Signame
========= ================ =============== ===========================
6         ..               1               Gnd
7         ..               2               Vcom_R
8         ..               3               Dir_R
9         ..               4               Vcom_L
10        ..               5               Dir_L
..        6                6               Gnd
..        7                7               NC (force to 0 if possible)
..        8                8               TX_slave
..        9                9               NC (force to 0 if possible)
..        10               10              RX_slave
========= ================ =============== ===========================