OpenEdv-开源电子网

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

stm32f103驱动57步进电机遇到的问题

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2022-11-20
在线时间
5 小时
发表于 2022-11-23 10:41:59 | 显示全部楼层 |阅读模式
1金钱
我驱动的是57步进电机,但是按键中断使能之后,每按一次按键,转动的角度都不一样;还有就是我让这个电机来回循环转几次,脉冲一改转的角度就不对了(我的脉冲是设置的1000,但250,500这些角度又是正常的,300,400这种角度又不对了);

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

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2022-11-23 13:25:13 | 显示全部楼层
按键响应的代码和步进电机驱动冲突了?
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2022-11-20
在线时间
5 小时
 楼主| 发表于 2022-11-23 14:31:06 | 显示全部楼层
阿侑kevin 发表于 2022-11-23 13:25
按键响应的代码和步进电机驱动冲突了?

按键这个问题我给客服看了也没看出啥来

  1. //void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  2. //{
  3. //        if(GPIO_Pin == GPIO_PIN_4)
  4. //        {
  5. //                Motor_ctr(up,200);
  6. //        }
  7. //}

  8. void  Motor_ctr(int direction,int speed)
  9. {
  10.         HAL_GPIO_WritePin(GPIOD, GPIO_PIN_5, direction);
  11.         __HAL_TIM_SetAutoreload(&htim2,speed);
  12.         __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, (speed/2));
  13. }
复制代码
回复

使用道具 举报

11

主题

2103

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4588
金钱
4588
注册时间
2015-1-10
在线时间
574 小时
发表于 2022-11-23 16:34:47 | 显示全部楼层
fahuo123 发表于 2022-11-23 14:31
按键这个问题我给客服看了也没看出啥来

你这个代码要是按键按下后有抖动的话步进电机就会多走了
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2022-11-20
在线时间
5 小时
 楼主| 发表于 2022-11-23 17:07:26 | 显示全部楼层
本帖最后由 fahuo123 于 2022-11-23 17:10 编辑
阿侑kevin 发表于 2022-11-23 16:34
你这个代码要是按键按下后有抖动的话步进电机就会多走了

怎么说呢,我在while(1)里面加了
  1. if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)==GPIO_PIN_RESET)
  2.   HAL_Delay(20);
复制代码

但是每次按下按键,电机转动的角度都不一样,和我设定的角度不搭边下面是我的定时器中断回调函数
  1. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  2. {
  3.         if(htim == (&htim2))
  4.         {
  5.                 ITcnt ++;
  6.                 if(ITcnt == 1000)// 1000个脉冲==1圈
  7.                 {
  8.                         __HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, 0);
  9.                         //HAL_TIM_PWM_Stop_IT(&htim2, TIM_CHANNEL_2);
  10.                         ITcnt = 0;
  11.                 }
  12.         }
  13. }
复制代码
而且优先级我也考虑到了,定时器的优先级是0,按键的优先级低所以设成2
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 21:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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