Table des matières PDF

CAN Eurosmart : interface pour Python

1. Installation

Ce document présente une interface Python de la centrale SysamSP5 de Eurosmart pour Python.

La dernière version de l'interface (version 5.0.x) fonctionne en Python 32 bits et 64 bits mais ne contient pas les fonctions complémentaires de pilotage de la sortie audio. L'interface pour Sysam PCI n'est plus implémentée. Cette nouvelle version est constituée d'un exécutable 32 bits, qui utilise le pilote Eurosmart 32 bits et qui implémente un serveur HTTP. La partie Python de l'interface communique avec ce serveur par des requêtes HTTP.

Cette nouvelle version fait appel au module requests. Il est donc conseillé d'avoir une version à jour de ce module.

Distribution par PyPI (pypi.org/project/pycanum/). Pour l'installer, ouvrir une console et exécuter les commandes suivantes dans le répertoire Scripts de la distribution (après avoir exécuté activate.bat) :

pip install --upgrade pip
pip install pycanum
             

Pour faire une mise à jour :

pip install --upgrade pycanum           
             

Version 5.0.1 : correction d'un bug dans la configuration de la sortie 2.

Version 5.0.0 : première version fonctionnant en Python 64 bits.

Pour installer le pilote de la centrale SysamSP5, télécharger le fichier zip sur Eurosmart et exécuter le programme d'installation. Remarque : sous windows 10 64 bits, on exécute DPInst64.exe mais le pilote installé est en 32 bits. La DLL SP5.dll se trouve dans le dossier c:\Windows\SysWOW64, qui contient les DLL 32 bits sur un windows 64 bits.

Le serveur qui gère les requêtes HTTP est implémenté dans l'exécutable nommé sysamhttp.exe. Si ce serveur ne répond plus, il doit être arrêté (CTRL ALT SUPR puis Gestionnaire des tâches).

Scripts de démonstration :

Pages de documentation avec exemples :

Ancienne version pour Python 3.9 32 bits : pycanum-4.2.7-cp39-cp39-win32.whl.

2. Fonctions de l'interface

2.a. Ouverture d'une liaison avec le CAN

L'interface se trouve dans le module pycanum.main. Elle est constituée d'une classe Sysam.

L'ouverture d'une liaison avec un convertisseur se fait en construisant un objet de la classe Sysam.

Attention : un seul objet de la classe Sysam peut être ouvert dans un programme Python. Il faut donc fermer la liaison avant de créer un nouvel objet Sysam.

2.c. Utilisation des entrées analogiques avec échantillonnage

Les fonctions décrites ci-dessous permettent d'effectuer des acquisitions échantillonnées sur les entrées analogiques.

La période d'échantillonnage effectivement utilisée est multiple de la période d'horloge du convertisseur. Le nombre de points est limité par la capacité mémoire de la carte.

Le convertisseur de la carte Sysam effectue une numérisation en 12 bits mais l'interface permet de réduire le nombre de bits utilisés pour le calcul de la tension (les bits les moins significatifs sont éliminés par un décalage à droite) :

Attention : la valeur pretrigger=0 ne conduit pas au déclenchement attendu. Il faut choisir au minimum pretrigger=1.

Remarque : sur SysamPCI, les temps des différentes voies sont décalés.

Un facteur de réduction égal à 2 permet d'obtenir un échantillon sur 2.

Les temps et les tensions de la première voie sélectionnée sont temps[0] et tensions[0].

2.d. Utilisation des sorties analogiques avec échantillonnage

Les fonctions décrites ci-dessous permettent d'émettre un signal échantillonné sur la sortie SA1 (SysamPCI), ou sur les deux sorties SA1 et SA2 (SysamSP5). Pour une utilisation simultanée des entrées, voir le paragraphe suivant.

Sur la carte SysamSP5, l'argument repetition est égal à -1 ou 0. Pour répéter 2 fois ou plus un signal donné, il faut donc programmer cette répétition dans le signal échantillonné fourni.

Remarque : sur SysamSP5, la fonction retourne immédiatement; il faut donc éventuellement prévoir une mise en attente avant d'effectuer d'autres opérations.

