calcul a fair par le µC
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

calcul a fair par le µC



  1. #1
    invite3d74c80f

    calcul a fair par le µC


    ------

    slut a ts.

    je suis un debutant ds le domaine de Programmation des µC. je programme depuis qq semaines et je suis coincé en ce momnt face a un pobleme qui tracace. j´aimerai avoir un eclaircissement.
    en fait je programme un regulateur de tension suivant l´algo ci dessous

    error= commande - reference
    somme_error= somme_error + error
    yp= kp * error
    yi= ki * Ta* somme_error
    y= yp + yi.
    ancien_error= error
    if(y < o)
    y=0 y_min
    if(y >4095)
    y= 4095

    ds un premier temps il etait question de limiter ´la grandeur de la partie Integral aussitot quelle atteind le max de y. et j´ai proced´´e ainsi

    yi= ki*Ta*somme_error
    yi_max=y_max -------> ki*Ta*somme_error=y_max ---->
    somme_error_max= y_max / ki*Ta

    if (somme_error < y_min)
    somme_erro=y_min
    else
    if (somme_erro > y_max)
    somme_erro=y_max

    le programme ne fonctionne pas bien. j´aimerai savoir si cette erreure peut provenir soit de mes bornes de limitation ou soit du fait que l´erreur prend parfois les valeur negatives?

    en cas d´erreure negative doit on faire une correction avant de faire d´autre calcul ou le microcontrolleur se charge de ts?
    j´aimerai vraimant savoir cmt sa se passe ds ce cas. une breve peut sauvé un frere en situation difficile.

    merci d´avance pr votre aide

    -----

  2. #2
    invite29971eb1

    Re : calcul a fair par le µC

    Salut,

    le plus simple serait que tu nous montres ton vrai code (avec la balise code) et que tu nous dises sur quel µC et quel compilateur ça tourne. Ca peut avoir une importance capitale

  3. #3
    invitee05a3fcc

    Re : calcul a fair par le µC

    Un p'tit schéma de ton µC et de l'alimentation serait un plus ....

  4. #4
    invite3d74c80f

    Re : calcul a fair par le µC

    slut ftorama,

    merci d´avance pr le reponse.
    en desous le code

    #define kita 200 // ki*ta*1000
    #define MAX (3159000/kita) // yMAX *1000
    #define MIN (2457000/kita) // yMin*1000
    #define kp 1600

    long int summeError_nor=0;
    long int summeError; // Summe der Reglerabweichung
    long int y_nor=0x15F00;
    extern int y; // Stellglied auf Nennwert initialisiet
    int error; // aktuelle Reglerabweichung
    int yp; // P_Anteil
    long int yi; // I-Anteil
    int yd; // D_Anteil
    long int yp_nor;
    long int yi_nor;
    long int error_nor;

    int PID_Berechnung( int x, int w)
    {

    long int x_nor;
    long int w_nor;

    x_nor= (x * 1000); // normaliser la commande
    w_nor= (w * 1000); // normaliser la valeur de consigne
    error_nor =x_nor - w_nor ; // erreur normalisée
    summeError_nor=summeError_nor + error_nor; //somme des erreure normalisées

    /*++++++++++++++++++++++ linit partie Integral +++++++++++++++*/
    if(summeError_nor<MIN){ //70074
    summeError_nor=MIN;
    summeError=summeError_nor/1000;

    }
    else
    if(summeError > MAX){ //90096 MAX= ymax / Ki*Ta
    summeError=MAX;
    summeError=summeError_nor/1000;
    }
    else
    summeError=summeError /1000;

    yp_nor=(long) (kp * error_nor )/1000;
    yp=(yp_nor)/1000;
    yi_nor=(long)(kita * summeError_nor)/1000;
    yi=kita * summeError;


    y_nor= yp_nor + yi_nor ;
    y=y_nor/1000 ;

    y=(yp_nor+yi_nor)/1000;

    if(y<2458){
    y=2457; // limit min
    }
    else
    if(y>3159){
    y=3159; // limite maxi
    }


    return y; // retourner la valeur
    }


    l´intrrup arriv tte les 1ms et ce cette partie a la prioritá

    __irq void IRQ_Handler(void) // Interrupt alle 1ms

    {
    if((IRQSTA & RTOS_TIMER_BIT) !=0) // fragen nach der Quelle des Interrupt
    {
    T0CLRI= 0; // Timer0 clearen
    ADCCON = 0x6A0; // single-ended Mode, start konv.
    ADCCP=0; // kanal 0 für
    ADCCON = 0x6A3; // software conv., single-ended, Konversion. starten
    while (!ADCSTA){};
    x_value = (ADCDAT >> 16);

    ADCCON = 0x6A0; // single-ended Mode, start konv.
    ADCCP = 3; // Auswahl kanal 3 für Spannungssollwert ausgewählt
    ADCCON=0x6A3; // Software conv., single-ended, conv. starten
    while (!ADCSTA){};
    w_value= (ADCDAT >> 16);
    stell=PID_Berechnung(x_value, w_value); // Aufrufe PID_Berechnung Routine
    DAC1DAT=(stell << 16 ) ; // Ausgabe des analogen Stellglied

    T0_Tick++; // zähler nach jedem Timer Interrupt
    }

    return;
    }


    main()
    {
    init


    while(1){

    }

    ds la main je fais enore rien ,masi re´servé prun autre partie du programme.

    voila en bref cmt j´essaye de pogrammer la chose . je multiplie par 1000 pr travailler avc des nombre decimaux coe entier et j´injecte la virgula a la fin

    j´allais oublier

    j´utilise µvision4 de keil

    ADuC7020 c´est le nom du µC

  5. A voir en vidéo sur Futura
  6. #5
    invite3d74c80f

    Re : calcul a fair par le µC

    slut DAUDET78

    j´utilise le ADuC7020 de analog devices. et je progra en c sous keil µvision
    le post anterieur detail un peu mon programme.

  7. #6
    invitee05a3fcc

    Re : calcul a fair par le µC

    Citation Envoyé par decharteau Voir le message
    le post anterieur detail un peu mon programme.
    Le programme, ce n'est pas mon domaine. Moi, c'est le hard qui m'intéresse, et donc le schéma.

  8. #7
    invite29971eb1

    Re : calcul a fair par le µC

    ppffiioouuu du commentaire, en allemand, en anglais, en français....

    tu as écrit ce code toi-même ou c'est un Frankenstein, une créature faite de bouts de code morts qui ne prend vie que dans les romans?

  9. #8
    invite3d74c80f

    Re : calcul a fair par le µC

    hello ftorama

    le code est ecri par moi mm, puisque je vis en Allmeagne je dois normalement l´ecrire en allemand. mais il arrive svt par oublie que je me retrouve entrain d´ecrire en francais ou en anglais si je ne connais pas le mot appropié en allemand. pr aujourd´hui le commentaire etait a 90% allemand et un 10%anglais qd je ne connais pas le bien le dire en allemand. j´ai du changer en francais puisque sur ce forum on echange en francais. j´ai certainement oublié de changé a certain endroit. c ´est pourquoi tu vas retrouver francais anglais allemand. si non il est entierement ecris par moi mm.
    merci et si tu peux aide moi je suis vraimant ds le besoin

  10. #9
    invite7b23d5a7

    Re : calcul a fair par le µC

    quelle est la taille max pour long int? tu regules ta propre alimentation?

    Je trouve que tu fait pas mal de chose dans ton interruption 1ms n'est il pas plus sain de récupérer ton echantillon via l'interruption et faire tout le reste en tache de fond?

    Je pense que tu devrais travailler entre tes 2 consignes (+ 20 pas toutes les ms (par exemples)) que de basculer d'une consigne à l'autre et la multiplié par 8...

    ne connaissant pas tes micros c'est quoi DAC1DAT

Discussions similaires

  1. Comment faire pour fair appél
    Par invite37e032b8 dans le forum Orientation avant le BAC
    Réponses: 5
    Dernier message: 06/06/2010, 20h55
  2. [TIPE] Calcul de la rugotisté par calcul interferentiel (Michelson)
    Par invite6cef25fd dans le forum TPE / TIPE et autres travaux
    Réponses: 2
    Dernier message: 25/03/2010, 18h40
  3. Fair un ampli 5.1 avec ce qu'on a ?
    Par Belnadifia dans le forum Électronique
    Réponses: 9
    Dernier message: 10/05/2008, 15h55
  4. comment fair air conditioner sur 12 V ?
    Par noam dans le forum Électronique
    Réponses: 1
    Dernier message: 07/10/2005, 17h06
  5. comment fair test sur Piles NiMH
    Par noam dans le forum Électronique
    Réponses: 0
    Dernier message: 19/07/2005, 17h49
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...