STM32F10驱动A4988步进电机驱动模块程序

STM32F10驱动A4988步进电机驱动模块程序,第1张

本人没用过A4988,但你给出的数据有明显错误:

1、VBB(电机电源):最小8V最大35V,你用(VMOT接+5V)5V(A4988资料上没VMOT这一接口)。

2、ENABLE(使能)端口接+A4988才能工作,你给它0V即是叫它休息不必工作。

以上

如果是步进电机,set引脚的流程和正转相反就可以了,如果正转的方向是 PH1-PH2-PH3,则反转的流程就是PH3-PH2-PH1,步进电机有转速极限,注意拉高引脚的时间间隔,不然会堵转,烧电机

如果是普通的电机,你直接问你的硬件工程师反转脚是哪个就可以了.

定时器1产生脉冲给步进电机驱动器驱动步进电机转用,然后用滴嗒定时器中断,过100MS或若干MS更新LCD显示数值。篇幅有限,只粘贴部份代码,芯片是stm32 F103ZEt6

int main(void)

{

/* 复位所有外设,初始化Flash接口和系统滴答定时器 */

HAL_Init()

/* 配置系统时钟 */

SystemClock_Config()

BSP_LCD_Init()

KEY_GPIO_Init()

STEPMOTOR_TIMx_Init()

LCD_Clear(0,0,LCD_DEFAULT_WIDTH,LCD_DEFAULT_HEIGTH,BLACK)

/* 开背光 */

LCD_BK_ON()

/* 无限循环 */

while (1)

{

if(KEY1_StateRead()==KEY_DOWN)

STEPMOTOR_AxisMoveRel(6400*-5, 500 , 500 , 4000)

if(KEY2_StateRead()==KEY_DOWN)

STEPMOTOR_AxisMoveRel(6400*5, 500 , 500 , 4000)

}

}

void HAL_SYSTICK_Callback(void)

{

time_count++// 每1ms自动增一

if(time_count==100) // 0.5s

{

uint8_t str[50]

sprintf((char *)str,"%d",srd.step_delay)//显示定时器计数值

LCD_Clear(120,300,200,24,BLACK)

LCD_DispString_EN(120,300,(char *)str,BLACK,RED,USE_FONT_24)

sprintf((char *)str,"%d",step_position/6400) //显示总共多少圈

LCD_Clear(120,400,200,24,BLACK)

LCD_DispString_EN(120,400,(char *)str,BLACK,RED,USE_FONT_24)

time_count=0

if(MotionStatus==STOP)

{

LCD_Clear(120,430,200,24,BLACK)

LCD_DispString_EN(120,430,"motro is stop",BLACK,RED,USE_FONT_24)

sprintf((char *)str,"%d",srd.decel_val/6400) //显示减速有多少圈

LCD_Clear(120,430+24,200,24,BLACK)

LCD_DispString_EN(120,430+24,(char *)str,BLACK,RED,USE_FONT_24)

}

else

{

LCD_Clear(120,430,200,24,BLACK)

LCD_DispString_EN(120,430,"motro is running",BLACK,RED,USE_FONT_24)

sprintf((char *)str,"%d",0)

LCD_Clear(120,430+24,200,24,BLACK)

LCD_DispString_EN(120,430+24,(char *)str,BLACK,RED,USE_FONT_24)

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7816963.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存