使用的是STM32F103C8T6,电机驱动芯片是DRV8313,用来驱动云台电机。
现在的现象是电机可以正常调速旋转,但是驱动芯片和电机发热都比较严重,请问下如何可以优化下。
附主程序代码:
int main(void)
{
short Acel[3];
short Gyro[3];
short Temp;
short dirx=0,diry=0,dirz=0,speedx=500,speedy=100,speedz=100;
Task_Delay[NumOfTask-1]= 1000;
SysTick_Init();
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;
LED_GPIO_Config();
USARTx_Config();
I2C_EE_Init();
MPU6050_Init();
Motor_Init();
Motor1_Run((mdir_t)diry,100);
Motor2_Run((mdir_t)dirz,100);
Motor1_Run((mdir_t)diry,0);
Motor2_Run((mdir_t)dirz,0);
while(1)
{
if(Task_Delay[0]==TASK_ENABLE)
{
LED1_TOGGLE;
Task_Delay[0]=1000;
}
if(Task_Delay[1]==0)
{
MPU6050ReadAcc(Acel);
MPU6050ReadGyro(Gyro);
MPU6050_ReturnTemp(&Temp);
if(Acel[0]>-1000){
dirx=1;}
else {
dirx=0;}
if(Acel[1]>-1000){
diry=1;}
else {
diry=0;}
printf("¼ÓËٶȣºX:%8d Y:%8d Z:%8d",Acel[0],Acel[1],Acel[2]);
printf(" ÍÓÂÝÒÇ X:%8d Y:%8d Z:%8d",Gyro[0],Gyro[1],Gyro[2]);
printf(" ζÈ%d\r\n",Temp);
Task_Delay[1]=100;
}
if(Task_Delay[2]==0)
{
if(Acel[0]>-1000&&Acel[0]<1000){
speedx=0;
}
else {
speedx=500;
}
if(Acel[1]>-1000&&Acel[1]<1000){
speedy=0;
}
else {
speedy=500;
}
Task_Delay[2]= 1000;
}
if(Task_Delay[NumOfTask-1]==0)
{
Motor0_Run((mdir_t)dirx,speedx);
Motor1_Run((mdir_t)diry,speedy);
Task_Delay[NumOfTask-1]= 10;
}
}
}