void initGirouette(void){ TIM_SERVO=TIM4; voie=3; // initialisation des broches pour la lecture en mode floating input Port_IO_Init_InputPull(GPIOA, 5); // Index Port_IO_Init_Input(GPIOA, 6); // A Port_IO_Init_Input(GPIOA, 7); // B // configuration du timer pour la position (angle) de la girouette // on multiplie par quatre car il y a 4 cas différents où le timer s'incrémente Timer_Compare_Count(360*4, TIM3); // configuration de la mise à jour du servo-moteur de la voile // met à jour la position de la voile à chaque période // enable SysTick SysTick->CTRL |= SysTick_CTRL_ENABLE; // enable interruption SysTick->CTRL |= SysTick_CTRL_TICKINT; Systick_Prio_IT(6, UpdateGrandeVoile); // toutes les 10ms Systick_Period(10000); // init the PWM Port_IO_Init_Alt_Output( GPIOB, 8); Timer_1234_PWM_Init(TIM_SERVO, tempsPWM, 0.87f, 1, voie); Timer_Run(TIM_SERVO); }
int main (void) { alerte_roulis=0; alerte_batterie=0; CLOCK_Configure(); /*###################################################### CONFIGURATION DES ENTREES/SORTIES ########################################################*/ //configuration GPIOA floating input port 5, 6 et 7 //(voie I & A & B) pour la girouette Port_IO_Init_Input(GPIOA, 5); Port_IO_Init_Input(GPIOA, 6); Port_IO_Init_Input(GPIOA, 7); //Config Servo-moteur Port_IO_Init_AF_Output ( GPIOA, 8); //Config Moteur-CC Port_IO_Init_AF_Output( GPIOA, 1); //PWM moteur cc Port_IO_Init_Output( GPIOA, 2); //sens du moteur cc //Config Récepteur RF Port_IO_Init_Input( GPIOB, 6); //Récepteur RF CH1 //Config liaison HF Port_IO_Init_AF_Output (GPIOA, 9); //USART : liaison HF Port_IO_Init_Output(GPIOA, 11); //TX_ENABLE //Config ADC Port_IO_Init_Analog_Input(GPIOC, Y_AXIS_CHANNEL); Port_IO_Init_Analog_Input(GPIOC, BATTERY_CHANNEL); /*###################################################### CONFIGURATION DES TIMERS ########################################################*/ //Enable clock Timer 3 Enable_CLK_Timer1234(TIM3); //init du codeur incrémental Init_Codeur(TIM3, 5); //configuration pour lire les impulsions du récepteur RF Timer_Init_PWM_Input(TIM4, 1, 20000); //Servo Moteur Timer_1234_Init(TIM1,20000); config_pwm (TIM1, 1, 5); // config TIM1 CH1 //Moteur CC (PWM) Timer_1234_Init(TIM2, 52); config_pwm(TIM2, 2,0); /*###################################################### CONFIGURATION DE L'USART ########################################################*/ //Config UART Config_UART_Projet_Bateau(USART1); Port_IO_Set( GPIOA, 11); /*###################################################### CONFIGURATION DES ADCs ########################################################*/ //Config Accéléromètre et niveau batterie power_ADC(ADC1); power_ADC(ADC2); config_adc_single_channel(ADC1, Y_AXIS_CHANNEL); config_adc_single_channel(ADC2, BATTERY_CHANNEL); /*###################################################### ACTIVATION DES INTERRUPTIONS ########################################################*/ //Recepteur RF & Moteur_CC Timer_Active_IT(TIM4,5, 2,notreTIM4_IRQHandler); //Accelerometre & Batterie Active_IT_ADC(ADC1, 1, &ADC_IT);//Accelerometre Active_IT_ADC(ADC2, 1, &ADC_IT);//Batterie Timer_Active_IT(TIM1, 99, 0, &Timer_IT);//f_s ADCs while(1) { alpha = lire_alpha(); //angle de la girouette Convert_alpha_DC(alpha,alerte_roulis); // le bras varie entre 0 et 90 deg // valeur correspondant a un bras a 0 deg (5%) // valeur correspondant a un bras a 90 deg (10%) // quand le bras est a 90 deg les voiles sont a 0 deg // quand le bras est a 0 deg les voiles sont a 90 deg d'amplitude // et le vent decide du signe de l'angle de la voile }; }