SVXLINK: Lecture d’une tension analogique en TCL

tensiontcl

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.

pont_diviseur
mcp3204

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.

Vous pouvez recevoir un email dès la parution d’un article sur le Blog F8ASB.COM, entrez votre mail sur la fenêtre à droite et cliquer sur abonnement. Tous les articles en 1 clic ICI
Ce contenu a été publié dans electronique, radioamateur, Raspberry, Relais F1ZBU /F1ZBV, Svxlink, avec comme mot(s)-clé(s) , , , , , , , , , , , , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.