Ynt: TB6612fn

Başlatan bbs2006, 28 Aralık 2015, 22:13:22

bbs2006

Merhaba
Çizgi izleyen robot yaptım. Sürücü devresi olarak tb6612fn kullandım. devreyi çalıştırdığımız zaman sadece bir tarafında ki motor çalışıyor diğer motor çalışmıyor. entegreyi değiştirdiğimiz zaman yine aynı problem var.

yardımlarınızı bekliyorum.




mesaj birleştirme:: 28 Aralık 2015, 22:14:50




z

Sarı çizmeli ehmet ağa.

Madem 2 giriş var. Giriş sinyallerini çaprazla.

Çalışan kanal çalışmaz, çalışmayan kanal çalışır hale geliyorsa demekki sinyallerinde sorun var.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

bbs2006

verdiğim devre şemasında hata görünüyo rmu.

ankyra

programında hata olabilir, donanımda hata olabilir (devreyi basarken açık- kısa devre olmuş olabilir, soğuk lehim vs ), kullandığın denetleyicinin özelliklerinden (mesela açık kollektör vb) olabilir. devrende hata görünmüyor bana göre. benzer bir devre kurup çalıştırmıştım. z hocanın dediği gibi motor A girişlerini motor B ile değiştirip deneyebilirsin. isiste devreyi kurup simule edip çıkışlarını inceleyebilirsin. avo ile devre takibi yapabilirsin. pic i çıkarıp sürücünü manuel sürebilirsin vs...

dijital devre, ayar gayar bozukluğu olmaz, yeterince uğraşırsan kesin çalışır.

bc_esd

 tb6612fng yi yıllardır kulandım. bir motor çalışıyor diğeri çalışmıyorsa ;

   -- çalışmayan motora ait bağlantılarda hata olabilir.

    -- tb6612fng'ye yanlışlıkla zarar vermiş olabilirsiniz. çünkü bozuluğu zamanda tek kanal çalışıp tek kanal çalışmadığı durumlar olabiliyor.

    -- programda hata olmuş olabilir. (ama bir kanal çalıştığına göre program hatası düşük bir ihtimal gibi duruyor, ama yine de kontrol etmekte fayda var)
       program için çalışmayan motorun pwm kısmını kontrol etmekte fayda var. kullandığınız şekilden gördüğüm kadarıyla 18f4550 kullanıyorsunuz.  standart iki kanal pwm i var mı ? benim bildiğim iki pwm kanalı birbirinden farklı özellikte , bu nedenle de çalışmıyor olabilir.daha önce 18f4550 ile pwm uygulaması yapmadığım için net birşey söyleyemeyeceğim. ama pwm kanallarının özelliklerini tekrar bir gözden geçirin



bc_esd



18f4550 de iki tür pwm var.
1- standard CCP module ------->>CCP2 RB3 pini
2-Enhanced PWM Mode-------->> CCP1 RC2 pini

ccp2 standart pwm mode çalışıyor. ancak ccp1 Enhanced PWM Mode çalışıyor. bu nedenle her iki pwm ayarı farklı olmalı.
datasheette sayfa150'ye bakarsanız Enhanced PWM Mode çalışması anlatılıyor.  16.3 Standard PWM Mode başlığı altında "note" kısmında Enhanced PWM'in nasıl standart pwm mode çalıştırılacağı anlatılmış. hata büyük ihtimalle burada.

bbs2006

