我想写一个带STM32L152RE的步进电机驱动器。
我想用电位器控制步进电机的位置。
由于我是新来的,我不知道如何与(DIR,STEP)沟通。
有人能给我点灯或者给我指路吗?
我用的是带有翻译器和过流保护的A4988 - DMOS微步驱动程序
我试着用STM32提姆,但我做不到。
发布于 2018-07-11 13:04:35
实际上,我已经为a4988编写了完整的驱动程序,它是基于irq的。但我无法揭开它。我可以描述一条如何开始的路。无论如何,你应该有一些硬件,因为A4988需要额外的元件来控制电流(电阻)和一些电容器。你可以试试POLOLU HW。
如果你有某种定制板,可能会有一些缺陷。所以重新检查别针。特别是ROSC引脚,,SENSE1,SENSE2引脚,因为这些可能会导致马达不能工作,即使其他引脚是正常的。
ROSC管脚是低功耗模式,所以在这里你应该计算,如果你只是忽略它,一定要连接到至少10k电阻。不要让它浮起来。 SENSE1,SENSE2引脚可以连接到0.25omh电阻。你应该检查一下。
也是从电源引脚非常决定性的VREG引脚。如果我记得的话,应该从0到2000 if。实际上它控制着电机的电流。这取决于你的步进电机。这里也可能出现严重的缺陷。例如,您有小步进电机,设置过高的VREG值,比A4988会下沉太多的电流,您的电机将出现故障。无论如何,您应该非常准确地阅读A4988数据表。
DIR PIN是简单的方向,推挽引脚配置和高/低值控制方向,时钟明智,反时钟明智。
复位输入PIN A4988必须从您的单片机获得高。
启用输入PIN A4988必须从您的单片机低。
睡眠输入PIN A4988必须从您的单片机获得高,而且当您的步进器工作完成时控制它也是非常有用的,否则如果您一直保持高,步进电机会吃电流,并在空闲状态下加热。
另外还有3个微步进针,用于控制步进。当你刚开始玩的时候,把这些引脚连接到GND上就足够了,你将得到完全的步进regime.If,你可以控制那些引脚,你可以得到其他的系统,比如1/4,1/8,1/16.
一般引脚为步进引脚,采用定时器作为脉宽恒定、周期交替的脉宽调制输出。
下面是步骤PIN控件的一个示例:
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
GPIO_InitTypeDef init;
init.GPIO_Mode = GPIO_Mode_AF;
init.GPIO_OType = GPIO_OType_PP;
init.GPIO_Pin = GPIO_Pin_9;
init.GPIO_PuPd = GPIO_PuPd_UP;
init.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_Init(GPIOA,&init);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_2);例如,我将PA9单片机的步进输出连接到A4988步进输入。它可以作为PWM的定时器驱动。检查您的具体MCU数据表。首先,输出引脚应配置为AF,推挽和电阻上升.也为交替引脚安装线。
现在配置计时器:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseInitTypeDef timerInitStructure;
timerInitStructure.TIM_Prescaler = 48;
timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
timerInitStructure.TIM_Period = 0;
timerInitStructure.TIM_ClockDivision = 0;
timerInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &timerInitStructure);
TIM_OCInitTypeDef osc;
osc.TIM_OCMode = TIM_OCMode_PWM1;
osc.TIM_OutputState = TIM_OutputState_Enable;
osc.TIM_OutputNState = TIM_OutputNState_Disable;
osc.TIM_Pulse = 1000;
osc.TIM_OCPolarity = TIM_OCNPolarity_High;
osc.TIM_OCNPolarity = TIM_OCNPolarity_Low;
osc.TIM_OCIdleState =TIM_OCIdleState_Reset;
osc.TIM_OCNIdleState =TIM_OCNIdleState_Set;
TIM_OC2Init(TIM1, &osc);
TIM_Cmd(TIM1, ENABLE);这里我配置了1U定时器,因为我的MCU频率是48 MCU。此外,您还配置了定时器将驱动PWM输出。
TIM1->CCR =10;用这个寄存器我可以控制脉宽,在这个例子中它是10 is .
TIM1->ARR =30;具有ARR寄存器I的可以控制周期,这意味着步进脉冲频率等于步进电机的速度。在这种情况下,30人。
如果您正在使用HAL和CUBEMX,您可以相当快地获得这些配置。
https://stackoverflow.com/questions/51029266
复制相似问题