version 0.0 : 20 Mai 2017
rev ......


PIC16F1847

BUT: Verifier un servomoteur de raio commande:

Commande d'un servomoteur Graupner JR-C507
Tension d'alimentation : 4.8 à 6V
Couple : 39 N.cm = 3.98 kg.cm
Consommation électrique à vide : 8mA
Consommation électrique max : 720mA
Vitesse angulaire: 0.17s/40°
Débattement : 2 x 45°
Poids : 40g
Dimension : 39x19x39mm
jaune = signal Noir=0V rouge=+4.8V


Le PIC 16F1847 :

en connectique Dip18
Utilisé avec Fosc Interne =8Mhz ( sans PLL)
Available RAM: 1008 [bytes], Available ROM: 8192 [bytes])


Pinout & schema (rikiki)


images/t_16F1847_pinout_Servo_Schem.gif

Hardware :




// Fonctionnement :
// le Timer2 est calé sur 20mS, en mode interruption
// à chaque IT, il arme le timer1 pour un delai de 1 à 2mS suivant la valeur contenue dans Cde_Servo
// et Met la pulse de commande Servo à 1 (pin RA4)
// le Timer1, en mode interruption , en fin de timing , remet à zero la pulse servo, et reste en standby
// tout se passe dans les interruptions.
// la valeur de Cde_Servo peut provenir , soit de la mesure ADC EA1 (pin 18)
// qui est moyenne sur 4 (ou 8 ) valeurs , pour avoir une commande stable ( mais moins rapide)
// soit d'une commande Keyboard PC Terminal

// Theorie : Timer1 value= 64535 -> calé sur 1000µS , et avec Timer1 value = 63535 --> 2000µS
// Commande par POTAR (Potar=Potentiometre)
// le delta de valeur d'initialisation correspond à une gamme de 1 mS ( balaye donc de 1 à 2 mS)
// correspondant à la gamme , en points , de l'ADC 10 bits (1024 points), ici limité à 1000
// valeurs mesuree : 0 -> 1,004 mS 500 -> 1,500mS 1,004 -> 2,004 mS
// Pratical value , adjusted to get exactly 1,0 to 2,0 mS
// calibration 64545 au lieu de 64535 soit delta =10 pts / 64545 soit 0,015%
// Cde_Servo=64545- Average_T;
// Commandes via Keyboard :
// rajout traitement interruption UART RX :
// Permet le Rajout diverses options de commande
// mode 0 : par consigne Potar connecté sur EA1 (+Vref interne 4,096V) alim MCU =4,8 à 5V
// mode 1 : par valeur tapée au clavier KEY0 à KEY 1000 ( evolution pulse de 1 à 2mS)
// 3 position fixes , evoluant à une vitesse reglable par la coammnde
// DLY0 à DLY255 => permet de definir la valeur de reglage "Tempo" par pas de 1mS
// mode 2: par cde MINI valeur correspondnat à 1mS atteinte avec un pas evoluant toute les "Tempo" mS delay de boucle programme
// mode 3: par cde CENTRE valeur correspondnat à 1,5mS atteinte avec un pas evoluant toute les "Tempo" delay de boucle programmemS
// mode 4: par cde MAXI valeur correspondnat à 2mS atteinte avec un pas evoluant toute les "Tempo"delay de boucle programme mS

// mode BAVARD ou SILENCIEUX via cde VERBOSE=1 ou VERBOSE=0
// Attention : le mode bavard penalise le temps de reaction !
// le temps de reacftion en mode VERBOSE=0, DLY0 , POT .. est de l'ordre de 700mS pour aller entre MINI et MAX
// avec un moyennage de 8 mesures sur ADC RA1


Signal sur scope (Tektronix TDS2002C)

MINI CENTRE MAXI

Cette pulse se repete toutes les 20mS ( via Timer2 interrupt)




sur le terminal RS232 :






Le projet MikroC :

16F1847_ADC_Test_Servo_170521.zip
source MikroC:
16F1847_UART_ADC_Test_Servo_JR_C507_170520.c


paulfjujo@free.fr


../common/GIF/LTC1286p.jpg



Retour à l'index general