Ben c portındaki pwm kullandım. yazılımı yüklüyorum. Bakabilirseniz sevinirim.
// 2015-2016 Robot yılı için Robot Yarışmalarına Katılım (21.11.2015)
#include <18f4550.h>
#fuses hs,nowdt,noprotect
#use delay(clock=20000000)
#define sol1   pin_d0          //19 nolu pin   pin_b0   yeşil led
#define sol2   pin_d1          //20 nolu pin   pin_b1   yeşil led    
#define sol3   pin_d2          //21 nolu pin   pin_b2   yeşil led
#define orts1  pin_d3          //22 nolu pin   pin_b3   beyaz led
#define orts2  pin_d4          //27 nolu pin   pin_b4   beyaz led
#define sag1   pin_d5          //28 nolu pin   pin_b5   kırmızı led
#define sag2   pin_d6          //29 nolu pin   pin_b6   kırmızı led 
#define sag3   pin_d7          //30 nolu pin   pin_b7   kırmızı led
#define sagm_in1   pin_c5      //24 nolu pin  sürücü devre ain1   sag motor için
#define sagm_in2   pin_c4      //23 nolu pin  sürücü devre ain2   sag motor için
#define solm_in1   pin_c6      //25 nolu pin  sürücü devre bin1   sol motor için 
#define solm_in2   pin_c7      //26 nolu pin  sürücü devre bin2   sol motor için 
#define PWM_A      pin_c2      //17 nolu pin  sag motor pwm girişi  
#define PWM_B      pin_c1      //16 nolu pin  sol motor pwm için
#define stdby      pin_c0 
// değişken tanımlaması yapılıyor.

int oku_sen;                 // okunan sensör bilgisi   

int Sag_motor,Sol_motor;



void motor_surme(){
          
                     Output_high(sagm_in1);             // sürücü 1. giriş H
                     Output_low(sagm_in2);              // sürücü 2. giriş L
                     Output_high(solm_in1);             // sürücü 1. giriş H
                     output_low(solm_in2);              // sürücü 2. giriş L
return;}


void sag_keskin(){
                     Output_high(sagm_in2);             // sürücü 2. giriş H
                     Output_low(sagm_in1);              // sürücü 1. giriş L
                     Output_high(solm_in1);             // sürücü 1. giriş H
                     output_low(solm_in2);              // sürücü 2. giriş L
return;}

void sola_keskin(){
                     Output_low(sagm_in2);             // sürücü 2. giriş l
                     Output_high(sagm_in1);            // sürücü 1. giriş H
                     Output_low(solm_in1);             // sürücü 1. giriş L
                     output_high(solm_in2);            // sürücü 2. giriş H
return;}


