Electronique > RéalisationsProduction sonore > Sirènes > Sirène 007b

Dernière mise à jour : 25/01/2015

Présentation

Contrairement à son ancêtre sirène 007, celle-ci ne délivre qu'un seul type de signal sonore, le Pin-Pon du SAMU. Mais tout comme son ancêtre, elle s'appuie sur un PIC 12F675, pour une simplification extrême : deux composants seulement au minimum !

sirene_007b_pcb_3d_a sirene_007bb_pcb_3d_a

Eh oui, le PIC et un buzer piezo, ça fait bien deux composants. Mais on peut en rajouter...

Avertissement

Ce montage a été conçu pour être intégré dans une rampe munie d'un avertisseur sonore, elle-même montée sur un véhicule de la Croix-Rouge Française, qui est autorisée à l'utiliser. Sans autorisation, ce montage ne peut être utilisé qu'à des fin didactique ou ludique, chez soi et avec une puissance sonore modérée.

Schéma

Deux composants donc, un PIC et un transducteur piezo. Le connecteur J1 est celui de l'alim 5 V, il compte pour du beurre (qui comme chacun sait ne résiste pas à la chaleur).

sirene_007b

Tel quel, ce montage délivre de façon alternée deux tonalités fixes de 435 Hz et 651 Hz (ça ressemble bien à une quinte), à raison de 55 cycles par minute (période de 1,09 seconde pour deux changements de tonalité successifs). La sortie GP0 peut attaquer directement un transducteur piezo, je ne me gêne pas. Mais vous pouvez aussi mettre un petit haut-parleur d'impédance 50 ohms, en série avec un condensateur de liaison de 220 uF. Si le HP ne fait que 8 à 16 ohms, il faut mettre une résistance en série avec lui pour limiter le courant de sortie du PIC à une valeur non destructive (une résistance de 47 ohms / 0,5 W fait l'affaire). La sortie peut également attaquer un étage de puissance modeste ou élevée (exemples), si bien sûr vous en avez l'autorisation. Le circuit fonctionne avec une tension de 3 V (deux piles de 1,5 V) ou de 4,5 V (3 piles de 1,5 V). Pour les tests et comme je n'avais plus de pile, j'ai utilisé mon alimentation de labo de 300 A qui à priori suffisait pour ce PIC. Aux deux composants de base, on peut tout de même ajouter une option "sortie ligne" et une option "régulation tension", qui donnent lieu au joli dessin qui suit. 

sirene_007bb