Sur SysamSP5, il faut stopper les sorties avant de les configurer (si elles sont déjà en fonctionnement). Ne pas le faire peut provoquer des erreurs dans le remplissage de la mémoire du convertisseur numérique-analogique.

Sur SysamSP5, il est possible de déclencher une acquisition lorsque les sorties sont en fonctionnement. Par exemple, si les sorties sont en fonctionnement périodique, une acquisition peut être déclenchée à tout moment. Dans ce cas, il faudra toutefois que le nombre de points total utilisés par les entrées et les sorties n'excède par 0x3FFFF, soit 262142. Dans le cas contraire, une erreur est déclenchée à l'appel de la fonction Sysam.acquerir.

2.h. Acquisition en mode parallèle (SysamSP5)

Lorsque le temps d'acquisition est long (supérieur à quelques secondes), il peut être utile de l'effectuer sur une tâche d'exécution parallèle (thread) afin d'effectuer un traitement des données simultanément. Les fonctions suivantes permettent d'effectuer une acquisition en mode parallèle, sur le CAN SysamSP5 seulement. Pour le CAN SysamPCI, le pilote ne permet pas ce mode d'acquisition.

2.i. Filtrage numérique (SysamSP5)

Les tensions lues sur les entrées analogiques sont filtrées pendant l'acquisition. La relation de récurrence appliquée est la suivante :

a0yn=k=0N-1bkxn-k-k=1M-1akyn-k(1)

Pour définir un filtre à réponse impulsionnelle finie (RIF), on doit définir les coefficients ak. Pour définir un filtre à réponse impulsionnelle infinie (RII), il faut aussi définir les coefficients bk.

Si cette fonction n'est pas appelée, le filtre par défaut est défini par a0=1,b0=1 (filtre identité).

Pour obtenir les valeurs des tensions filtrées, on utilise la fonction suivante :

Les tensions non filtrées sont toujours accessibles avec la fonction Sysam.entrees.

La fonction Sysam.paquet décrite ci-dessus permet de récupérer les signaux filtrés avec les signaux non filtrés.

Une application typique de ces fonctions est le filtre anti-repliement numérique : on numérise avec un suréchantillonnage pour effectuer le filtrage numérique, puis on réduit la fréquence d'échantillonnage au moment de récupérer les tensions.

2.j. Acquisition en mode permanent (Sysam SP5)

Dans l'acquisition échantillonnée en mode permanent, la mémoire interne de la carte Sysam SP5 n'est pas utilisée. Les valeurs des tensions sont transmises au fur et à mesure de l'acquisition (avec un tampon interne à la carte de seulement 256 valeurs).

L'intérêt du mode permanent est de permettre l'acquisition d'un nombre de points supérieur à la capacité mémoire de la carte, par exemple plusieurs millions de points. En revanche, ce mode d'acquisition ne fonctionne pas si la fréquence d'échantillonnage est trop élevée (le maximum est entre 500 kHz et 1 MHz). Il faut faire des tests avec des signaux déterminés pour évaluer la limite exacte.

Le mode permanent permet aussi d'obtenir un flux continu d'échantillons, par exemple pour traiter un signal audio en temps réel.

Lorsque l'argument repetition=1 est adopté, l'acquisition se fait en boucle et les paquets lus ont la taille définie par config_echantillon_permanent. Les paquets sont récupérés avec la fonction paquet en choisissant premier=-1. Les paquets contiennent les instants, les tensions non filtrées, et les tensions filtrées. Les paquets sont en fait stockés dans un tampon circulaire comportant 16 paquets. Lorsqu'aucun paquet n'est disponible, la fonction paquet renvoie un tableau vide. Une application de ce mode d'acquisition est le traitement d'un flux audio.

2.k. Ports logiques (Sysam SP5)

La centrale Sysam SP5 possède deux ports logiques de 8 bits chacun, accessibles par les connecteurs Sub-D.

Le port B fonctionne en TTL (tensions de 0 à 5 V). Il est constitué de deux paquets de 4 bits, chacun pouvant être programmé en entrée ou en sortie. Ce port bénéficie d'une protection contre les surtensions (max 12V). Le boitier BOLOGIC vendu par Eurosmart permet d'y accéder avec des douilles bananes. La fonction suivante permet de configurer le port B.

