天天看點

機器人國術擂台---無差别組(三)電路接線

機器人國術擂台---無差别組(三)電路接線

做一份筆記,大佬勿噴。

作者:sumjess

注意:本部落格是以《2018年華北五省(市、自治區)大學生機器人大賽競賽規則》為基礎而寫的

一、子產品介紹:

1、光電開關(16個):

(1)圖檔:

機器人國術擂台---無差别組(三)電路接線
機器人國術擂台---無差别組(三)電路接線

(2)原理:

機器人國術擂台---無差别組(三)電路接線

(3)産品資訊:

機器人國術擂台---無差别組(三)電路接線

(4)注意事項:

機器人國術擂台---無差别組(三)電路接線

(5)測試函數片段:

             光電開關初始化:

#define   up_for_lift       GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)
#define   up_for_right      GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_2)     
#define   up_back_left      GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)
#define   up_back_right     GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)
#define   for_1             GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)
#define   for_2             GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)
#define   for_3             GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)
#define   back_1            GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)
#define   back_2            GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)
#define   left_1            GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)
#define   left_2            GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)
#define   right_1           GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)
#define   right_2           GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)
#define   for_lift          GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_0)
#define   for_right         GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1)
#define   back_lift         GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_2)
#define   back_right        GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)
#define   down_1            GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_4)
#define   down_2            GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)
#define   down_3            GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)


//光電開關初始化
void optoelect_switch()
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);   //使能A端口時鐘

  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;      
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;     //浮空輸入
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     //IO口速度為50MHz
  GPIO_Init(GPIOB, &GPIO_InitStructure);           

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;           
  GPIO_Init(GPIOC, &GPIO_InitStructure);             //浮空輸入 ,IO口速度為50MHz
}      

     測試主函數:

void GD_oled(void)
{
    int a;
    //鏟子
    a=up_for_lift;
    OLED_ShowNum( 0,0,a,1,12);
    a=up_for_right;
    OLED_ShowNum(18,0,a,1,12);
    up_back_left;
    OLED_ShowNum(36,0,a,1,12);
    a=up_back_right;
    OLED_ShowNum(54,0,a,1,12);
    
    //前
    a=for_1 ;
    OLED_ShowNum( 0,2,a,1,12);
    a=for_3;
    OLED_ShowNum(18,2,a,1,12);
    a=for_lift          ;
    OLED_ShowNum(36,2,a,1,12);
    a=for_right;
    OLED_ShowNum(54,2,a,1,12);
    
    //中
    a=left_1;
    OLED_ShowNum( 0,4,a,1,12);
    a=left_2;
    OLED_ShowNum(18,4,a,1,12);
    a=right_1;
    OLED_ShowNum(36,4,a,1,12);
    a=right_2;
    OLED_ShowNum(54,4,a,1,12);
    
    //後
    a=back_1;
    OLED_ShowNum( 0,6,a,1,12);
    a= back_2 ;
    OLED_ShowNum(18,6,a,1,12);
    a=back_lift;
    OLED_ShowNum(36,6,a,1,12);
    a= back_right;
    OLED_ShowNum(54,6,a,1,12);    
    
    delay_ms(800);//重新整理時間
    OLED_Clear();//清屏
    
}      

(6)擺放位置:

機器人國術擂台---無差别組(三)電路接線

2、電機驅動及電機:

電機和電機驅動我們均使用的是得科技術(淘寶店鋪)

(1)圖檔:

機器人國術擂台---無差别組(三)電路接線

(2)産品資訊:

  • 385電機,減速箱和電機尺寸和老款保持一緻,完美替代。
  • 扭矩将達到65kg.cm,将是老款納英特24V2200電機的五倍性能。
  • 采用雙滾珠軸承電機,更加順滑,壽命更加長,更加穩定。老款納英特24V2200電機采用普通軸承。
  • 齒輪都加厚、加強處理,完全杜絕斷齒,滑齒缺陷。
  • 減速比保持不變:依然是1:20。
  • 六角輸出軸采用軸承,老款是普通銅套,避免輸出軸重負載下卡死。
  • 初級齒輪采樣斜齒,更加靜音,同時避免上50000轉高速時候卡齒。
  • 堵轉電流76A左右

(3)注意事項:

☆☆☆☆☆使用直流電機驅動正轉過程中,應該先0(0%PWM)速100ms以上,等物流二極管續流後,再反轉。這樣可以避免瞬間反轉導緻的高壓高流,擊穿mos管。。。。(可不加)