void main(){               // Ana fonksiyon.
setup_ccp1(ccp_pwm);       //sag motor için kullanılacak
setup_ccp2(ccp_pwm);       //sol motor için kullanılacak

   setup_timer_2(T2_DIV_BY_4,124,4);     //Timer2 ayarları yapılıyor.
                                          //zaman=0.0001  Fr=10 Khz.  
                                          
                                          
output_high(stdby);        //motor sürücü entegresi stanby  HIGH olmalı.                                     
                                          
while(True){

oku_sen=input_d();        // d portundan sensör degerleri okunup oku_sen ata.

switch(oku_sen)
      
      {
      
      case 192:              //saga keskin beyaz çizgi izleme   0b11000000
                     {
                    
                     output_b(0b00111111);
                     sag_keskin();
        //********************************************************            
           
       //*********************************************************              
                     
                     
                     set_pwm1_duty(1000);           // sag motor
                     set_pwm2_duty(1000);           //sol motor
                     
       //*********************************************************
                     
                     break;}           


                     
        case 224:               //saga keskin beyaz çizgi izleme  0b11100000
                     {
                     
                     output_b(0b00011111);
                     sag_keskin();
        //********************************************************            
          
                     
       //*********************************************************              
                     set_pwm1_duty(1000);           // sag motor 
                     set_pwm2_duty(1000);           //sol motor
                     
       //*********************************************************
              
                     break;
                     }
                     
      case 240:                //saga keskin  beyaz çizgi izleme  0b11110000
                     {
                    
                     output_b(0b00001111);
                     sag_keskin();
        //********************************************************            
           
       //*********************************************************              
                     set_pwm1_duty(1000);           // sag motor 
                     set_pwm2_duty(1000);           //sol motor
                     
       //*********************************************************
                 
                     
                     break;
                     }
                     
      case 254:                      //0b11111110
                     {
                     output_b(0b00000001);
                    
                     motor_surme();
        //********************************************************            
                                         
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(800);
                     
       //*********************************************************
                     
                     break;}           //Yol robotun sağında
                     
                     
                     
      case 252:                        // 0b11111100
                     {
                     output_b(0b00000011);
                   
                     motor_surme(); 
        //********************************************************            
                     
                     
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(850);
                     
       //*********************************************************
                     
                      break;}
                     
                     
      case 253:                           //  0b11111101
                     {
                     output_b(0b00000010);
                     motor_surme();
        //********************************************************            
                    
                     
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(750);
                     
       //*********************************************************
               
                     break;}
                     
                     
      case 249:                            //0b11111001
                     {
                     output_b(0b00000110);
                
                     motor_surme();
        //********************************************************            
                                          
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(700);
                     
       //**********************************************************
                
                     Break;}
                     
      case 251:                              //0b11111011
                     {
                     output_b(0b00000100);
               
                     motor_surme();
        //********************************************************            
                                         
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(600);
                     
       //*********************************************************
                     
                     Break;}
                     
              
      case 243:                              //0b11110011
                     {
                     output_b(0b00001100);
                     motor_surme();
        //********************************************************            
                                       
       //*********************************************************              
                     set_pwm1_duty(800);
                     set_pwm2_duty(600);
                     
       //*********************************************************
                     
          
                     Break;}
                     
     case 247:                           //0b11110111
                     {
                     output_b(0b00001000);
                 
                     motor_surme();
        //********************************************************            
                                        
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(950);
                     
       //*********************************************************
          
                     
                     Break;}
                     
     case 231:                      //Yol ortada      0b11100111
                    {
                     output_b(0b00011000);
                     motor_surme();
        //********************************************************            
                                      
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(1000);
                     
       //*********************************************************                  
                     Break;}
                    
     case 239:                         //0b11101111
                    {
                    output_b(0b00010000);
                    motor_surme();
        //********************************************************            
                                          
       //*********************************************************              
                     set_pwm1_duty(950);
                     set_pwm2_duty(1000);
                     
       //*********************************************************
        
                    Break;}
          
     case 207:                            //0b11001111
                    {
                      output_b(0b00110000);
                      motor_surme(); 
        //********************************************************            
        //*********************************************************              
                     set_pwm1_duty(900);
                     set_pwm2_duty(1000);
                     
       //*********************************************************
                
                    Break;}
     case 223:                                //0b11011111
                    {
                    output_b(0b00100000);
                    motor_surme(); 
                    
        //********************************************************            
                     
       //*********************************************************              
                     set_pwm1_duty(800);
                     set_pwm2_duty(1000);
                     
       //*********************************************************
                  
                    Break;}
     case 159:                                   //0b10011111
                    {
                    output_b(0b01100000);
                  
                    motor_surme();
        //********************************************************            
                    
                     
       //*********************************************************              
                     set_pwm1_duty(Sag_motor);
                     set_pwm2_duty(Sol_motor);
                     
       //*********************************************************
                  
                    Break;}
     case 191:                                     //0b10111111
                    {
                    output_b(0b01000000);
                 
                    motor_surme(); 
        //********************************************************            
                    
                     
       //*********************************************************              
                     set_pwm1_duty(700);
                     set_pwm2_duty(1000);
                     
       //*********************************************************
                 
                    Break;}
     case 63:                                        //0b00111111
                    {
                    output_b(0b11000000);
                 
                    motor_surme(); 
        //********************************************************            
                     
                     
       //*********************************************************              
                     set_pwm1_duty(750);
                     set_pwm2_duty(1000);
                     
       //*********************************************************
                    
                    Break;}
     case 127:                                          //0b01111111
                    {
                    output_high(pin_b7);
                   
                    motor_surme();
        //********************************************************            
                     
                     
       //*********************************************************              
                     set_pwm1_duty(700);
                     set_pwm2_duty(1000);
                     
       //*********************************************************
      
                    Break;}      //Yol robotun solunda
                    
      case 3:            //sola keskin           0b00000011
                    {
                    output_b(0b11111100);
                   
                    sola_keskin();
        //********************************************************            
                     
                     
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(1000);
                     
       //*********************************************************
      
                    Break;}      //Yol robotun solunda
     
      case 7:           // Sola Keskin           0b00000111
                    {
                    output_b(0b11111000);
                   
                    sola_keskin();
        //********************************************************            
                     
                     
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(1000);
                     
       //*********************************************************
      
                    Break;}      //Yol robotun solunda
     
      case 15:                      //0b00001111
                    {
                    output_b(0b11110000);
                   
                    sola_keskin();
        //********************************************************            
                     
                     
       //*********************************************************              
                     set_pwm1_duty(1000);
                     set_pwm2_duty(1000);
                     
       //*********************************************************
      
                    Break;}      //Yol robotun solunda
     
     
     
     
     
     
     
     
     
     case 255:                    //0b11111111
         {
         output_b(0b00000000);
         motor_surme();
         set_pwm1_duty(100);
         set_pwm2_duty(100);
         }
     default:{}
      }}}

