I have an issue with my pyboard v1.1. I want to generate a control as follow :
every 1ms (
error = adc_input - adc_measure
error_corrected = K_P*error
write on DAC
)
With K_P = 2
Firstable, I used a simple while loop as :
Code: Select all
from pyb import Timer, Pin, ADC, DAC
from utime import sleep_ms
tim = Timer(1, freq=1000) # Définition du timer 1 à la fréquence 1000Hz
adc_pos = ADC(Pin('X11')) # Convertisseur analogique-numérique sur la pin 11
adc_neg = ADC(Pin('X12')) # Convertisseur analogique-numérique sur la pin 12
dac = DAC(Pin('X5'), bits=12) # Convertisseur CNA 12 bit sur la pin X5
K_P = 2
while True:
# Conversion numérique de la tension de sortie du système
entree_pos = adc_pos.read() # Lecture du CAN
entree_neg = adc_neg.read() # Lecture du CAN
erreur = entree_pos - entree_neg
erreur_corrigee = K_P*erreur
dac.write(int(erreur_corrigee)) # Ecriture sur le CNA
sleep_ms(1)
Now, I want to use a timer instead of sleep_ms(1). My code is now :
Code: Select all
from pyb import Timer, Pin, ADC, DAC
tim = Timer(1, freq=1000) # Définition du timer 1 à la fréquence 1000Hz
adc_pos = ADC(Pin('X11')) # Convertisseur analogique-numérique sur la pin 11
adc_neg = ADC(Pin('X12')) # Convertisseur analogique-numérique sur la pin 12
dac = DAC(Pin('X5'), bits=12) # Convertisseur CNA 12 bit sur la pin X5
K_P = 2
def correction_avec_timer(timer):
global K_P
# Conversion numérique de la tension de sortie du système
entree_pos = adc_pos.read() # Lecture du CAN
entree_neg = adc_neg.read() # Lecture du CAN
erreur = entree_pos - entree_neg
erreur_corrigee = K_P*erreur
dac.write(int(erreur_corrigee)) # Ecriture sur le CNA
# Fonction qui se déclenche à chaque fois que le timer finit sa boucle
tim.callback(correction_avec_timer)
I quite not understand why? Do you have any idea?
entree_pos is an integer thus, erreur is also an integer. K_P*erreur is a float beacause K_P is a float, however int(erreur_corrigee) is an integer and the DAC should work?
Thank you for your advices,