2019年4月14日 星期日

Rx62t實作: SG-60 伺服馬達 PWM 控制

目錄:

1.PDG2設定

2.接線

3.程式

1.PDG2設定如下:

1.先設定MTU3_3
Mode1,設定TGRD為Cycle 的暫存器 ,
system clock/256,Rising edge,Time operating period=20ms



















設定 TGRA 初始值 470(1.5ms,90度),
 初始值hight,low output compare

















波形圖

















UART 使用 SCI2 (詳細請看UART 設定的文章)



















2.接線


HC-05的TX ---->PB6




SG-90 橘色------>P33





3.程式

概述:手機連藍芽,控制伺服馬達,0度~180度。

int Set_SG_angle(int angle); //設定馬達角度的副函數 
char rx;
int i=0,j;
unsigned int normal_angle[180]; //把本來 140->0度   800->180度做量化 
void main(void)
{
R_PG_Clock_Set();
//UART
R_PG_SCI_Set_C2();
//LED
R_PG_IO_PORT_Set_P3();
//LED SET DARK
R_PG_IO_PORT_Write_P30(1);
//MTU FOR PWM
R_PG_Timer_Set_MTU_U0_C3();
//MTU Start count
R_PG_Timer_StartCount_MTU_U0_C3();
R_PG_SCI_StartReceiving_C2(&rx,1);
//形成量化舉證
for(j=0;j<180;j++)
normal_angle[j]=0.666666*j+(140+3*j);
normal_angle[0]=140;
normal_angle[179]=800;
while(1){
if(rx=='O'){
Set_SG_angle(0);
rx=0;
}
else if(rx=='F'){
Set_SG_angle(180);
rx=0;
}
}//While
}//end

//Rx中斷 
Sci2ReFunc()
{R_PG_SCI_StartReceiving_C2(&rx,1);}

//設定角度副函數 
Set_SG_angle(int angle)
{
//angle= 0~180
if(angle==180)
angle=179;
//改變TGR的數值 查表 
R_PG_Timer_SetTGR_A_MTU_U0_C3(normal_angle[angle]);
}

沒有留言:

張貼留言