La fonction suivante permet d'écrire sur un bit configuré en écriture :

La fonction suivante permet de lire sur un bit configuré en lecture :

Remarque importante : les bits configurés en sortie se mettent automatiquement au niveau haut lorsqu'on ferme l'interface. Pour éviter cela, il suffit de configurer les bits en entrée avant de fermer l'interface.

Le port C fonctionne en CMOS (tensions de 0 à 3.3 V) et ne possède pas de protection contre les surtensions. Son utilisation est donc réservée à l'interfaçage avec des circuits CMOS. Chacun des 8 bits est programmable en entrée ou en sortie.

La fonction suivante configure le port C

La fonction suivante permet d'écrire sur un bit configuré en écriture :

La fonction suivante permet de lire sur un bit configuré en lecture :

2.l. Compteur et chronomètre (Sysam SP5)

La centrale Sysam SP5 possède un compteur 48 bits avec une horloge de période 10 nanosecondes. L'entrée CHRONO peut être utilisée pour cela, ou bien une des entrées du port B accessibles par le connecteur PORT LOGIQUE. Ces entrées doivent recevoir un signal TTL (0/5 V).

L'utilisation en compteur consiste à compter le nombre de fronts sur une durée déterminée. Une application est la détermination de la fréquence d'un signal TTL.

La période de base de l'horloge étant de 10 ns, les durées effectives sont multiples de 10 ns.

L'utilisation en chronomètre consiste à compter le nombre de tops d'horloge entre deux fronts du signal TTL.

Attention : l'entrée CHRONO ne fonctionne que sur front montant. Pour déclencher aussi sur front descendant, il faut utiliser une des entrées du port logique B.

2.m. Synthèse de signaux périodiques sur la sortie audio (non disponible dans la version 5)

Ces fonctions complémentaires permettent de générer deux signaux périodiques sur la sortie audio stéréo. La synthèse d'un signal se fait avec une table de 256 échantillons, par la méthode de l'accumulateur de phase. La fréquence d'échantillonnage par défaut est 44 kHz, mais il est possible de l'augmenter jusqu'à environ 300 kHz.

La méthode de synthèse directe par table (DDS) permet d'ajuster la fréquence avec une très grande précision. La précision en fréquence est :

Δf=fe232

Par exemple, pour une fréquence d'échantillonnage de 44kHz, la précision est de 10-5  Hz.

L'amplitude de la sortie audio lorsque le volume est au maximum est d'environ 1,6V.

Les valeurs des tables supérieures à 1.0 ou inférieures à -1.0 sont écrêtées. La synchronisation des deux voies n'est garantie que si les deux fréquences sont identiques.

2.n. Sortie audio d'un signal (non disponible dans la version 5)

Les fonctions suivantes permettent de diriger un ou deux signaux numériques vers la sortie audio.

Les échantillons à envoyer sur une des deux voies de la sortie audio sont stockés dans un tampon circulaire. Les données sont écrites dans le tampon par blocs. La classe RingBuffer contient ce tampon circulaire.

Le tampon doit être détruit à la fin du script, afin de libérer l'espace mémoire associé :

La fonction suivante permet d'écrire un bloc de données dans le tampon :

La fonction suivante déclenche l'écriture d'un flux sur la sortie audio :

Si l'on veut diriger le même flux de données sur les deux voies, il faut attribuer None à ring_buffer_2. Il ne faut pas attribuer le même tampon aux deux voies, car un tampon ne peut subir qu'une seule lecture.

La fonction suivante permet de stopper le flux audio :

Remarque importante : l'écriture des blocs dans le tampon doit se faire à la même fréquence que la sortie audio. Si N est la taille d'un bloc et fe la fréquence d'échantillonnage, il faut faire cette écriture environ toutes les N/fe secondes. Le tampon circulaire a néanmoins la faculté d'absorber des variations dans le rythme d'écriture, d'autant mieux que le nombre de blocs est élevé.

Creative Commons LicenseTextes et figures sont mis à disposition sous contrat Creative Commons.