OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3061|回复: 2

pwm控制电机不能反转

[复制链接]

3

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2019-3-22
在线时间
30 小时
发表于 2019-3-27 20:04:17 | 显示全部楼层 |阅读模式
1金钱
写了一个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,仿真,看代码执行过程。 2,用万用表测量对应IO口的电平状态,是否符合设计要求。 根据这两个点,来分析问题。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2019-3-27 20:04:18 | 显示全部楼层
1,仿真,看代码执行过程。
2,用万用表测量对应IO口的电平状态,是否符合设计要求。
根据这两个点,来分析问题。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
84
金钱
84
注册时间
2019-3-31
在线时间
24 小时
发表于 2019-3-31 18:12:33 | 显示全部楼层
我也遇见了相同的问题,但是我吧PWM输出的IO口与驱动模块IN脚相连,发现可以实现正反转
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-10 04:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表