我用STM32做小车的主控板,控制步进电机,用的是L298驱动板,程序如下
我的程序如下
#include "stm32f10x_it.h"
#include "stm32f10x_conf.h"
#include "stm32f10x.h"
#include <stdio.h>
#include "gpio.h"
#include "rcc.h"
#include"qudong.h"
void Init(void); //初始化
void Forward(void);
void Backward(void);
void Left(void);
void Right(void);
void Stop(void);
/********1MS 延时程序*********/
volatile u16 Timer1;
void SysTickDelay(u16 dly_ms)
{
Timer1=dly_ms;
while(Timer1);
}
int i=10000;//暂定为10000个脉冲
int main(void)
{
Init();
while(1)
{
Forward();//前进,电机转50圏
}
}
/*电机驱动程序*/
/*前进程序*/
void Forward(void)
{
while(i--)
{
GPIO_Write(GPIOA,0x55);
SysTickDelay(50);
GPIO_Write(GPIOA,0x66);
SysTickDelay (50);
GPIO_Write(GPIOA,0xaa);
SysTickDelay (50);
GPIO_Write(GPIOA,0x99);
SysTickDelay (50);
}
}
/*后退程序*/
void Backward(void)
{
while(i--)
{
GPIO_Write(GPIOA,0x99);
SysTickDelay(50);
GPIO_Write(GPIOA,0xaa);
SysTickDelay(50);
GPIO_Write(GPIOA,0x66);
SysTickDelay (50);
GPIO_Write(GPIOA,0x55);
SysTickDelay (50);
}
}
/*左转程序*/
void Left(void)
{
while(i--)
{
GPIO_Write(GPIOA,0x59);
SysTickDelay (50);
GPIO_Write(GPIOA,0x6a);
SysTickDelay (50);
GPIO_Write(GPIOA,0xa6);
SysTickDelay (50);
GPIO_Write(GPIOA,0x95);
SysTickDelay(50);
}
}
/*右转程序*/
void Right(void)
{
while(i--)
{
GPIO_Write(GPIOA,0x95);
SysTickDelay(50);
GPIO_Write(GPIOA,0xa6);
SysTickDelay (50);
GPIO_Write(GPIOA,0x6a);
SysTickDelay(50);
GPIO_Write(GPIOA,0x59);
SysTickDelay (50);
}
}
/*小车停止*/
void Stop(void)
{
GPIO_Write(GPIOA,0x00);
}
/*STM32与步进电机的接口设置*/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
}
我用的驱动板是L298.一号电机的A,A-,B,B-分别接L298的IN1,IN2,IN3,IN4,与A0,A1,A2,A3相连;二号电机的A,A-,B,B-分别接另一个L298的IN1,IN2,IN3,IN4,与A4,A5,A6,A7相连.但通电后步进电机一点反应都没有,小弟是新手,都不太懂。请大家多多指教!
用示波器测了下AO引脚,发现只会有高电平输出!没有低电平。这就是无法驱动步进电机的原因吧!是不是端口设置的问题?还是延时程序的问题?在主函数里面写入
GPIO_SetBits(GPIOA,GPIO_Pin_0);
SysTickDelay(50);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
SysTickDelay(50);
看看是缶有方波输出,结果还是输出高电平。如果只写GPIO_ResetBits(GPIOA,GPIO_Pin_0);则会输出低电平。小弟实在整不明白,请大家多多指教!!!
一周热门 更多>