1、VBB(电机电源):最小8V最大35V,你用(VMOT接+5V)5V(A4988资料上没VMOT这一接口)。
2、ENABLE(使能)端口接+A4988才能工作,你给它0V即是叫它禅知休息不亏袭源必工作。
以上
您好,我研究电机多年!现为您解答:可以这样说,PWM对步进电机几乎没什么太大作用,因为步进电机不像直流电机那样通过改变电老桐压来改变转速,步进电机是有工作时序的侍罩坦,而且步进电机需要驱动电路的,你输入的PWM信号对驱动芯片来说只是个时序信号,最终输出的电压大小还是驱动电路实现的,所以用PWM调节步进电机简直就闷绝是画蛇添足,瞎给自己找麻烦!如果想改变步进电机的速度可以通过改变每两个脉冲之间的延时时间来实现。如果想改变步进电机的扭矩可以通过改变步进电机的工作节拍来实现!一般单四拍力矩最小,双四拍力矩最大,半步8拍力矩稍小于双四拍,但是步进分辨率要高一倍!望采纳,谢谢!
用定时器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条)