pwm控制电机不能反转

2019-07-20 02:52发布

写了一个PWM控制L298N的程序  能正转但是不能反转 而且用了LCDshowstring这个函数电机直接无法转 求助
int main(void)
{
          u8 a[400];
          int i=0;
          u8 key;
    Motor_12_Config();
    u16 pwmval=0;  
    HAL_Init();                     //3õê¼»ˉHAL¿a   
    Stm32_Clock_Init(360,25,2,8);   //éèÖÃê±Öó,180Mhz
    delay_init(180);                //3õê¼»ˉÑóê±oˉêy
    uart_init(115200);              //3õê¼»ˉUSART
    LED_Init();                           //3õê¼»ˉLED
          LCD_Init();
          KEY_Init();                     //3õê¼»ˉ°′¼ü
          TIM3_PWM_Init(500-1,90-1);      //90M/90=1MμļÆêyÆμÂ꣬×Ô¶ˉÖØ×°ÔØÎa500£¬ÄÇÃ′PWMÆμÂêÎa1M/500=2kHZ
    while(1)
    {
               
                         key=KEY_Scan(1);           
                       

                                while(1)
                                {
                                        if(!KEY2)
                                {
                                        Motor_1_POSITIVE_Run();
                                        Motor_2_POSITIVE_Run();
                                        pwmval++;
                                        a[i]=i+1;
                                        i++;
                                        }
                                         if(!KEY0)
                                 {
                                         Motor_1_INVERSE_Run();  
           Motor_2_INVERSE_Run();       
                                          pwmval--;
                                  a[i]=i+1;
                                  i--;
                                 }
                                 if (!KEY1)
                                 {
                                          Motor_1_STOP();
                                          Motor_2_STOP();
                                 }
                                        if(pwmval>400)
                                        {
                                           Motor_1_STOP();
                                                 Motor_2_STOP();
                                         
                                        }a[i]=400;
                                  if(pwmval==0)  
                                                {
                                                        Motor_1_STOP();
                                                        Motor_2_STOP();
                                                       
                                                }a[0]=0;
                                        TIM_SetTIM3Compare4(pwmval);        //DT¸Ä±è½ÏÖ죬DT¸ÄÕ¼¿Õ±è
//                                        LCD_ShowString(10,40,240,32,32,&a[i]);
                                }
   }

void Motor_12_Config(void)  
{
//        GPIO_InitTypeDef GPIO_InitStructure;   //??GPIO_InitTypeDef???
//  RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);  //??????
//       
//        GPIO_InitStructure.GPIO.Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; //??IN??
//        GPIO_InitStructure.GPIO.Mode = GPIO_Mode_Out_PP;  //??????
//        GPIO_InitStructure.GPIO.Speed = GPIO_Speed_50MHz;  //??????
//        GPIO_Init(GPIOA, &GPIO_InitStructure);  //???GPIOA?????,??
//       
//        GPIO_ResetBits(GPIOA,GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5); //??????
    GPIO_InitTypeDef GPIO_Initure;
          __HAL_RCC_GPIOA_CLK_ENABLE();                        //ê1ÄüGPIOAê±Öó
//                __HAL_RCC_USART1_CLK_ENABLE();                        //ê1ÄüUSART1ê±Öó
       
         
    GPIO_Initure.Pin=GPIO_PIN_2;            //PA2
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //êä3ö
    GPIO_Initure.Pull=GPIO_PULLDOWN;        //ÏÂà-
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //¸ßËù
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
       
          GPIO_Initure.Pin=GPIO_PIN_3;            //PA3
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //êä3ö
    GPIO_Initure.Pull=GPIO_PULLDOWN;        //ÏÂà-
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //¸ßËù
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
               
                GPIO_Initure.Pin=GPIO_PIN_4;            //PA4
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //êä3ö
    GPIO_Initure.Pull=GPIO_PULLDOWN;        //ÏÂà-
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //¸ßËù
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);
               
                GPIO_Initure.Pin=GPIO_PIN_5;            //PA5
    GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;      //êä3ö
    GPIO_Initure.Pull=GPIO_PULLDOWN;        //ÏÂà-
    GPIO_Initure.Speed=GPIO_SPEED_HIGH;     //¸ßËù
    HAL_GPIO_Init(GPIOA,&GPIO_Initure);

}

void Motor_1_STOP(void)
{
        IN1 = 0;
        IN2 = 0;
}

void Motor_1_INVERSE_Run(void)
{
        IN1 = 0;
        IN2 = 1;
}

void Motor_1_POSITIVE_Run(void)
{
        IN1 = 1;
        IN2 = 0;
}
void Motor_2_STOP(void)
{
        IN3 = 0;
        IN4 = 0;
}

void Motor_2_INVERSE_Run(void)
{
        IN3 = 0;
        IN4 = 1;
}

void Motor_2_POSITIVE_Run(void)
{
        IN3 = 1;
        IN4 = 0;
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
正点原子
1楼-- · 2019-07-20 05:53
1,仿真,看代码执行过程。
2,用万用表测量对应IO口的电平状态,是否符合设计要求。
根据这两个点,来分析问题。
灬凡华
2楼-- · 2019-07-20 09:56
 精彩回答 2  元偷偷看……

一周热门 更多>