实验目的: 利用STM32 来控制步进电机正反转
实验设备:STM32开发板,两相步进电机,24V&5V直流电源,丝杆导轨,DM422C
驱动器
图1 实物图
第一步 弄清楚驱动器接线
1.1 ENA可以悬空
大部分使用者就是将ENA悬空的,就是电机通常不锁轴
1.2 OPTO 是共阳极端
1.2.1 如果用的是AVR ,就直接接到AVR 5V接线柱上。
1.2.2 如果用的是ARM,就将OPTO接到5V 电源上,记得电源要和ARM共
地,这样才能识别接的电源是5V
第二步 弄清楚脉冲的发送形式,即Delay函数作用
清楚脉冲的发送形式,即Delay函数作用,
弄清楚接口由哪个GPIO口控制,然后连接硬件图,
通过电源IO控指示灯检验信号发送:
第三步 主程序
下面这个程序是
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
void Delay (u32 nCount)
{
for(; nCount != 0; nCount--);
}
void GPIO_Config()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
int main(void)
{
SystemInit();
GPIO_Config();
while(1){
int i,n=4000;
for(i=0;i
GPIO_SetBits(GPIOC , GPIO_Pin_3);
Delay(0xfff) ;
GPIO_SetBits(GPIOC , GPIO_Pin_2);
Delay(0xfff) ;
GPIO_ResetBits(GPIOC , GPIO_Pin_2);
Delay(0xfff) ;
}
Delay(0xfffff) ;
Delay(0xfffff) ;
Delay(0xfffff) ;
for(i=0;i
GPIO_ResetBits(GPIOC , GPIO_Pin_3);
Delay(0xfff) ;
GPIO_SetBits(GPIOC , GPIO_Pin_2);
Delay(0xfff) ;
GPIO_ResetBits(GPIOC , GPIO_Pin_2);
Delay(0xfffff) ; //增加的数值,会控制发脉冲的速度,从而控制电
机的转速
}
}
}
最后结果是电机启动,快去慢回
图 程序烧写过程图
注意:程序修改后一定要编译一次,或者保存才能烧写进去,不然永远只会是保存或者编
译前的程序。
编译
下载