bc_esd

#9
18f4550 ile tecrübem olmadığı için pwm kousunda yanlış bilgi vermişim kusura bakmayın. evet c1ve c2 pinleri standart pwm için kullanılabiliyor. gönderdiğiniz kodlar ccs c kodları olsa gerek , ccs c pek (eskiden kullanmıştım )kullanmadığım için şu an kodlar hakkında tam düzgün bir yorum yapamayacağım. ancak programınızda port yönlendirme TRISC=0X00 gibi bir satır göremedim . ccs c portlardaki giriş çıkış yönlendirmelerini  otomatik algılıyor mu?
örneğin 
#use FAST_IO(C)
 #use FAST_IO(D)
----------------------
--------------------
void main()
{
 
   SET_TRIS_C(0x00);
   SET_TRIS_D(0x00);
--------------------------
--------------------
}   



gibi satırları programınıza eklemeniz gerekmiyor mu?

ayrıca  programın hepsini birden yükleyeceğinize önce sabit bir pwm değeri ile her iki motoru deneyin. motorları tam istediğiniz gibi çalıştırdıktan sonra programın geri kalan kısmını deneyin.

ve OSC  ve sigorta ayarlarınız doğru mu?

örneğin programınızdaki osc ve sigorta ayarları ile sadece bir ledi 1sn aralıkla yakıp söndürebiliyormusunuz ?

programlarınızın başlangıçlarına led söndürüp yakmayı eklerseniz ve donanımda led in yanıp söndüğünü görürseniz en azından konfigürasyon ayarlarının doğru yapıldığını ve herşeyin yolunda olduğunu anlamış olursunuz. ondan sonra diğer kısımlara geçersiniz. (belki yapıyorsunuzdur ama hatırlatmak istedim sadece )


bbs2006

gönderdiğim kodlara bir bakabilir misiniz. proteusta çalışıyor görünüyor.

pax

#11
Devrenizde  hata olabilir. Port yönlendirmeleri göremedim kodlarda

bc_esd

Alıntı yapılan: bbs2006 - 29 Aralık 2015, 20:47:28
gönderdiğim kodlara bir bakabilir misiniz. proteusta çalışıyor görünüyor.

kodlarla ilgili yorum yaptım ama görmediniz galiba . sizin son yorumunuzun üstünde hemen.

bbs2006

Ben 18f4550  pic yerine 18f452 kullandım.  Ve bütün motorlar çalışıyor. Kısaca diğer piçin pwm özelliğini ayarlaması gerekiyor. Aynı yazılımıkullandım. Her şey şiçin  teşekkürler.

aliveli

18f4550 'de C4 ve C5 sadece input olarak kullanılabiliyor bu nedenle sağ motorun çalışmadı.