OpenEdv-开源电子网

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

stm32控制步进电机,程序没错误,但是电机不动

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-9-30
在线时间
0 小时
发表于 2015-9-30 22:08:38 | 显示全部楼层 |阅读模式
5金钱
void Motor3(uint32_t b, uint32_t a)
{
 if(b==1)    //1为下降 ,0为上升 
   {
   GPIO_SetBits(GPIOD , GPIO_Pin_13);  //PD13为方向
   }
   else
   {
   GPIO_ResetBits(GPIOD , GPIO_Pin_13);
   }
TIM_Cmd(TIM4, ENABLE);                //开启时钟
while(count2<a)  
{
if(count2%2==0) //奇偶输出判断是高电平还是低电平,中断服务程序中计数      
{
   GPIO_SetBits(GPIOD , GPIO_Pin_12);  //PD12为脉冲 
 }         
else
 {
   GPIO_ResetBits(GPIOD , GPIO_Pin_12);
}
}
count2=0;        
GPIO_ResetBits(GPIOD , GPIO_Pin_12);  //达到预先设定脉冲数,清空计数值并失效时钟
TIM_Cmd(TIM4, DISABLE);
}


stm32f103连接步进电机驱动器和57步进电机,2相4线步进电机,程序编译没错,但是下载到板子上,步进电机没有动作,这是电机动作的定义函数,请教大神们,有问题吗?
我想要实现单片机控制步进电机实现定向运动、静止、反向运动,如此循环往复。当然实体电路中还有6个接近传感器用来控制步进电机运动位置,所以就有一个初始位置的设定,

void Location(void)    {
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==1&&GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)==1)
//接近传感器
{
Motor1(0,3200);  // 下降
}
else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0&&GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)==0) 
//接近传感器{
Motor1L(1,3200);  //上升
}
else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==1&&GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)==0) 
//接近传感器
{
Motor1L(1,3200);  //上升
}
else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0&&GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_4)==1) 
//接近传感器
{
Motor1L(1,32000);  //上升
}
Motor1L(1,32000);
Motor1(0,3200); 
Motor3L(1,32000);
Motor3(0,3200) ;
}



主函数中

int main(void)
{
 RCC_Configuration();     
 GPIO_Configuration();   
  NVIC_Configuration();  
  TIM2_Configuration();    
 TIM4_Configuration();
 USART_Configuration();

while(1)
 {
  
   Motor1L(1,3200); //
   Motor1(0,32000); //
 }
}

请教大家,为什么下载到板子后电机不动呢

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-9-30 22:18:55 | 显示全部楼层
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-9-30
在线时间
0 小时
 楼主| 发表于 2015-9-30 23:31:24 | 显示全部楼层
回复【2楼】正点原子:
----------------------------求帮解决
回复

使用道具 举报

1

主题

67

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2015-6-6
在线时间
2 小时
发表于 2015-10-1 00:26:05 | 显示全部楼层
程序大大的错了!!!

1、只见到Motor3()函数,Motor1()、Motor1L()函数都没见着;
2、Motor3()函数中启动了Timer4,但看不出Timer4到底起什么作用,相关程序看起来有些思维混乱;
3、看起来是用STM32的GPIO控制一片步进电机驱动芯片的,但是没见过有哪颗芯片能接受这么高的脉冲频率的,步进电机就更不用说了;
4、实在是看不出编写程序的人对电机控制有什么基础,整个控制都不对,都不知道该从哪儿改起,整个程序都得重写才行!!!
三更有梦书当枕,千里怀人月在峰!
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-9-30
在线时间
0 小时
 楼主| 发表于 2015-10-1 10:47:50 | 显示全部楼层
这个程序是之前一个前辈写的,而且调试成功的,应用于实物中。关于几个问题
1.Motor1()与Motor3()函数不同的是单片机的端口,Motor1L()是加了接近传感器的判断语句
2.Timer4用来计数脉冲,
uint32_t  count2=0;
void TIM4_Configuration(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4 , ENABLE);
  TIM_DeInit(TIM4);
  TIM_TimeBaseStructure.TIM_Period=11;
  TIM_TimeBaseStructure.TIM_Prescaler= (90-1);
  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  TIM_ClearFlag(TIM4, TIM_FLAG_Update);
  TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE);
}
void TIM4_IRQHandler(float a) //a为脉冲数的2倍   
{
  //  static uint8_t Display;
if ( TIM_GetITStatus(TIM4 , TIM_IT_Update) != RESET ) 
{
   TIM_ClearITPendingBit(TIM4 , TIM_FLAG_Update);

 count2++;
    }
}
3.单片机连接步进电机驱动器,驱动器驱动步进电机动作,为什么不可以呢?
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-1-20
在线时间
3 小时
发表于 2016-1-20 15:25:49 | 显示全部楼层
coco1990 发表于 2015-10-1 10:47
这个程序是之前一个前辈写的,而且调试成功的,应用于实物中。关于几个问题
1.Motor1()与Motor3()函数不同 ...

你的驱动器有效的脉冲电平是几伏的?
回复

使用道具 举报

7

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2015-11-28
在线时间
30 小时
发表于 2016-3-20 20:19:27 | 显示全部楼层
我的问题和你的一样,你现在解决了么,求帮助啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 17:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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