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.
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.
Constructeur : ouverture de la liaison avec le CAN
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.
Sélection des entrées analogiques et configuration du calibre (gain de l'amplificateur d'entrée).
Sur la carte SysamPCI, la fréquence d'échantillonnage maximale diminue lorsqu'on augmente le nombre de voies sélectionnées. Sur la centrale SysamSP5, il faut sélectionner les entrées 0,1,2 et 3 pour bénéficier de la fréquence d'échantillonnage maximale (10 MHz).
Sur SysamPCI, la sélection d'une seule voie en mode différentiel les place toutes en mode différentiel. Les tensions sont alors mesurées entre les entrées 0 et 4, 1 et 5, 2 et 6, 3 et 7. Sur SysamSP5, chaque canal (0-4,1-5,2-6,3-7) peut être placé en mode différentiel indépendamment des autres. Pour placer le premier et le deuxième canal en mode différentiel, il faut affecter [0,1] au dernier argument (diff).
Les fonctions décrites ci-dessous permettent d'effectuer des acquisitions échantillonnées sur les entrées analogiques.
Configuration de la période d'échantillonnage et du nombre de points à acquérir.
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) :
Configuration du nombre de bits de la quantification.
Configuration d'un déclenchement sur une des voies de l'acquisition.
Attention : la valeur pretrigger=0 ne conduit pas au déclenchement attendu. Il faut choisir au minimum pretrigger=1.
Configuration d'un déclenchement sur une voie externe TTL (entrée SYNCHRO EXT).
Acquisition des tensions sur les entrées configurées. La fonction retourne lorsque l'acquisition est terminée.
Récupération des temps de la dernière acquisisition.
Remarque : sur SysamPCI, les temps des différentes voies sont décalés.
Récupération des tensions de la dernière acquisition.
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].
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.
Configuration d'une sortie
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.
Déclenchement d'une ou deux sorties. Les deux sorties (SysamSP5) sont déclenchées simultanément. Pour qu'elles soient synchrones, il faut néanmoins que les périodes d'échantillonnage soient identiques. Sur SysamSP5, la fonction retourne immédiatement. Sur SysamPCI, elle retourne lorsque l'émission est terminée ou lorsque l'utilisateur presse la touche ESC.
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.
Stopper une émission périodique sur SysamSP5. Sur SysamPCI, il faut appuyer sur la touche ESC pour stopper l'émission.
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.
Sur SysamSP5, il est possible de déclencher les sorties puis l'acquisition après (mais pas l'inverse). Sur SysamPCI, cela est impossible avec les fonctions décrites plus haut. La fonction suivante permet d'effectuer simultanément une acquisition et une émission des sorties :
Effectuer l'acquisition avec une utilisation simultanée et synchrone des sorties. La période d'échantillonnage des sorties est la même que pour les entrées.
Remarque : le nombre de points total utilisable pour les entrées et sorties est limité par la mémoire RAM du SysamSP5. Il est de 0x3FFFF, soit 262142.
La lecture directe des entrées (sans passer par la mémoire du CAN) peut être utilisée lorsque la cadence d'acquisition est très lente (moins de un échantillon par seconde). Dans ce cas, on utilisera l'horloge interne du PC pour déclencher des lectures périodiques (fonction time.sleep).
Activer la lecture directe sur une ou plusieurs voies, qui doivent avoir été configurées au préalable avec config_entrees.
Appliquer une tension constante sur une ou deux sorties
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.
Lancer l'acquisition en mode parallèle. La fonction retourne dès que l'acquisition est lancée.
Lancer l'acquisition en mode parallèle, avec utilisation simultanée des sorties.
Lire le paquet de points déjà acquis lors d'une acquisition en mode parallèle.
Les tensions lues sur les entrées analogiques sont filtrées pendant l'acquisition. La relation de récurrence appliquée est la suivante :
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.
Définition des coefficients de filtrage
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 :
Récupération des tensions filtrées de la dernière acquisition.
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.
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.
Configuration de la période d'échantillonnage et du nombre de points à acquérir.
Acquisition des tensions sur les entrées configurées, en mode permament. La fonction retourne lorsque l'acquisition est terminée.
Lancer l'acquisition en mode parallèle et mode permanent. La fonction retourne dès que l'acquisition est lancée.
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.
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.
Configuration d'un des paquets de 4 bits du port B en entrée ou en sortie.
La fonction suivante permet d'écrire sur un bit configuré en écriture :
Écriture sur un bit du port B
La fonction suivante permet de lire sur un bit configuré en lecture :
Lire un bit du port B
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
Configuration d'un des 8 bits du port C en entrée ou en sortie.
La fonction suivante permet d'écrire sur un bit configuré en écriture :
Écriture sur un bit du port C
La fonction suivante permet de lire sur un bit configuré en lecture :
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.
Configuration du compteur
La période de base de l'horloge étant de 10 ns, les durées effectives sont multiples de 10 ns.
Attente de la fin du comptage et renvoi du nombre de fronts comptés.
L'utilisation en chronomètre consiste à compter le nombre de tops d'horloge entre deux fronts du signal TTL.
Configuration du chronomètre
Attente de la fin du chronométrage et renvoi du nombre de tops d'horloge.
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.
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 :
Par exemple, pour une fréquence d'échantillonnage de 44 kHz, la précision est de 10-5 Hz.
L'amplitude de la sortie audio lorsque le volume est au maximum est d'environ 1,6 V.
Démarrage de la génération de deux signaux périodiques sur la sortie audio
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.
Arrêt de la génération des signaux.
Génération de deux signaux périodiques définis par des harmoniques
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.
Création d'un tampon.
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 :
Écriture d'un bloc d'échantillons dans le tampon.
La fonction suivante déclenche l'écriture d'un flux sur la sortie audio :
Configuration de 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é.