Application langage C sur la gestion des axes robot en microprocesseur
Application langage C sur la gestion des axes robot en microprocesseur
Cet article propose en détaille une application angage C sur la gestion des axes robot en microprocesseur.
Chaque axe de commande est constitué d’un potentiomètre de 10Kohms, la transmission des informations est effectuée par module HF en modulation de fréquence
Vous pourrez télécharger le fichier au format zip il contient le code sources complet.
Extrait du code source :
#include "C:\Users\Clement\Desktop\TP Robot\main_robot.h"
unsigned int8 nbe_voie;
unsigned int16 time=0;
#int_EXT1
void EXT1_isr(void)
{
time =get_timer1();
set_timer1(0);
if ( time > 6250 )
{
nbe_voie=1;
}
else
{
nbe_voie++;
}
}
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_4);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_EXT1);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
set_timer1(0);
while(1)
{
switch (nbe_voie) {
case 1:
//printf("voie 1");
output_d(1);
break;
case 2:
//printf("voie 2");
output_d(2);
break;
case 3:
//printf("voie 3");
output_d(4);
break;
case 4:
//printf("voie 4");
output_d(8);
break;
case 5:
//printf("voie 5");
output_d(16);
break;
default:
//printf("mauvais choix");
output_d(0);
break; }
}
}
… … … …
#include "C:\Users\Clement\Desktop\TP Robot\Code gestion telecommande\teleradio.h"
//Prototypage des fonctions
void envoie_trame (unsigned int16 value_potard);
//Déclaration des variables
unsigned int16 value_pot_dep_h_b;
unsigned int16 value_pot_dep_g_d;
unsigned int16 value_pot_bras_m_d;
unsigned int16 value_pot_bras_g_d;
unsigned int16 value_pot_prehenseur;
void main()
{
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
while (1)
{
set_adc_channel( 0 );
delay_us (10);
value_pot_dep_h_b = read_adc();
//printf("valeur potard deplacement haut & bas : %lu \n", value_pot_dep_h_b);
set_adc_channel( 1 );
delay_us (10);
value_pot_dep_g_d = read_adc();
//printf("valeur potard deplacement gauche & droite : %lu \n", value_pot_dep_g_d);
set_adc_channel( 2 );
delay_us (10);
value_pot_bras_m_d = read_adc();
//printf("valeur potard bras monté & descente : %lu \n", value_pot_bras_m_d);
set_adc_channel( 3 );
delay_us (10);
value_pot_bras_g_d = read_adc();
//printf("valeur potard bras gauche & droite : %lu \n", value_pot_bras_g_d);
set_adc_channel( 4 );
delay_us (10);
value_pot_prehenseur = read_adc();
//printf("valeur potard prehenseur ouverture & fermeture : %lu \n", value_pot_prehenseur);
//Envoie des voies les une après les autres
envoie_trame(value_pot_dep_h_b);
envoie_trame(value_pot_dep_g_d);
envoie_trame(value_pot_bras_m_d);
envoie_trame(value_pot_bras_g_d);
envoie_trame(value_pot_prehenseur);
envoie_trame(0);
delay_ms (10);
}
}
void envoie_trame (unsigned int16 value_potard)
{
output_high(PIN_D0);
delay_us (500);
output_low(PIN_D0);
delay_us (500 + value_potard);
}