高中生
最后登录1970-1-1
在线时间 小时
注册时间2017-2-6
|

楼主 |
发表于 2017-3-16 22:24:02
|
显示全部楼层
本帖最后由 任逍遥 于 2017-3-16 22:40 编辑
您好,我想用板子上引出的GPIO中SPI1/I2S3这部分的PA4和PA5引脚,如下图,分别连接步进电机驱动器的PUL-和DIR-,用来发脉冲信号和方向信号,以下是我的程序:
c文件:
#include "bsp_motor.h"
void Motor_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_Initstruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_Initstruct.GPIO_Pin = GPIO_Pin_4;
GPIO_Initstruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_Initstruct.GPIO_OType = GPIO_OType_PP;
GPIO_Initstruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Initstruct.GPIO_Speed = GPIO_Fast_Speed;
GPIO_Init(GPIOA,&GPIO_Initstruct);
GPIO_Initstruct.GPIO_Pin = GPIO_Pin_5;
GPIO_Init(GPIOA,&GPIO_Initstruct);
}
void DelayMs(unsigned int x)
{
unsigned char i;
while(x--)
{
for (i = 0; i<20; i++)
{}
}
}
h文件:
#ifndef _BSP_MOTOR_H
#define _BSP_MOTOR_H
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
void Motor_GPIO_Config(void);
void DelayMs(unsigned int x);
#endif /*_BSP_MOTOR_H*/
main函数:
#include "stm32f4xx.h"
#include "bsp_motor.h"
/*****************************************/
/*PA4接步进电机驱动器PUL-端,提供脉冲信号*/
/*PA5接步进电机驱动器DIR-端,提供方向信号*/
/*****************************************/
int main(void)
{
Motor_GPIO_Config();
//DIR-为低顺时针转动
GPIO_ResetBits(GPIOA,GPIO_Pin_5);
while(1)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
DelayMs(1); //10~20对应0.11ms
GPIO_SetBits(GPIOA,GPIO_Pin_4);
DelayMs(1);
}
/*DIR-为高电动机逆时针转动*/
/*
GPIO_SetBits(GPIOA,GPIO_Pin_5);
while(1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_4);
DelayMs(1);
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
DelayMs(1);
}
*/
}
编译过没有错误,但是电机不能正常转动,延时函数的时间是按600r/min,步进电机细分为800脉冲/转设置的,我还用万用表测了PA4,PA5的电压,发现PA5就是发方向信号的引脚的电压始终是高,有一次还测出大于5V,请问是我的程序有问题还是其他的问题?我用另一个小模块做了测试,电机可以正常转动。
|
-
|