slogic32u3-adc-analog-capture.py

Sipeed SLogic32U3 : Analyseur logique 32 canaux USB 3.2 Gen2 · Fichier : slogic32u3-adc-analog-capture.py · Langage : python · Usage : Acquérir des données analogiques via le module ADC optionnel et les convertir en tension.

Exemple d'acquisition de données analogiques via le module ADC optionnel, avec conversion numérique vers tension.

Ce code suppose que le module ADC optionnel est reconnu par le pilote libsigrok comme des canaux analogiques. Il configure l'échantillonnage à 100 MSa/s et lit les données brutes. La conversion en tension utilise une référence de 3.3V sur 8 bits, à ajuster selon la spécification réelle du module.

slogic32u3-adc-analog-capture.py

import libsigrok
import numpy as np

# Hypothèse : Le module ADC est exposé comme des canaux analogiques supplémentaires
# ou via un pilote spécifique. Les canaux analogiques sont souvent indexés après les logiques.
# Exemple : Canaux 32-35 pour les 4 entrées analogiques.

def read_analog_channels():
    ctx = libsigrok.Context()
    drivers = ctx.driver_list()
    driver = next((d for d in drivers if 'slogic' in d.name.lower()), None)
    dev = driver.scan()[0]
    dev.open()
    
    # Activer les canaux analogiques (ex: 4 canaux)
    # Note : La configuration exacte des canaux analogiques dépend du pilote
    dev.config_set(libsigrok.CONF_NUM_ANALOG_CHANNELS, 4)
    dev.config_set(libsigrok.CONF_SAMPLE_RATE, 100000000) # 100 MSa/s
    
    dev.start()
    
    samples = []
    try:
        # Lire quelques paquets
        for _ in range(10):
            packet = dev.receive()
            if packet:
                samples.extend(packet)
    finally:
        dev.stop()
        dev.close()
        
    # Conversion en tension
    # ADC 8 bits, plage 0-3.3V (à vérifier selon le schéma du module ADC)
    # Si les données sont brutes (0-255) :
    data = np.array(samples)
    # Supposons que les données sont entiers 8-bit
    voltages = (data / 255.0) * 3.3
    
    print(f"Tension moyenne Canal 0 : {np.mean(voltages[:len(voltages)//4]):.2f} V")

if __name__ == "__main__":
    read_analog_channels()

← Retour à la fiche