[Programmation] starter carburant(moteur pas a pas)
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

starter carburant(moteur pas a pas)



  1. #1
    moumenemou

    starter carburant(moteur pas a pas)


    ------

    Mon projet est le contrôle de starter carburant(moteur pas a pas)

    Je dois donner des commentaires sur la température du moteur et la tension des cts. La température du moteur varie de 0 à 40 degrés et la tension de cts varie de 0 à 3,5 V

    J'ai besoin de mapper ces valeurs à l'angle de la vanne qui est l'angle du moteur pas à pas. L'angle de démarrage du moteur pas à pas est de 15 degrés. J'ai besoin d'un angle maximal de 45 degrés qui est pour 0 degrés C et cts tension 3.5V. Pour la tension de cts 0 et la température = 40 degrés, j'ai besoin d'un angle de passage de 15 degrés.

    Donc, la soupape devrait fonctionner entre 15 et 45 degrés, de sorte que l'angle de rotation total requis est de 30 degrés.

    Le problème est de savoir comment contrôler une valeur qui est l'angle de rotation du stepper en fonction de deux valeurs, à savoir la tension et la température de cts?

    Dois-je utiliser si ... autrement si () des conditions comme

    Code C - [expand]
    Code:
    if(  (  (engine_temperature >= 0.0) && (engine_temperature < (ENGINE_WARM_TEMPERATURE / 3.0))) &&
                   (  (cts_voltage >= (CTS_V_HIGH / 3.0)) )  ) {
                   stepper_angle = 15.0;
              }
              else if(  (  (engine_temperature >= ((ENGINE_WARM_TEMPERATURE / 3.0) * 2.0)) && (engine_temperature < (ENGINE_WARM_TEMPERATURE / 3.0))  ) &&
                        (  (cts_voltage >= ((CTS_V_HIGH / 3.0) * 2.0)) && (cts_voltage < (CTS_V_HIGH / 3.0))  )  ) {
                   stepper_angle = 30.0;
              }
              else if(  (engine_temperature >= (ENGINE_WARM_TEMPERATURE)) &&
                        (  (cts_voltage >= 0) && (cts_voltage < (CTS_V_HIGH / 3.0))  )  ) {
                   stepper_angle = 45.0;
              }

    -----
    Dernière modification par Antoane ; 30/04/2017 à 15h44. Motif: Ajout balises code

  2. #2
    moumenemou

    Re : starter carburant(moteur pas a pas)

    1. Si je dois faire la simulation semblable à lire un monde alors ce qui devrait être l'angle d'ouverture ou de fermeture de la vanne?

    2. Comment effectuer une fonction qui permet de contrôler l'angle d'ouverture ou de fermeture de la vanne en fonction de soupape d'angle qui lui sont fournies en supposant angle est de type entier?

    3. Ou devrais-je utiliser microstepping?

  3. #3
    DAUDET78

    Re : starter carburant(moteur pas a pas)

    Citation Envoyé par moumenemou Voir le message
    Je dois donner des commentaires sur la température du moteur et la tension des cts. La température du moteur varie de 0 à 40 degrés et la tension de cts varie de 0 à 3,5 V
    Donc seul t'intéresse la tension sur la CTN qui est l'image de ta température
    Comment tu lis ta CTN ?
    Donc, la soupape devrait fonctionner entre 15 et 45 degrés, de sorte que l'angle de rotation total requis est de 30 degrés.
    Je ne connais pas l'effort à fournir, mais je verrais mieux un servo moteur
    Le problème est de savoir comment contrôler une valeur qui est l'angle de rotation du stepper en fonction de deux valeurs, à savoir la tension et la température de cts?
    La température, on s'en moque, c'est la tension de la CTN qui est intéressante pour toi !
    Tu utilises une LUT qui te donne le PWM pour commander le servo.
    Pour chaque tension de la CTN (donc la température) tu as la valeur du PWM (donc l'angle du servomoteur)
    J'aime pas le Grec

  4. #4
    moumenemou

    Re : starter carburant(moteur pas a pas)

    Citation Envoyé par DAUDET78 Voir le message
    Donc seul t'intéresse la tension sur la CTN qui est l'image de ta température
    Comment tu lis ta CTN ?
    Je ne connais pas l'effort à fournir, mais je verrais mieux un servo moteur
    La température, on s'en moque, c'est la tension de la CTN qui est intéressante pour toi !
    Tu utilises une LUT qui te donne le PWM pour commander le servo.
    Pour chaque tension de la CTN (donc la température) tu as la valeur du PWM (donc l'angle du servomoteur)
    non c'est pas un servo c'est moteur pas a pas

    Je vous enverrai le programme

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

    Re : starter carburant(moteur pas a pas)

    Citation Envoyé par moumenemou Voir le message
    non c'est pas un servo c'est moteur pas a pas
    Je te dis qu'il vaut mieux utiliser un servo !
    J'aime pas le Grec

  7. #6
    moumenemou

    Re : starter carburant(moteur pas a pas)

    Je n'ai aucune expérience avec Bi-Polar Stepper Motor Microstepping et j'ai donc utilisé la méthode normale de donner des impulsions d'étape. C'est le dernier code. Ça ne marche pas. Le moteur ne fonctionne pas. Quel est le problème ?

    J'ai utilisé cette fonction.

    Http://www.jetmore.org/john/blog/201...-distribution/
    Code:
    Code C - [expand]
    
    
    // LCD module connections
    sbit LCD_RS at RD0_bit;
    sbit LCD_EN at RD1_bit;
    sbit LCD_D4 at RD2_bit;
    sbit LCD_D5 at RD3_bit;
    sbit LCD_D6 at RD4_bit;
    sbit LCD_D7 at RD5_bit;
     
    sbit LCD_RS_Direction at TRISD0_bit;
    sbit LCD_EN_Direction at TRISD1_bit;
    sbit LCD_D4_Direction at TRISD2_bit;
    sbit LCD_D5_Direction at TRISD3_bit;
    sbit LCD_D6_Direction at TRISD4_bit;
    sbit LCD_D7_Direction at TRISD5_bit;
    // End LCD module connections
     
    #define ADC_0_REF 5.0
    #define ADC_1_REF 500.0
     
    #define ADC_RESOLUTION 1023.0
     
    #define ENGINE_COLD_START_TEMPERATURE  0.2
    #define ENGINE_WARM_TEMPERATURE       40.0
     
    #define CTS_V_LOW  0.2
    #define CTS_V_HIGH 3.9
     
    #define ENGINE_COLD 1
    #define ENGINE_WARM 0
     
    #define IACV_PORT PORTB
     
    #define STEP_SIZE 15.0
     
    #define NO_ROTATION 0
    #define CCW         1
    #define CW          2
     
    #define MIN_ANGLE 45.0
    #define MAX_ANGLE 720.0
     
    const code char txt1[] = "T: ";
    const code char txt2[] = "V: ";
    const code char txt3[] = "             ";
     
    char txt[23];
    const char character[] = {6,9,9,6,0,0,0,0};
    unsigned char stepper_motor_sequence[4] = {0x80, 0x20, 0x40, 0x10};
    unsigned char engine_state_counter = 0;
    char i = 0, j = 0;
    unsigned char my_flags = 0;
    long int raw_adc_value[2] = {0, 0};
    long int previous_raw_adc_value[2] = {200, 10};
    double engine_temperature = 0.0;
    double cts_voltage = 0.0;
    double angle_based_on_engine_temperature = 0.0;
    double angle_based_on_cts_voltage = 0.0;
    char stepper_angle = 0;
    char previous_stepper_angle = 0;
    unsigned char no_of_steps_required = 0;
    char direction_of_steps = 0;
     
    char *CopyConst2Ram(char *dest, const code char *src){
        char *d;
     
        d = dest;
     
        for(;*dest++ = *src++;);
     
        return d;
    }
     
    void CustomChar(char pos_row, char pos_char) {
        char i;
        
        Lcd_Cmd(64);
        
        for (i = 0; i <= 7; i++) Lcd_Chr_CP(character[i]);
     
        Lcd_Chr(pos_row, pos_char, 0);
    }
     
    double map(double x, double in_min, double in_max, double out_min, double out_max) {
        return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
    }
     
    unsigned char Get_No_Of_Steps_Required(double angle) {
        return (unsigned char)((unsigned int)angle / STEP_SIZE);
    }
     
    char Get_Required_Direction(double angle, double previous_angle) {
        if(angle < previous_angle) {
            return 1;
        }
        else if(angle > previous_angle) {
            return 2;
        }
        if(angle == previous_angle) {
            return 0;
        }
    }
     
    void main() {
     
        CMCON = 0x07;
        
        ADCON0 = 0x40;
        ADCON1 = 0x84;
        
        TRISA = 0x03;
        TRISB = 0x00;
        TRISC = 0x00;
        TRISD = 0x00;
        TRISE = 0x00;
        
        PORTA = 0x00;
        PORTB = 0x00;
        PORTC = 0x00;
        PORTD = 0x00;
        PORTE = 0x00;
        
        Delay_ms(200);
        
        LCD_Init();
        LCD_Cmd(_LCD_CURSOR_OFF);
        LCD_Cmd(_LCD_CLEAR);
        
        LCD_Out(1,1,CopyConst2Ram(txt, txt1));
        LCD_Out(2,1,CopyConst2Ram(txt, txt2));
     
        while(1) {
     
     
              raw_adc_value[0] = (long int)ADC_Read(0);
              Delay_us(20);
              raw_adc_value[1] = (long int)ADC_Read(1);
              Delay_us(20);
              
              if((previous_raw_adc_value[0] != raw_adc_value[0]) || (previous_raw_adc_value[1] != raw_adc_value[1])) {
                  cts_voltage = (double)raw_adc_value[0] * ADC_0_REF / ADC_RESOLUTION;
                  engine_temperature = (double)raw_adc_value[1] * ADC_1_REF / ADC_RESOLUTION;
     
                  LCD_Out(2,4,CopyConst2Ram(txt, txt3));
                  FloatToStr(cts_voltage, txt);
                  strcat(txt, "V");
                  LCD_Out(2,4,txt);
                  
                  LCD_Out(1,4,CopyConst2Ram(txt, txt3));
                  FloatToStr_FixLen(engine_temperature, txt, 5);
                  LCD_Out(1,4,txt);
                  CustomChar(1,9);
                  LCD_Out(1,10,"C");
     
                  angle_based_on_engine_temperature = map(engine_temperature, ENGINE_COLD_START_TEMPERATURE, 
                  ENGINE_WARM_TEMPERATURE, MAX_ANGLE, MIN_ANGLE);
                  angle_based_on_cts_voltage = map(cts_voltage, CTS_V_LOW, CTS_V_HIGH, MIN_ANGLE, MAX_ANGLE);
     
                  if(angle_based_on_engine_temperature == angle_based_on_cts_voltage) {
                      stepper_angle = angle_based_on_engine_temperature;
                  }
                  
                  if(previous_stepper_angle != stepper_angle) {
                      no_of_steps_required = Get_No_Of_Steps_Required(stepper_angle);
                      direction_of_steps = Get_Required_Direction(stepper_angle, previous_stepper_angle);
                      
                      switch(direction_of_steps) {
                            case 0:
                                   break;
                            case 1:
                                   for(i = 0; i < no_of_steps_required; i++) {
                                       IACV_PORT = (IACV_PORT & 0x0F) | stepper_motor_sequence[j--];
                                       Delay_ms(100);
                                       j = abs(j);
                                       j = j % 4;
                                   }
                                   break;
                            case 2:
                                   for(i = 0; i < no_of_steps_required; i++) {
                                       IACV_PORT = (IACV_PORT & 0x0F) | stepper_motor_sequence[j++];
                                       Delay_ms(100);
                                       j = j % 4;
                                   }
                                   break;
                      };
     
                      
                      previous_stepper_angle = stepper_angle;
                  }
                  
                  IntToStr((int)stepper_angle, txt);
                  Ltrim(txt);
                  LCD_Out(1,15,txt);
                  
                  previous_raw_adc_value[0] = raw_adc_value[0];
                  previous_raw_adc_value[1] = raw_adc_value[1];
              }
        }
    }

  8. #7
    DAUDET78

    Re : starter carburant(moteur pas a pas)

    Citation Envoyé par moumenemou Voir le message
    Le moteur ne fonctionne pas. Quel est le problème ?
    On s'en moque ! Faut pas utiliser un pas à pas .....
    J'aime pas le Grec

  9. #8
    moumenemou

    Re : starter carburant(moteur pas a pas)

    [QUOTE=DAUDET78;5893387]Je te dis qu'il vaut mieux utiliser un servo !


    Mais il n'y a pas de starter dans le moteur servo
    starter=moteur pas a pas

  10. #9
    moumenemou

    Re : starter carburant(moteur pas a pas)

    Citation Envoyé par DAUDET78 Voir le message
    On s'en moque ! Faut pas utiliser un pas à pas .....
    prsq mon projet dans university c'est command dun moteur pas a pas

  11. #10
    DAUDET78

    Re : starter carburant(moteur pas a pas)

    Citation Envoyé par moumenemou Voir le message
    prsq mon projet dans university c'est command dun moteur pas a pas
    Donc la mauvaise solution pour le bon motif ?
    Une simple question :
    Comment tu connais la position du pas à pas quand tu mets sous tension le moteur ?
    J'aime pas le Grec

  12. #11
    moumenemou

    Re : starter carburant(moteur pas a pas)

    Modifier:

    C'est le nouveau code.

    Code:
    Code C 
    
    switch(direction_of_steps) {
                            case 0:
                                   break;
                            case 1:
                                   for(i = 0; i < no_of_steps_required; i++) {
                                       IACV_PORT = (IACV_PORT & 0x0F) | stepper_motor_sequence[j--];
                                       Delay_ms(100);
                                       j = j - 2;
                                       j = abs(j);
                                       j = j % 4;
                                   }
                                   break;
                            case 2:
                                   for(i = 0; i < no_of_steps_required; i++) {
                                       IACV_PORT = (IACV_PORT & 0x0F) | stepper_motor_sequence[j++];
                                       Delay_ms(100);
                                       j = j % 4;
                                   }
                                   break;
                      };

  13. #12
    moumenemou

    Re : starter carburant(moteur pas a pas)

    Le bug n'est pas encore corrigé. Pour la position, le MCU se souviendra de l'angle de passage précédent.

  14. #13
    moumenemou

    Re : starter carburant(moteur pas a pas)

    ok D'accord. Correction du bug.

  15. #14
    moumenemou

    Re : starter carburant(moteur pas a pas)

    Modifier 2:

    Correction d'un bug.

    Code:
    for(i = 0; i < no_of_steps_required; i++) {
             j = j + 3;
             j = j % 4;
         }


    Je fixe le code. Tous les bugs sont corrigés, mais le moteur ne fonctionne pas.
    Dernière modification par moumenemou ; 30/04/2017 à 17h50.

  16. #15
    DAUDET78

    Re : starter carburant(moteur pas a pas)

    Citation Envoyé par moumenemou Voir le message
    ok D'accord. Correction du bug.
    C'est pas un bug, mais une erreur de conception !
    Quand tu coupes ton moteur, le MCU ne peut pas se souvenir de la dernière position ! Et ne viens pas me dire que tu stockes en EEPROM .....
    Si un gars vient manipuler la position du pas à pas manuellement ou si il perd accidentellement des pas, le MCU ne donnera jamais la bonne position ....

    Je voulais aussi te féliciter pour la quantité inimaginable de commentaire dans ton soft !
    Code:
              raw_adc_value[0] = (long int)ADC_Read(0);
              Delay_us(20);
              raw_adc_value[1] = (long int)ADC_Read(1);
              Delay_us(20);
    Ca correspond à quoi ces deux lectures ?
    J'aime pas le Grec

  17. #16
    moumenemou

    Re : starter carburant(moteur pas a pas)

    La partie eeprom n'est pas codée. Lorsque le moteur est éteint, le MCU sera toujours alimenté et il détectera le moteur éteignant et stockant l'angle de démarcation dans la mémoire et si le MCU est tourné puis est allumé puis il se souviendra de la position de démarcation.

  18. #17
    DAUDET78

    Re : starter carburant(moteur pas a pas)

    Citation Envoyé par moumenemou Voir le message
    La partie eeprom n'est pas codée. Lorsque le moteur est éteint, le MCU sera toujours alimenté et il détectera le moteur éteignant et stockant l'angle de démarcation dans la mémoire et si le MCU est tourné puis est allumé puis il se souviendra de la position de démarcation.
    Ca marche pas ... voir ma réponse #15
    J'aime pas le Grec

  19. #18
    moumenemou

    Re : starter carburant(moteur pas a pas)

    moteur a commencé à travailler. Avoir pour régler l'angle.

  20. #19
    DAUDET78

    Re : starter carburant(moteur pas a pas)

    Tu radotes ?
    J'aime pas le Grec

  21. #20
    moumenemou

    Re : starter carburant(moteur pas a pas)

    Oui, stepper a commencé à travailler dans Proteus

Discussions similaires

  1. Moteur hybride eau/carburant
    Par EauPure dans le forum Technologies
    Réponses: 78
    Dernier message: 31/01/2016, 11h33
  2. consommation de carburant moteur froid
    Par 42jerome dans le forum Environnement, développement durable et écologie
    Réponses: 18
    Dernier message: 11/05/2010, 15h19
  3. moteur Green ou Blue... relle economie de carburant ?
    Par christian54 dans le forum Environnement, développement durable et écologie
    Réponses: 0
    Dernier message: 21/05/2009, 19h29
  4. carburant de moteur fusée?
    Par invite2d16ad19 dans le forum Astronautique
    Réponses: 44
    Dernier message: 27/02/2005, 19h39
  5. Coût du carburant (moteur chimique)
    Par invite7856b5ed dans le forum Astronautique
    Réponses: 7
    Dernier message: 20/01/2005, 14h55
Découvrez nos comparatifs produits sur l'informatique et les technologies.