☆☆☆☆☆PWM頻率必須高于1K以上,4K-20K都可以。(一定保證)

☆☆☆☆☆因為驅動半橋需要自舉生壓,PWM占空比必須小于98%。最好在95%以下。(一定保證)

1、電機電源接通,中間一定要通過開關來上電,不能直接電池插入,容易産生火花産生高壓,擊穿闆子。5V和GND各引出2路,友善2塊闆子組成四驅時接線。普通接一個就行。注意:如果單片機供電為3.3v,那麼使能端也将為3.3v

2、上電順序:可以驅動電源和右邊8P接口的5V一起上電。如果測試,而且不同時上電,那麼先上電+5V和GND,再上電電機電源。

3、5V和GND是控制器闆子給驅動闆供電,一定要接入。不要隻接了IN1-4,沒有接5V和GND。IN1和IN2控制左邊的驅動,IN3和IN4控制右邊的驅動。當IN1給PWM,IN2給0,即正轉,當IN1給0,IN2給PWM,即反轉。二邊都給0,或者給反方向速度就刹車。

4、驅動普通功率電機,一個電機驅動端子可以并聯接2個電機,這樣一塊驅動闆可以驅動4個電機。如果接大功率擂台電機,那麼盡量用2塊驅動闆,驅動4個電機,組成四驅。

(4)測試函數片段:

void speed_Configuration(void) 
{ 
        //**********電機驅動設定************//
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure ;
        GPIO_InitTypeDef GPIO_InitStructure;
 
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);  //使能GPIO外設和AFIO複用功能子產品時鐘  
        TIM_DeInit(TIM3);//初始化TIM1寄存器
       
        GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //Timer1完全重映射  TIM1_CH1->PE9 CH2->PE11 CH1->PE13 CH1->PE14 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; //TIM1_CH1  //設定該引腳為複用輸出功能,輸出TIM1 CH1的PWM脈沖波形 GPIOE.9
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //複用推挽輸出
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO                
//**************************************************************************
//     定時器1設定: 72分頻,頻率10KHz,向上計數,105是為了速度為100時,PWM占空比不會到100,友善電機驅動自舉生壓。一般PWM頻率大于1K,4-10K比較好。
//************************************************************************** 
    TIM_TimeBaseStructure.TIM_Period = 105-1;
    TIM_TimeBaseStructure.TIM_Prescaler = 71;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
 
// 主定時器T4為 PWM1 模式 
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 0;  
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC1Init(TIM3, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能的預裝載寄存器
    
    TIM_OCInitStructure.TIM_Pulse = 0; 
    TIM_OC2Init(TIM3, &TIM_OCInitStructure); 
    TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能的預裝載寄存器
 
 TIM_OCInitStructure.TIM_Pulse = 0; 
    TIM_OC3Init(TIM3, &TIM_OCInitStructure); 
    TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能的預裝載寄存器
 
 TIM_OCInitStructure.TIM_Pulse = 0; 
    TIM_OC4Init(TIM3, &TIM_OCInitStructure); 
    TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能的預裝載寄存器
    
    TIM_ARRPreloadConfig(TIM3, ENABLE); //使能定時器1
    TIM_Cmd(TIM3, ENABLE);
}
 
 
//2個PWM口控制一路電機。IN1給PWM,IN2給0,正轉;IN1給0,IN2給PWM,反轉。 
void Motor(u8 port, s8 speed)
{
 if(speed >= 0)
 {
        if(speed>100) speed=100;
        switch(port)
       {
            case 1:  
                TIM3->CCR1 =  speed;
                TIM3->CCR2 =  0;   
                 break;
           case 2:
                TIM3->CCR3 =  speed;
                TIM3->CCR4 =  0; 
                 break;      
   }
 } 
       else 
       {
            if(speed<-100) speed=-100;
           switch(port)
           {
                case 1:
                  TIM3->CCR1 =  0;
                  TIM3->CCR2 =  -speed; 
                  break;
               case 2:
                   TIM3->CCR3 =  0;
                   TIM3->CCR4 =  -speed;  
                    break;
             }
       }   

 

}      

二、接線方式:

1、光電開關(16個):

棕(紅)色:電源正極(+3.3V,或+5V); 藍色:電源負極(0V或GND); 黑(黃)色:開關信号輸出(接PLC、單片機或其它裝置的輸入端);

2、電機驅動:

三、整體接線方式: