Mesurer une fréquence avec Raspberry Pi

Bonjour,
J’essais de mesurer une fréquence sur le GPIO d’un raspberry pi 3 car mon capteur de courant m’envoie une certaine fréquence en fonction du courant. C’est une fréquence carré d’amplitude 3,3V. Je n’arrive pas à mesurer le temps entre 2 front montant qui correspond à la période avec les fonctions d’interruption. Comment faut il faire pour mesurer la période ?

Voici mon programme qui ne fonctionne pas car il affiche le temps de rafraîchissement de l’affichage et non la période :

.#!/usr/bin/env python
# -- coding: utf-8 --

import RPi.GPIO as GPIO
import time

# declare les numero de port
Frequence = 12
led_rouge = 40
# decrit le mode de numeration
GPIO.setmode(GPIO.BOARD)

# configure en sortie le port de la led
GPIO.setup(led_rouge,GPIO.OUT,initial=0)

# configure en entree le port de la fréquence d'entrée
GPIO.setup(Frequence,GPIO.IN)

# declare les detections d'evenement sur le port de la fréquence
GPIO.add_event_detect(Frequence, GPIO.RISING,bouncetime=20)

# fonctions qui traitent les evenements front montant
def interruption_front_montant (Frequence):
	global temps
	global front
	front=1
	temps=time.time()
	return 1

# declare 2 appels aux fonctions qui traiteront les evenements bouton
GPIO.add_event_callback(Frequence,interruption_front_montant)


# tache de fond 	
def main():
	
	global temps_initial
	temps_initial=0
	global temps_final
	temps_final=0
	global temps
	temps=0
	global auto
	auto=1
	global front
	front=0
	global ecart
	ecart=0
	
	while True:
		if front == 1 :
			front=0
			if auto == 1 :
				GPIO.output(led_rouge,1)
				temps_initial = temps
			else :
				GPIO.output(led_rouge,0)
				temps_final = temps
			auto = not auto
			ecart = (temps_initial - temps_final)
		print('Période du signal :')
		print round(abs(ecart),3)
		ecart=0
		time.sleep(1)
	return 0

if __name__ == '__main__':
	main()

Merci d’avance.

Bonjour,

Je ne connais pas trop (du tout) la librairie GPIO mais je ne comprends pas trop ces lignes :

D’après Gestion du port GPIO du Raspberry Pi avec Python je partirais plutôt sur un appel de

# declare les detections d'evenement sur le port de la fréquence
GPIO.add_event_detect(Frequence, GPIO.RISING,bouncetime=20,callback=interruption_front_montant)

Sous toutes réserves…

:pushpin:
Dans un premier temps, il peut être intérréssant pour débug :bug: de mettre un poussoir et une résistance en GPIO12 pour faire des mesures + manuelles.

N.B; : Je trouve qu’il y a beaucoup de déclarations « global » dans le script. Pas sûr que ce soit nécessaire.

A+

1 « J'aime »

Bonjour, il ne faut pas faire attention aux commentaires parlant de bouton, j’ai récupéré d’autres morceau de programme.
La fonction d’interruption du front montant fonctionne, ça c’est une certitude. Le problème viens du fait de récupérer le temps entre 2 fronts montant. Pour l’instant, le temps que je mesure est dépendant du temps de la fréquence de rafraîchissement de l’affichage, il faudrait que ces 2 paramètre soient indépendant l’un de l’autre.
Pour debuger j’ai fait un sur un arduino qui génére un signal carré entre 0 et 3.3v relié directement au gpio de la raspberry.
Merci pour votre aide.