Le relais des Vosges F1ZBV intègre en synthèse vocal la tension d’alimentation, c’est fonction est à ce jour uniquement informelle.
L’évolution du relais nous permettra par la suite de passer le relais en mode batterie grâce aux relais de commutation présents sur la carte SvxCard et de mesurer la tension batterie.
La surveillance de la tension critique basse entrainera la remise en route de l’alimentation floating sur une tension determinée.
La carte SvxCard est muni d’un convertisseur analogique/numérique de type MCP3204. F4HDW a travaillé sur la partie programmation qui permet d’accéder aux mesures de tension en TCL.
Pourquoi en TCL?
Le TCL est le langage utilisé par Svxlink, cela va donc nous permettre de l’intégrer directement sans passer par l’écriture d’un fichier intermédiaire, ce qui serait le cas si l’on utilisait le language Python.
Pour la description du code et ses explications, je vous conseille de vous rendre sur le site de F4HDW qui décrit tout très bien dans le détail.
Quant à moi je vais vous décrire l’adaptation dans SvxLink.
Installation du pilote:
git clone https://github.com/lehenbauer/tclspi.git
sudo apt-get install tcl8.5-dev libi2c-dev autoconf cd tclspi autoconf ./configure --with-tcl=/usr/lib/tcl8.5 make sudo make install
Ajout de l’utilisateur « pi » au groupe « spi »:
sudo usermod -a -G spi pi
Intégration du code dans SvxLink:
Dans le fichier Logic.tcl ajouter en début de fichier l’appel de la library:
# # Add spi library # package require api
[sourcecode language=”bash”]
#
#Function to read SPI voltage value with MCP3204 and bridge divider
#
proc conversion {canal R1 R2} {
set spi [spi #auto /dev/spidev0.0]
$spi read_mode 0
$spi write_mode 0
$spi write_bits_word 8
$spi read_bits_word 8
$spi write_maxspeed 500000
$spi read_maxspeed 500000
# commande binaire pour le convertisseur: bit de start, bit "Single Ended", canal 0
set adcCommand [expr 0b11000000 + $canal * 0x08]
# Conversion texte -> binaire
set transmitString [binary format c $adcCommand]
# Ajout de 3 caractères 0 (pour envoyer 4 en tout), réception de 4 caractères
set receiveString [$spi transfer "$transmitString\x00\x00\x00" 50]
# affichage de la réception en binaire
binary scan $receiveString B* affBin
# Conversion binaire vers entier
binary scan $receiveString I convert
# extraction de la valeur
set receivedValue [expr ($convert & 0b00000001111111111110000000000000) / 0x2000]
$spi delete
set voltage [expr $receivedValue * (3.3/4096) * ($R1 + $R2)/$R2]
return [string range $voltage 0 3]
}
#
# Executed when the SvxLink software is started
#
proc startup {} {
#playMsg "Core" "online"
#send_short_ident
}
[/sourcecode]
J’ai placé ce code juste au dessus de la partie du programme,
Executed when the SvxLink software is started, comme dans l’exemple ci-dessus
Intégration dans un code DTMF (exemple code 1)
[sourcecode language=”bash”]
#
#Annonce de la tension d’alimentation
#
if {$cmd == "1"} {
set alim [conversion 2 10 1.5]
puts "Tension Alim:$alim V"
playMsg "SVXCard/Mesurement" "PowerSupplyVoltage";
playVoltage $alim;
return 1
}
[/sourcecode]
set alim [conversion 2 10 1.5] la fonction indique le canal 2, la premiere resistance 10 et la ont deuxième resistance 1.5, elle pourra donc s’adapter à votre pont diviseur et à votre tension, ici nous sommes sur une tension de 0 à 25V sur 4096 points.
Il sera nécessaire de crée un fichier son supplémentaire, PowerSupplyVoltage. Ajouter la fonction playVoltage dans le fichier local.tcl du dossier Language. Une description et mise à disposition complète de ce fichier va se faire prochainement.
Partie hardware sur la carte:
J’utilise Resdivider disponible ici, qui calcule en ligne le pont diviseur de tension.
J’ai utilisé le CH2 car CH0 et CH1 sont utilisés pour les smètres.
Suivant le calcul précédent je soude donc pour R30 1,5K et R29 10K. Nous effectuons la mesure en reliant l’entrée A3 de la carte au + de l’alimentation, le cavalier JP13 amènera la masse.
Merci à F4HDW Stéphane pour son aide.