Pages perso Sam BO

 
 
PELLE MECANIQUE RC
Voici une pelle mecanique RC (base de jouet BRUDER) modifiée afin de la rendre totalement commandable depuis ma télécommande FC16 modifiée en 2.4ghz.

Elle est actionnée par des servos montées sur "foret beton" dans un tube laiton ou acier.
Des fins de course sont mis en place pour eviter des faire forcer les servos, le tout commandé par un variateur maison a base de pic 12f683.

Les cartes des servos sont toutes supprimées, car la position du neutre très difficile à régler.
En faisant une carte composée de 6 variateurs le problème est resolu et de plus le variateur gère les fin de course, c'està dire lorsque le fin de course de fermeture est activé alors je coupe le pwm du moteur dans le sens de fermeture et en autorisant l'ouverture .

Voici la programmation en basic du pic 12f683:


program variateur_pelle_pic_12f683

dim compteur as word      'compteur byte sur 255
dim cycle as word         'cycle byte sur 255
dim fin_cycle as word
dim valeur as byte     'fin_cycle byte sur 255
dim valeur1 as byte     'fin_cycle byte sur 255
dim valeur2 as byte     'fin_cycle byte sur 255
dim commande as word
dim commande_ar as word
dim commande_av as word
dim commande_gen as word

sub procedure interrupt
inc(compteur)
tmr0=cycle
intcon=%10101000           'gie enable(bit7) peie disable(6) toie enable(5)
end sub                    'inte disable(4) gpie enable(3) toif disable(2)
                           'intf disable(1) gpif disable (0)
sub procedure init_main()
option_reg=%10011000
CMCON0 = 0x07         ' modle comparateur sur off
ANSEL    = 0
TRISIO = %00011001         ' gp0,gp3,gp4 en entrées
compteur=0
cycle=246
tmr0=cycle
fin_cycle=0
intcon=%10101000
ccp1con=%00111100   'ccp1con: pwm mode
gpio=0 ' gpio a 0
PWM1_Init(5000) ' PWM1 module a 5KHz


end sub
sub procedure lecture()
    while gpio.0=0
          if compteur>8000 then
          pwm1_set_duty(0)
          end if
    wend
    compteur=0
    while gpio.0=1
    wend
compteur=(compteur-30)

fin_cycle=(compteur*2)
if (fin_cycle<255)then
   if (fin_cycle>0) then
   commande=fin_cycle
   else
   commande=255
   end if
else
commande=255
end if
end sub

main:
init_main()
PWM1_Start()

while true
lecture()
'if commande<128 then
'commande_ar=(((127-commande)*2)-4) 'mise a l echelle 8 bits marche arriere
'else commande_ar=0
'end if
'if commande>127 then
'commande_av=(((commande-128)*2)+3) 'mise a l echelle 8 bits marche avant
'else commande_av=0
'end if
'if (commande_ar<25) then 'bande morte pour le neutre marche arriere
'commande_ar=0
'end if
'if commande_av<25 then 'bande morte pour le neutre marche avant
'commande_av=0
'end if
'if commande_ar=0 then
'gpio.1=0
'commande_gen=commande_av
'else
'gpio.1=1
'commande_gen=commande_ar
'end if
commande_gen=commande

PWM1_Set_Duty(commande_gen) ' Set current duty pour PWM1

wend
end.

Quelques pièces sont réalisées à l'aide de ma fraiseuse cnc (rotation tourelle, quelques pièces du bras et interieur de la pelle.

Après quelques essais je me rends compte que le servo du bras principal ne développe pas une force suffisante pour creuser la terre, donc je vais rechercher une solution afin de'avoir du couple et une vitesse suffisante pour ce bras (recherche en cours).





 



Créer un site
Créer un site