目录
一、主要功能
1、LCD显示当前挡位、方向等;
2、按键控制步进电机挡位、方向等。
3、步进电机的机械结构
28BYJ-48(减速步进电机):
步距角:5.625° → 经1:64减速箱后 0.087°/步
4相5线单极电机(ULN2003驱动)
NEMA17(工业级电机):
步距角:1.8°(200步/转)
双极电机(需A4988/TB6600驱动)
当定子绕组按A→B→C→D→A
顺序通电时,转子磁极被吸引旋转。STM32通过相应脉冲信号(STEP)相应控制步数,相应方向信号(DIR)相应控制相位顺序
二、使用步骤
系统运行后,LCD1602显示当前挡位、方向;
通过按键控制步进电机转动速度、方向。
三、硬件资源
1、32单片机核心模块
2、按键模块
3、ULN2003A驱动模块
4、LCD1602显示模块
四、软件设计
#include "delay.h"
#include "sys.h"
#include "1602.h"
#include "key.h"
#include "step.h"
#include "exti.h"
u8 Key_num=0;//按键值
bool turn_flag=true;//转向
u16 Shift_num=0;//挡位
u16 Star_flag=0;//启动标志位
void key_san(void);//按键判断函数
void Delay(int num)
{
while(num--) ;
}
void display_data(void)///显示
{
LcdWriteCom(0x0C); //取消光标闪烁
LcdWriteCom(0x80+6); //第一行
LcdWriteData((Shift_num+1)+0x30);
LcdWriteCom(0x80+15); //第一行
if(turn_flag==true)
LcdWriteData('Z');
else
LcdWriteData('F');
LcdWriteCom(0x80+0x40+7); //第二行
if(Star_flag==0)
LcdWritestr("stop");
else
LcdWritestr("star");
}
int main()
{
delay_init(); //延时函数初始化
LCD1602_Init(); //lcd函数初始化
KEY_Init(); //按键函数初始化
Step_Motor_GPIO_Init();
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
EXTIX_Init();//外部中断初始化
while(1)
{
if(Star_flag==0)
MOTOR_STOP();//停止
else
motorNcircle(Shift_num,turn_flag);//n为步进电机转动的挡位,position为正转或者反转
}
}
五、实验现象
演示视频: