步进电机
前言
滚珠丝杆在一些特定环境下可以很好的代替机械臂使用。使用滚珠丝杆你必须会用步进电机。
一、ATK-2MD4850驱动
ATK-2MD4850 是一款高性能细分型 2 相混合式步进电机驱动器,采用 12~48VDC 供电,输出峰值电流可达 5.0A,适合驱动常用的 42、57、86 两相混合式步进电机。此驱动器采用PWM 恒流控制和超小细分技术,使得电机转矩波动小,低速运行平稳以及极小振动和噪音。高速时输出力矩也大大高于其他两相驱动器,定位精度高。广泛适用于雕刻机、数控机床、包装机械等分辨率要求较高的设备上。该驱动器特点包括: 1, 采用先进的双极性 PWM 恒流驱动技术。 2, 高速大力矩输出,避免丢步(空载转速高达 240~300r/min),最高转速达 1200r/min。 3, 灵活的输出电流设定,适用不同型号的电机。 4, 自带自动半流功能,减小电机发热。 5, 支持各种常用的 16 种细分功能,最大支持 128 细分。 6, 直流 12~48V 供电,输出峰值电流高达 5.0A。 7, 支持欠压保护、过流保护、过热保护等功能。 注意:严禁在驱动器驱动电机转动过程中更改拨码开关!!!
二、使用驱动
1. 控制信号接口
- 使能信号接口 ENA+、ENA-
使能信号 ENA:用驱动器的上下电进行电机通断电操作会使驱动器快速老化,为避免 这种情况,本驱动器设计了使能信号(ENA)输入端口,也就是通常所说的脱机信号。用户 可以随时控制此信号,当此信号有效时,驱动器将自动切断电机绕组电流,使电机处于自由 状态(无保持转矩)。当此信号不连接时默认为无效状态,这时电机绕组通以电流,可正常 工作。 - 方向输入接口 DIR+、DIR-
方向电平信号 DIR:此信号决定电机的旋转方向。如果此信号有效时,电机顺时针旋转, 则此信号无效时,电机逆时针旋转。驱动器工作于这种单脉冲模式。 - 脉冲输入接口 PUL+、PUL-
步进脉冲接口 PUL:步进电机驱动器把控制器发出的脉冲信号转化为步进电机的角位 移,驱动器每接受一个脉冲信号 PUL,就驱动步进电机旋转一个步距角,PUL 的频率和步 进电机的转速成正比。对于最佳输入要求,此信号占空比最好 1:1,脉冲信号的频率不大于 100KHz。
2.故障排除
3.硬件连接
三、实现代码
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "key.h"
#include "led.h"
#include "usmart.h"
#include "driver.h"
#include "hc05.h"
#include "usart3.h"
#include "string.h"
#include "timer.h"
int main(void)
{
u8 reclen=0;
u8 i;
u8 keyval;
SystemInit();
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
uart_init(115200);
usmart_dev.init(72);
LED_Init();
KEY_Init();
Driver_Init();
TIM8_OPM_RCR_Init(999,72-1);
LED1=0;
usmart_dev.init(72);
HC05_Init();
delay_ms(100);
USART2_RX_STA=0;
while(1)
{
keyval=KEY_Scan(0);
if(keyval==WKUP_PRES)
{
Locate_Abs(0,500);
}else if(keyval==KEY0_PRES)
{
Locate_Rle(300,500,CW);
}else if(keyval==KEY1_PRES)
{
Locate_Rle(300,500,CCW);
}
if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1))
{
LED1=0;
}
else
LED1=1;
delay_ms(10);
i++;
if(i==50)
{
i=0;
}
if(USART2_RX_STA&0X8000)
{
reclen=USART2_RX_STA&0X7FFF;
USART2_RX_BUF[reclen]=0;
if(reclen==1)
{
if(strcmp((const char*)USART2_RX_BUF,"0")==0)
Locate_Rle(300,500,CW);
if(strcmp((const char*)USART2_RX_BUF,"1")==0)
Locate_Rle(300,500,CCW);
}
USART2_RX_STA=0;
}
}
}
void Driver_Init(void);//驱动器初始化 void TIM8_OPM_RCR_Init(u16 arr, u16 psc);//TIM8_CH2 初始化 单脉冲+重复计数模式 void Locate_Rle(long num, u32 frequency, DIR_Type dir) //相对定位函数 void Locate_Abs(long num, u32 frequency);/绝对定位函数
- 驱动器初始化函数,主要就是初始化与驱动器 ENA+,DIR+相连的 2 个 IO为推挽输出;
- TIM8_CH2 初始化,此例程产生脉冲所使用的定时器均是 TIM8_CH2(PC7),定时器工
作在单脉冲+重复计数模式,TIM8 中断频率可以通过 driver.h 下的 RCR_VAL 宏更改,RCR_VAL 的范围 0~255,每计数 RCR_VAL+1 次中断一次,所以这个值越大,中断频率越低。需要注意 的是定时器必须初始化为 1MHz 计数频率。 - 相对定位函数:在步进电机当前位置基础上顺时针(CW)或者逆时针(CCW)走 num 个脉 冲,此函数带方向控制,DIR_Type 是 driver.h 下声明的一个枚举类型,用于设置电机旋转方向,参数 dir=CW,电机顺时针旋转;dir=CCW,电机逆时针旋转,实验时,如果电机旋转方 向和设置方向相反,不用更改电机接线,只需要更改 driver.h 下的 CW=0,CCW=1;参数 num范围 0~2147483647;frequency 范围 20Hz~100KHz。
- 绝对定位函数:步进电机按设定频率转动到设置的绝对位置,开发板上电和复位时,
当前位置为 0,电机的当前位置用一个 long 型变量 current_pos 指示。在 current_pos=0 的基 础上顺时针转动后 current_pos 为正,否则为负。此函数不带方向控制,驱动器根据参数的 正负自动设置电机旋转方向,转动到绝对位置。参数 num 范围-2147483648~2147483647; frequency 范围 20Hz~100KHz。
|