步进电机电流设置的3种方法

本文介绍步进电机电流设置的3种方法。

步进电机电流设置包括运行电流(IRun)和保持电流(IHold)2种。电机运行时需要有较大电流以保证有足够的力矩使物体运动,而停止的时候,为了减少电机发热及降低功耗,只需要较小的电流保证有足够的力矩使物体不发生移动即可。通常步进电机驱动芯片都有电流设置接口。如Allegro MicroSystems的步进驱动芯片A4984,设置VREF电压即可调节其输出电流(力矩)。

1.固定电阻分压设置法

固定电阻分压设置法采用一个三极管控制电阻分压比,来调节步进电机运行电流和保持电流。电路图如下图所示。

运行电流:

Optional digital control=Low

IRun=R1*Vref/(R1+R2)

保持电流:

Optional digital control=High

IHold=(R2//R3)*Vref/(R2//R3+R1)

设置时注意AIN_IREF电压输入范围。

此法设置比较简单,在要求不高的情况下可以这样设定,通常可以让保持电流为运行电流的一半,或根据实际使用情况进行设定。

2.DAC设置法

DAC设置法是采用DAC输出电压来调节电机电流的大小,电路图如下图所示。

此法要增加一个DAC芯片或使用带DAC的MCU,优点是可以通过DAC设置电流到任意值,比较灵活,方便,设置的精度也比较高。

设置时同样要注意AIN_IREF电压输入范围。

3.PWM设置法

PWM设置法时采用PWM输出,通过低通滤波器去除基波及高次谐波,仅保留直流分量来调节电机电流的方法,电路图如下图所示。

对于电阻和电容的选择,通常在PWM频率大于10kHz,滤波器截至频率(fc=1/(2*pi*RC))远小于(通常是10倍)PWM输入频率即可。如PWM频率为10kHz,fc=1kHz。

此法需要使用带PWM的MCU,优点是可以通过PWM设置电流到任意值,设置的精度也比较高(取决于PWM分辨率)。

设置时同样要注意AIN_IREF电压输入范围。

总结,本文介绍了步进电机电流设置的3种方法。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个采集步进电机电流的STM32 ADC程序,仅供参考: ```c #include "stm32f10x.h" #define ADC1_DR_Address ((u32)0x4001244C) void ADC_Configuration(void); void GPIO_Configuration(void); void NVIC_Configuration(void); int main(void) { GPIO_Configuration(); ADC_Configuration(); NVIC_Configuration(); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while (ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while (ADC_GetCalibrationStatus(ADC1)); ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (1) { /* 采集步进电机电流值 */ if (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)) { u16 adcValue = ADC_GetConversionValue(ADC1); /* 处理采集到的步进电机电流值 */ } } } void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; DMA_InitTypeDef DMA_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&adcValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = 1; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &DMA_InitStructure); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5); ADC_DMACmd(ADC1, ENABLE); } void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); } void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } void ADC1_2_IRQHandler(void) { if (ADC_GetITStatus(ADC1, ADC_IT_EOC) != RESET) { ADC_ClearITPendingBit(ADC1, ADC_IT_EOC); } } ``` 需要注意的是,上述程序仅供参考,具体实现需要根据具体的硬件电路、采样率、采样精度等参数进行配置。同时,需要根据具体的需求进行数据处理和显示,如通过串口通信将采集的数据发送到上位机进行显示等。同时,需要在程序中加入步进电机控制代码,以便控制步进电机的运动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值