Même avec ces ajouts, on peut dire que le schéma reste simple, non ? La sortie ligne analogique Out_A  fait usage d'un pont diviseur (R1 et R2) pour limiter l'amplitude tout de même un peu élevée du signal de sortie (TTL 5 V si PIC alimenté en 5 V, rappelons qu'une entrée ligne traditionnelle se contente d'ordinaire de signaux audio dont l'amplitude est de quelques centaines de mV). Le condensateur de liaison C1 est facultatif. L'option régulation de tension permet de faire fonctionner la sirène à partir d'une tension plus élevée, par exemple le +12 V d'une batterie de voiture. Ici l'abaissement de tension est obtenu avec un petit régulateur de tension en boîtier plastique TO92, le bien nommé 78L05 (U2 sur le schéma). Vu qu'on a des volts à perdre si on se branche sur une batterie 12 V de voiture, l'ajout d'une diode de protection contre l'inversion accidentelle de polarité (D1), en série avec l'arrivée d'alimentation, ne peut pas faire de mal. Elle assure même, voyez-vous, une sorte de filtrage RC "dynamique" avec son compagnon C2, filtrage qui plaît beaucoup au régulateur qui fait suite.

Principe de base
Le PIC ne comporte que très peu de lignes de code. Les deux timers Timer0 et Timer1 sont mis à contribution :
- Timer0 pour élaborer les signaux sonores
- Timer1 pour faire la bascule entre les deux fréquences de 435 Hz et 651 Hz.
Remarque : la sortie TP1 (sur GP2) n'est là que pour vérifier que le temps qui sépare les changement de tonalité est correct. En situation normale cette sortie n'est pas utilisée.

//Pin-Pon SAMU, 435 Hz / 651 Hz - Cadence 55 cycles / minute

program electronique_sirene_007b_12f675;

const
cTMR0_435Hz = 115; // 435 Hz
cTMR0_651Hz = 163; // 651 Hz
cTMR1H = $F8;
cTMR1L = $D9;

var
iT1: word;
bF1: boolean;
Out_Audio: sbit at GPIO.0;
Out_TP1: sbit at GPIO.2;

procedure CPU_Init;
begin
CMCON := %00000111; // comparators OFF
TRISIO := $00;
ANSEL := $00;
OPTION_REG := $00;
OPTION_REG.PSA := 0;
OPTION_REG.PS2 := 0;
OPTION_REG.PS1 := 1;
OPTION_REG.PS0 := 0;
INTCON := $00;
INTCON.T0IE := 1;
INTCON.T0IF := 0;
TMR0 := cTMR0_435Hz;
T1CON := $00;
T1CON.TMR1ON := 1;
PIR1.TMR1IF := 0;
PIE1.TMR1IE := 1;
WPU := $00;
iT1 := 0;
INTCON.GIE := 1;
bF1 := false;
end;

procedure Interrupt;
begin
// Timer0 - use to produce sound
if INTCON.T0IF then
begin
INTCON.T0IF := 0;
if bF1 then
TMR0 := cTMR0_435Hz
else
TMR0 := cTMR0_651Hz;
Out_Audio := Out_Audio xor 1;
end;
// Timer1 - use to change sound freq
if PIR1.TMR1IF then
begin
PIR1.TMR1IF := 0;
TMR1H := cTMR1H;
TMR1L := cTMR1L;
if inc(iT1) > 237 then
begin
bF1 := bF1 xor 1;
Out_TP1 := bF1;
iT1 := 0;
end;
end;
end;

// main program
begin
CPU_Init; // all works is made in interrupts
end.


Voir aussi page Programmation PIC - Bases - MP - Production sonore.

Stabilité des fréquences
La stabilité des deux tonalités et de l'intervale de temps qui sépare les changements de ton dépend de l'oscillateur utilisé pour le PIC. Dans le mode le plus simple, on utilise l'oscillateur interne 4 MHz dont la fréquence peut varier un peu en fonction de la température ambiante. Pour une meilleure  stabilité, on doit ajouter un quartz entre les deux broches OSC1 et OSC2 du PIC, avec les deux traditionnels condensateurs qui permettent d'entretenir l'oscillation. Votre serviteur met donc à disposition deux fichiers compilés, un pour usage avec quartz et l'autre pour usage avec oscillateur interne. Notez que les valeurs utilisées dans le code pour le prépositionnement des deux timers sont le résultat de calculs, qu'une simulation a permis de valider. Dans la pratique et à cause des tolérances des composants, ces valeurs peuvent très légèrement différer.

Prototype

Réalisé sur plaque sans soudure, en même temps pour programmation ICSP et tests auditifs.

sirene_007b_proto_001a sirene_007b_proto_001b

Essai avec HP 8 ohms en série avec une résistance de 15 kO. Oui, 15 kO c'est beaucoup et le son est très faible. Mais c'est bien suffisant pour s'assurer que tout fonctionne. Ici avec oscillateur interne et donc sans quartz externe.

Logiciel du PIC

Les fichiers de code source (MikroPascal V6.5 Pro) et binaires compilés (*.hex) sont disponibles dans l'archive dont le lien suit.
Sirène 007b - PIC 12F675 - 25/01/2015
- Fichier *_oscint.hex : pour usage sans quartz externe
- Fichier *_quartz.hex : pour usage avec quartz externe
Si vous souhaitez recevoir par la poste un PIC préprogrammé et prêt à utiliser, merci de consulter la page PIC - Sources.

Circuits imprimés

Réalisés en simple face, en modes "simplifié" et "complet". Pour la version complète, il est aisé de ne pas monter sur le circuit, les composants non requis.

sirene_007b_pcb_composants sirene_007bb_pcb_composants

Typons aux formats PDF et Bitmap 600 dpi

Historique

25/01/2015
- Première mise à disposition.