首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >STM32与A4899步进电机驱动器的通信

STM32与A4899步进电机驱动器的通信
EN

Stack Overflow用户
提问于 2018-06-25 17:52:49
回答 1查看 3.9K关注 0票数 1

我想写一个带STM32L152RE的步进电机驱动器。

我想用电位器控制步进电机的位置。

由于我是新来的,我不知道如何与(DIR,STEP)沟通。

有人能给我点灯或者给我指路吗?

我用的是带有翻译器和过流保护的A4988 - DMOS微步驱动程序

我试着用STM32提姆,但我做不到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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控件的一个示例:

代码语言:javascript
复制
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,推挽和电阻上升.也为交替引脚安装线。

现在配置计时器:

代码语言:javascript
复制
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,您可以相当快地获得这些配置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51029266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档