OpenEdv-开源电子网

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

L298N驱动电机不转,求大神指点下迷津

[复制链接]

20

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-7-19
在线时间
44 小时
发表于 2020-5-24 14:25:44 | 显示全部楼层 |阅读模式
按网上的资料写了下电机驱动的代码,然后接上线下载程序电机就是不转,电池也是12V供电,也不知道哪里出问题了,麻烦大佬帮忙看看
电机1.jpg 电机2.jpg
  1. int main(void)
  2. {        
  3.         u16 pwmval=1950;   
  4.         u8 dir=1;

  5.   HAL_Init();                                     //初始化HAL库   
  6.   Stm32_Clock_Init(RCC_PLL_MUL9);           //设置时钟,72M
  7.         delay_init(72);                               //初始化延时函数
  8.         uart_init(115200);                                        //初始化串口
  9.         //LED_Init();                                                        //初始化LED       
  10.        
  11.         INITInit();
  12.         TIM1_PWM_Init(999,71);                                //72000KHZ/(999+1)*(71+1)=1KHZ
  13.         INIT2=0;
  14.         INIT1=1;
  15.         while(1)
  16.         {
  17.                 INIT2=1;
  18.                 INIT1=0;
  19.                 delay_ms(500);
  20.         }
  21. }


  22. //TIM1 PWM部分初始化
  23. //arr:自动重装值。
  24. //psc:时钟预分频数
  25. //定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
  26. //Ft=定时器工作频率,单位:Mhz
  27. void TIM1_PWM_Init(u16 arr,u16 psc)
  28. {  
  29.     TIM1_Handler.Instance=TIM1;                 //定时器1
  30.       TIM1_Handler.Init.Prescaler=psc;               //定时器分频
  31.     TIM1_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;//向上计数模式
  32.     TIM1_Handler.Init.Period=arr;                  //自动重装载值
  33.     TIM1_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
  34.     HAL_TIM_PWM_Init(&TIM1_Handler);               //初始化PWM
  35.    
  36.     TIM1_CH1Handler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1
  37.     TIM1_CH1Handler.Pulse=arr;            //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半
  38.     TIM1_CH1Handler.OCPolarity=TIM_OCPOLARITY_HIGH; //输出比较极性为蹈?
  39.     HAL_TIM_PWM_ConfigChannel(&TIM1_Handler,&TIM1_CH1Handler,TIM_CHANNEL_1);//配置TIM1通道1
  40.        
  41.     HAL_TIM_PWM_Start(&TIM1_Handler,TIM_CHANNEL_1);//开启PWM通道1
  42.                    
  43. }  

  44. //定时器底层驱动,时钟使能,引脚配置
  45. //此函数会被HAL_TIM_PWM_Init()调用
  46. //htim:定时器句柄
  47. void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
  48. {
  49.         GPIO_InitTypeDef GPIO_Initure;
  50.        
  51.     if(htim->Instance==TIM1)
  52.         {
  53.                 __HAL_RCC_TIM1_CLK_ENABLE();                        //使能定时器1
  54.                 __HAL_RCC_GPIOA_CLK_ENABLE();                        //开启GPIOA时钟
  55.                
  56.                 GPIO_Initure.Pin=GPIO_PIN_8;                   //PA8
  57.                 GPIO_Initure.Mode=GPIO_MODE_AF_PP;          //复用推挽输出
  58.                 GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
  59.                 GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
  60.                 HAL_GPIO_Init(GPIOA,&GPIO_Initure);        
  61.                
  62.                
  63.         }
  64. }

  65. void INITInit(void)
  66. {
  67.        
  68.                 GPIO_InitTypeDef GPIO_Initure;
  69.                 __HAL_RCC_GPIOA_CLK_ENABLE();                        //开启GPIOA时钟

  70.                 GPIO_Initure.Pin=GPIO_PIN_4|GPIO_PIN_5;                  
  71.                 GPIO_Initure.Mode=GPIO_MODE_AF_PP;          //复用推挽输出
  72.                 GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
  73.                 GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
  74.                 HAL_GPIO_Init(GPIOA,&GPIO_Initure);        
  75.        
  76.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4|GPIO_PIN_5,GPIO_PIN_RESET);
  77. }




  78. //设置TIM1通道1的占空比
  79. //compare:比较值
  80. void TIM_SetTIM1Compare1(u32 compare)
  81. {
  82.         TIM1->CCR1=compare;
  83. }

  84. //定时器1中断服务函数
  85. void TIM1_IRQHandler(void)
  86. {
  87.     HAL_TIM_IRQHandler(&TIM1_Handler);
  88. }

  89.    
复制代码


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-24 14:25:45 | 显示全部楼层
回复 支持 反对

使用道具 举报

20

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-7-19
在线时间
44 小时
 楼主| 发表于 2020-5-24 14:26:57 | 显示全部楼层
图中电线我没插上,一般查到了L298N12V输入处
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2018-6-13
在线时间
7 小时
发表于 2020-5-24 15:05:08 | 显示全部楼层
本帖最后由 胡说八道的达达 于 2020-5-24 15:08 编辑

主函数或者定时中断里应该要用TIM_SetTIM1Compare1()这个函数吧
回复 支持 反对

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2018-6-13
在线时间
7 小时
发表于 2020-5-24 15:06:37 | 显示全部楼层
TIM1_Handler.Init.Period=arr; 和TIM1_CH1Handler.Pulse=arr; 这俩值不能一样吧
回复 支持 反对

使用道具 举报

20

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-7-19
在线时间
44 小时
 楼主| 发表于 2020-5-24 20:45:41 | 显示全部楼层
找到问题了,我的INT1和INT2对应PA4和PA5设置为了复用输出,应该改为通用输出
回复 支持 反对

使用道具 举报

20

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
151
金钱
151
注册时间
2018-7-19
在线时间
44 小时
 楼主| 发表于 2020-5-24 20:47:18 | 显示全部楼层
PA5和PA4我写错配置了,应该是通用输出。可以转动了
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2020-6-13
在线时间
12 小时
发表于 2020-10-23 10:46:52 | 显示全部楼层
老哥,完整程序可以分享下吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-20 18:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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