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 F103ZEt6int 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)
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)