一、对42步进电机使用演示记录
一、硬件
42步进电机:
主要参数根据标识得到:
电流:1.7A 即驱动器上选择时至少要大于1.7A。
步距角:1.8°,42电机转动时的最小角度
接线方式:根据步进电机标识的颜色于字母和驱动器上标识的字母一 一对应连接。
步进电机驱动器
驱动器上面的标识:
1、ENA功能说明:控制器的输出是通过该组信号使能,又称脱机信号。当此信号有效时,输出关闭,电机绕组电流为零, 电机为无力矩状态,可以自由转动电机,适合需要手动调整电机的场合。
2、DIR功能说明:电机的方向控制信号,当此信号有效时,电机顺时针转动,当此信号无效时,电机逆时针旋转。、
3、PUL功能说明:电机的转动控制信号,驱动器接收到的脉冲信号电机就会按照既定的方向旋转。电机的角位移与脉冲的数量成正比, 速度与脉冲的频率成正比。通常脉冲的有效宽度>=5us,频率<=125KHz。
带+号的根据需要:采用共阳极或共阴极接法,接单片机上的vcc(5v)或gnd。
4、驱动器上的vcc 和gnd ,则是接直流电源的正极和负级。电源选择上一般采用开关电源,或直流电源。且电源的电压在驱动器标识的范围,关于电流则可以根据挡位进行调节,调节电流挡位到合适的挡位,(有无负载的因素直接影响电机的转动,所以无负载,满足基本电机转动电流的挡位即可,有负载时调到大一些的挡位)
5、驱动器的细分设置由拨码开关的SW1~SW3来设定,默认为2细分,一般的42步进电机的步进角都是1.8°, 因此电机旋转一圈需要360° /1.8° =200个脉冲,这里2细分转一圈 需要的脉冲数200*2=400个。(量程最高32细分,所以需要脉冲数6400个,且基本上都是对应的。)
二、代码编写
42步进电机控制转动原理:
由三个类型的输入决定:
PUL提供脉冲,进行转动。
DIR提供转动方向,顺,逆转。
ENA提供转动使能,手动转动调节/信号使能。(若不需要调节,实际都可以不接)
1、生成代码
此处通过配置tim2定时器的输出比较,用以生成可变频率的脉冲方波信号,来控制电机的快慢,
代码配置
__IO uint16_t Toggle_Pulse = 100; //小于10丢失,10~7000转动会越来越慢
//配置tim2
htim2.Instance = TIM2;
htim2.Init.Prescaler = 84-1;//分频得到1mhz
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 0xffff;//默认
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
//配置比较输出
sConfigOC.OCMode = TIM_OCMODE_TOGGLE;
sConfigOC.Pulse = Toggle_Pulse;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK)
//开启tim
HAL_TIM_Base_Start(&htim2);
HAL_TIM_OC_Start_IT(&htim2,TIM_CHANNEL_3); /* 启动比较输出并使能中断 */
TIM_CCxChannelCmd(TIM2,TIM_CHANNEL_3,TIM_CCx_ENABLE); /* 使能输出 */
//输出比较中断回调
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
uint32_t count;
uint32_t tmp;
count=__HAL_TIM_GET_COUNTER(htim);
tmp = 0xffff & (count+Toggle_Pulse); //改变频率
__HAL_TIM_SET_COMPARE(htim,TIM_CHANNEL_3,tmp);//设置占空比
}
//用以配置转动方向和使能开关(通过输出高低电平进行控制)
HAL_GPIO_WritePin(GPIOE, DIR_Pin, GPIO_PIN_SET);// 方向 顺/逆
HAL_GPIO_WritePin(GPIOE, ENA_Pin, GPIO_PIN_RESET);// 开启/关闭