Title: Diapositive 1
1Microcontrôleurs PIC
2- 1ère séance
- Présentation du PIC16F876
- Outils de programmation du PIC
- Le langage C
- Exemples dapplications simples
- 2ème séance
- Présentation des motorisations
- Interfaçage avec le PIC
- Capteurs IR
- Interfaçage avec le PIC
31ère séance
4PIC 16F876 (I)
- Larchitecture interne
- Mémoire programme (FLASH) 8K mots de 14 bits
- Mémoire RAM 368 octets
- Mémoire utilisateur (EEPROM) 256 octets
- Unité de calcul (ALU)
- Circuit dhorloge (ex 16 Mhz gt 4 MIPS)
- Périphériques internes
- Ports dentrées/sorties
5PIC 16F876 (II)
- Les périphériques internes
- 3 compteurs indépendants
- 5 convertisseurs analogiques/numériques 10 bits
- 1 port série connectable à un ordinateur
- 1 port I²C
- 1 port SPI (pour connecter des PICs entre eux)
6PIC 16F876 (III)
- Les ports dentrées/sorties
- 5 ports distincts (A6 B8 C8) 22 e/s
- Courant max en sortie 20mA/pin 200mA/port
- Registre de sortie (effet mémoire)
- Entrées analogiques 0 5V
- Entrées numériques 0 ou 5 V
7PIC 16F876 (IV)
Pour que le PIC démarre
Circuit de RESET
Circuit dalim
Circuit dhorloge
8La programmation
PC
Programmateur
PIC
PIC
Langage C / BASIC
Hexadécimal
Assemblage
Compilation
Langage Assembleur
Haut niveau
Bas niveau
9La programmation in-situ
Elle évite de déconnecter le PIC du circuit à
chaque programmation
Connecteur de programmation
Attention Toujours couper lalimentation de
votre circuit durant la prog.
10Le langage C
Structure du programme en C include lt16F876a.hgt
//Définit le type de PIC utilisé fuses
HS,NOPROTECT,NOWDT //Fusibles de
configuration use delay(clock16000000)
//Vitesse du PIC 16Mhz //emplacements pour
les fonctions Void main() //Programme
principal
11Le langage C
Les Variables Son nom peut comporter plusieurs
lettes/chiffres Les types de variables Int
entier de 0 à 255 Bit 0 ou 1 Char Caractère
dans la norme ASCII Float réels 32 bits à
virgule flottante Il faut définir toutes les
variables au début du programme et de préférence
leur attribuer une valeur par défaut
include lt16F876a.hgt fuses HS,NOPROTECT,NOWDT
use delay(clock16000000) Void main() Int
a0,b1,test0 .... ...
12Le langage C
Les opérateurs Opérations de calcul
addition - soustraction multiplication /
division puissance modulo
- Opérations de test
- égalité entre 2 éléments
- ! inégalité
- gt supérieur
- gt supérieur ou égal
- lt inférieur
- lt inférieur ou égal
- Opérations logiques
- ET logique
- OU logique
- ! NON logique
Raccourcis i ? i i 1 incrémentation i-- ?
i i 1 décrémentation xy ? x xy
13Le langage C
Les boucles Boucle if Void main() If
((i0)(i!12)) //actionA else //actionB
Boucle while Void main() While
(i!0) //Action A //ActionB
Boucle for Void main() For(j0jlt3j) //A
ction A
14Le langage C
Les Ports dentrées/Sorties Ex on a une led
connectée sur la patte RA0, un bouton poussoir
sur la patte RB0 Dans notre programme on va
vouloir allumer la led et lire létat du bouton
poussoir Void main() If (input(PIN_RB0)) // Si
du 5V est présent sur la patte 0 du port B alors
on rentre dans la boucle Output_bit(PIN_RA0,1)
//On applique du 5V sur la patte 0 du port A
15Le langage C
Les fonctions Elles peuvent être appelées à
partir de main. Exemple on fait une fonction
lire_capteur() qui attends un signal dun capteur
branché sur la patte RA0 ou dun autre sur la
patte RA1 et renvoie 1 si le capteur RA0 est
excité, 2 si le capteur RA1 lest. Int
lire_capteur () While((!input(PIN_A0))(!input(P
IN_A1))) //Tant que tout est à 0 on fait
rien If(input(PIN_A0)) Return 1 Else Return
2 Main() Int x x lire_capteur() // x vaut
1 ou 2 selon létat du capteur lors de lappel de
la fonction
16Le langage C
Les commandes spéciales Rand() x rand()
//x prend une valeur aléatoire entre 0 et
255 Delay_ms() pause dans un programme en
ms Main() Output_bit(PIN_RA0,0) //Mets du
0V sur la patte RA0 Delay_ms(5000) //Attends
5 secondes Output_bit(PIN_RA0,1) //Mets du 5V
sur la patte RA0 Reset_cpu() fait un reset du
PIC
17Exemples
1er exemple Faire clignoter une LED (500 ms
allumée, 1s éteinte)
include lt16F876a.hgt fuses HS,NOPROTECT,NOWDT
use delay(clock16000000) define
LED PIN_RB7 Void main() While( 1
) Output_bit(LED,1) Delay_ms(500) Output_bit(LE
D,0) Delay_ms(1000)
18Exemples
2ème exemple Faire clignoter une LED (500 ms
allumée, 1s éteinte), sarrêtant lors de lappui
sur un bouton poussoir.
include lt16F876a.hgt fuses HS,NOPROTECT,NOWDT
use delay(clock16000000) define
LED PIN_RB7 define bouton PIN_RC4 Void
main() While(input(bouton)) Output_bit(LED,1) D
elay_ms(500) Output_bit(LED,0) Delay_ms(1000)
19Exemples
3ème exemple Faire une PWM (pulse width
modulation) de fréquence 1kHz et de rapport
cyclique variable sur la patte RA0
include lt16F876a.hgt fuses HS,NOPROTECT,NOWDT
use delay(clock16000000) Void PWM( int i) Int
j While (1) Output_bit(PIN_RA0,1) For(j0jltij
) Delay_us(10) Output_bit(PIN_RA0,0) For(j
0jlt100-ij) Delay_us(10) Void
main() PWM(33) //Applique une PWM de fréquence
1 kHz et de rapport cyclique 33 sur la patte
RA0
20Quelques applications du PIC
212ème séance
22Les interruptions
Il est possible dinterrompre le déroulement du
programme lorsquun changement détat intervient
sur une ou plusieurs patte du port B ou C
include lt16F876a.hgt fuses HS,NOPROTECT,NOWDT
use delay(clock16000000) INT_RB //changement
détat sur les pattes B4-B7 Void
fonction_interruption() ... //Fonction
dinterruption ... Void main() Enable_interrupt
s(INT_RB) //Activation des interruptions sur le
port B ... ...
233 types de motorisation différents
Le Servomoteur modifié
http//www.robot-mobile-irbot.com/4-modif-servomot
eur-du-robot-mobile.htm
Le moteur pas à pas
Le moteur à courant continu
24Servomoteur
Présentation du Servomoteur
Le servomoteur est constitué dun moteur à
courant continu relié à un réducteur, et asservit
par un potentiomètre et un circuit de contrôle
25Servomoteur
Pour le commander, on lui applique des impulsions
selon la norme suivante
26Servomoteur
Typiquement, un Servo est destiné à avoir une
course de 180 et est asservi par un
potentiomètre relié à laxe du moteur. Modifier
un servo consiste à lui permettre mécaniquement
de faire un tour complet (on coupe la
butée) Ensuite on déconnecte le potentiomètre et
on le remplace par deux resistances de valeurs
égales, ainsi, le circuit dasservissement à
limpression dêtre au point milieu.
27Servomoteur modifié
- Une impulsion de 1,5 ms va lenvoyer à la
position 0 (où il est toujours) donc il ne bouge
pas - Une impulsion de 1 ms va lenvoyer à -90 mais il
ny arrivera jamais donc il va tourner
indéfiniment dans le sens anti-horaire - Une impulsion de 2 ms va lenvoyer à 90 mais il
ny arrivera jamais donc il va tourner
indéfiniment dans le sens horaire - Plus la durée de limpulsion est proche du neutre
(1,5 ms) plus il tournera doucement, inversement,
plus cette durée est proche des extrêmes (1 ou 2
ms), plus il va tourner vite
28Servomoteur modifié
Vcc 7,5V
29Servomoteur modifié
La fonction avance() permet de faire tourner le
servo dans un sens à sa vitesse maxi
include lt16F876a.hgt fuses HS,NOPROTECT,NOWDT
use delay(clock16000000) define SERVO
PIN_RC4 Void avance() While(1) Output_bit(SERVO,
1)//On met à 1 pendant 2ms Delay_ms(2) Output_bi
t(SERVO,0) Delay_ms(18)//On met à 0 pendant 20
2 18ms Void main() Avance()
30Servomoteur
- Avantages
- Boîtier pratique
- 1 seul fil de commande par Servo
- Directement pilotable par le PIC
- Couple élevé
- Inconvénients
- Les impulsions doivent êtres précises et
régulières - Vitesse assez faible
- Prix 7-8
- Il faut le modifier
31Moteur CC
La consommation dun tel moteur est denviron
100mA, il est donc impossible de le connecter
directement sur une patte du PIC
Transistor MOS BUZ11
32Pont en H
Attention, toujours alimenter un pont en H en
diagonale, sinon sur , pas bien
33Moteur CC
- Avantages
- Rapide
- Facile à commander
- Répandu
- Inconvénients
- Assez compliqué pour un fonctionnement dans les 2
sens - -Rond, donc plus difficile à fixer
34Moteur Pas à Pas
Moteur pas à pas bipolaire plus facile à
piloter que lunipolaire
En alimentant successivement les bobines A, B, C,
D 2 à 2 on réalise 4 pas
35Moteur pas à pas
36Moteur pas à pas
37Moteur pas à pas
La fonction avance() permet de faire tourner le
moteur pas à pas de n4 pas
include lt16F876a.hgt fuses HS,NOPROTECT,NOWDT
use delay(clock16000000) Void avance(int
i) Int j For(j0jltij) Output_b(6) //1ère
position Delay_ms(5) //pause entre 2
pas Output_b(5) //2ème position Delay_ms(5)
//pause entre 2 pas Output_b(9) //3ème
position Delay_ms(5) //pause entre 2
pas Output_b(10) //4ème position Delay_ms(5)
//pause entre 2 pas Return Void
main() Avance(4) //Fait tourner le moteur de 16
pas
38Moteur Pas à pas
- Avantages
- Rapide
- Très précis
- Peu coûteux
- Inconvénients
- Compliqué à mettre en uvre
- Pics de courants lors dun pas
39Le CNY70
40Le CNY70
41(No Transcript)