织梦网站响应式模板免费下载,qq群优惠券里面网站怎么做的,合肥网络公司seo,潍坊网站建设 绮畅文章目录 前言一、模块参数二、接口说明三、准备工作四、直流电机驱动引脚接线效果展示 五、两相四线步进电机驱动步进电机相关概念拍数驱动时序引脚接线效果展示 六、参考示例 前言 L298N 是一种常见的双 H 桥电机驱动模块#xff0c;广泛用于驱动直流电机和步进电机。它基于… 文章目录 前言一、模块参数二、接口说明三、准备工作四、直流电机驱动引脚接线效果展示 五、两相四线步进电机驱动步进电机相关概念拍数驱动时序引脚接线效果展示 六、参考示例 前言 L298N 是一种常见的双 H 桥电机驱动模块广泛用于驱动直流电机和步进电机。它基于 ST 的 L298N 芯片具有高电流承载能力和灵活的控制模式适合机器人、自动化设备等领域。
一、模块参数
1、驱动芯片L298N 双 H 桥直流电机驱动芯片 2、驱动电压 Vs5V35V 如需要板内取电则供电范围Vs7V35V 3、驱动电流Io2A(MAX) 4、逻辑电压Vss5V7V可板内取电5V 5、逻辑电流:036mA 6、控制信号输入电压范围 低电平0.3V≤Vin≤1.5V 高电平2.3V≤Vin≤Vss 7、使能信号输入电压范围 低电平0.3≤Vin≤1.5V控制信号无效 高电平2.3V≤Vin≤Vss控制信号有效 8、最大功耗20W温度 T75℃时 9、存储温度25℃130℃
二、接口说明 关于模块供电说明 供电一板上除了L298N外还有7805的5V稳压芯片当供电为5V到7V区间的时候模块内置的7805芯片不能正常工作的。所以供电端接5-7V外部电源只负责给电机供电然后逻辑端外接5V逻辑电源。 供电二当供电电压为7-12V时插上板载5V使能的跳线帽此时的逻辑端不但不用外接5V电源还可以输出5V为单片机进行供电。 供电三当供电在大于12V的时候此时必须断开板载5V使能跳线帽再在逻辑端子接入5V电源给芯片供电。如果不断开板载使能跳线帽的话可能会损坏内置的7805的稳压芯片。 注意板子没有升降压功能供电范围要根据接的电机选择避免供电过低过高带不动电机或烧坏电机如驱动12V的电机则接12V的电源。
三、准备工作 STM32F103最小系统板、L298N驱动模块、2个直流电机或1个两相四线步进电机、EC11旋转编码器模块以及供电电源。
四、直流电机驱动 该驱动板可驱动 2 路直流电机使能端 ENA、ENB 为高电平时有效控制方式及直流电机状态表如下所示 若要对直流电机进行 PWM 调速需设置 IN1 和 IN2确定电机的转动方向然后对使能端输出 PWM 脉冲即可实现调速。注意当使能信号为 0 时电机处于自由停止状态当使能信号为 1且 IN1 和 IN2 为 00 或 11 时电机处于制动状态阻止电机转动。IN1和IN2控制输出AIN3和IN4控制输出B。
引脚接线
L298NSTM32F103 / 电源 / 直流电机输出AB连接电机1212V供电电源正供电GND电源负旋转编码器ABSPB3PB1PB0通道AB使能去掉跳线帽使能A接PA6使能B接PA7 PWM调速IN1IN2PA0PA1IN3IN4PA2PA3
效果展示 五、两相四线步进电机驱动
步进电机相关概念 相数——步进电机的N、S磁场的激磁线圈对数如两相四线步进电机就有两对极N、S磁场的激磁线圈四线A、A-、B、B-AA-BB-是连通的在不知道四线哪两两线为一对激磁线圈通过短接两两线有明显阻力变化的则为一对线圈。 拍数——转子转动一周定子绕组通电的次数以两相电机为例有两相四拍运行方式即(A)—(B)—(A-)—(B-两相八拍运行方式(A)—(AB)—(B)–(BA-)—(A-)—(A-B-—(B-–(B-A)以此循环。 步距角——步进电机接收到一个脉冲信号后驱动电机按设定的方向转动的一个固定角度。如两相四线步进电机的基本步距角是1.8°即一个脉冲走1.8°。 同时为了减弱或消除步进电机的低频振动开发了细分驱动技术。细分后电机运行时的实际步距角是基本步距角的几分之一微步即1/4-step、1/8-step、1/16-step等。 比如两相步进电机的基本步距角是1.8°如果没有细分则是200个脉冲走一圈360°。细分是通过驱动器靠精确控制电机的相电流所产生的如果是10细分则发一个脉冲电机走0.18°即2000个脉冲走一圈360°电机的精度能否达到或接近0.18°还取决于细分驱动器的细分电流控制精度等其它因素。
细分驱动单圈步数360°÷角度四拍1细分1.8°—— 单圈200步八拍2细分0.9°—— 单圈400步十六拍4细分0.45°—— 单圈800步三十二拍8细分0.225°—— 单圈1600步六十四拍16细分0.1125°—— 单圈3200步
拍数驱动时序 单4拍整步方式驱动时序 双4拍整步方式驱动时序 电机转动方向如下所示(A)—(B)—(A-)—(B-以此循环,
特性单四拍双四拍通电相数每次一相每次两相功耗较低较高步进角一致一致力矩较小较大定位稳定性一般更高 8拍半步方式驱动时序 电机转动方向如下所示(A)—(AB)—(B)–(BA-)—(A-)—(A-B-—(B-—(B-A)以此循环, 反转时控制时序倒过来控制就可实现反向转动。
引脚接线
L298NSTM32F103 / 电源 / 两相四线电机12V供电电源正供电GND电源负旋转编码器ABSPB3PB1PB0通道AB使能把跳线帽插回去IN1IN2PA0PA1IN3IN4PA2PA3OUT1OUT2AA-OUT3OUT4BB-
效果展示 六、参考示例
main.c
#include stm32f10x.h // Device header
#include encoder.h
#include l298n.h
#include usart.h
#include timer.h
#include pwm.hint32_t RxData;int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);usart_Init();L298N_Init();Encoder_Init();Timer_Inti();PWM_Init();while(1){ RxData Encoder_Get();//直流电机控制正反转调速TIM_SetCompare1(TIM3,RxData);if(Encoder_GetKey() 0){Motor1_Zturn();Motor2_Zturn();}else{Motor1_Rturn();Motor2_Rturn();}//步进电机控制正反转
// if(Encoder_GetKey() 0)
// {
// switch(RxData)
// {
// case 1:
// ZturndouControl_4();
// break;
// case 2:
// RturndouControl_4();
// break;
// }
// }else{
// switch(RxData)
// {
// case 1:
// ZturnControl_8();
// break;
// case 2:
// RturnControl_8();
// break;
// }
// }}
}
l298n.c
#include l298n.h
#include delay.h
#include timer.hvoid L298N_Init(void)
{//通过旋转编码器控制步进电机正转翻转加减速停止GPIO_InitTypeDef GPIO_InitStructurn;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructurn.GPIO_ModeGPIO_Mode_Out_PP;GPIO_InitStructurn.GPIO_PinGPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructurn.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructurn);
}void Motor1_Stop(void) //电机1停止
{IN1(0);IN2(0);
}void Motor2_Stop(void) //电机2停止
{IN3(0);IN4(0);
}void ALL_Stop(void) //两个电机全停止
{IN1(0);IN2(0);IN3(0);IN4(0);
}void Motor1_Zturn(void) //电机1正转
{IN1(1);IN2(0);
}void Motor1_Rturn(void) //电机1反转
{IN1(0);IN2(1);
}void Motor2_Zturn(void) //电机2正转
{IN3(1);IN4(0);
}void Motor2_Rturn(void) //电机2反转
{IN3(0);IN4(1);
}void Control_4(void) //单四拍
{if(Timer_GetCounter()2500){IN1(1);IN2(0);IN3(0);IN4(0);delay_ms(10);}else if(Timer_GetCounter()2500 Timer_GetCounter()5000){IN1(0);IN2(1);IN3(0);IN4(0);delay_ms(10);}else if(Timer_GetCounter()5000 Timer_GetCounter()7500){IN1(0);IN2(0);IN3(1);IN4(0);delay_ms(10);}else if(Timer_GetCounter()7500 Timer_GetCounter()10000){IN1(0);IN2(0);IN3(0);IN4(1);delay_ms(10);}
}void ZturndouControl_4(void) //正双四拍
{if(Timer_GetCounter()2500){IN1(0);IN2(1);IN3(1);IN4(0);delay_ms(10);}else if(Timer_GetCounter()2500 Timer_GetCounter()5000){IN1(0);IN2(1);IN3(0);IN4(1);delay_ms(10);}else if(Timer_GetCounter()5000 Timer_GetCounter()7500){IN1(1);IN2(0);IN3(0);IN4(1);delay_ms(10);}else if(Timer_GetCounter()7500 Timer_GetCounter()10000){IN1(1);IN2(0);IN3(1);IN4(0);delay_ms(10);}
}void RturndouControl_4(void) //反双四拍
{if(Timer_GetCounter()2500){IN1(1);IN2(0);IN3(1);IN4(0);delay_ms(10);}else if(Timer_GetCounter()2500 Timer_GetCounter()5000){IN1(1);IN2(0);IN3(0);IN4(1);delay_ms(10);}else if(Timer_GetCounter()5000 Timer_GetCounter()7500){IN1(0);IN2(1);IN3(0);IN4(1);delay_ms(10);}else if(Timer_GetCounter()7500 Timer_GetCounter()10000){IN1(0);IN2(1);IN3(1);IN4(0);delay_ms(10);}
}void ZturnControl_8(void) //正八拍
{if(Timer_GetCounter()1250){IN1(1);IN2(0);IN3(0);IN4(0);delay_ms(10);}else if(Timer_GetCounter()1250 Timer_GetCounter()2500){IN1(1);IN2(0);IN3(1);IN4(0);delay_ms(10);}else if(Timer_GetCounter()2500 Timer_GetCounter()3750){IN1(0);IN2(0);IN3(1);IN4(0);delay_ms(10);}else if(Timer_GetCounter()3750 Timer_GetCounter()5000){IN1(0);IN2(1);IN3(1);IN4(0);delay_ms(10);}else if(Timer_GetCounter()5000 Timer_GetCounter()6250){IN1(0);IN2(1);IN3(0);IN4(0);delay_ms(10);}else if(Timer_GetCounter()6250 Timer_GetCounter()7500){IN1(0);IN2(1);IN3(0);IN4(1);delay_ms(10);}else if(Timer_GetCounter()7500 Timer_GetCounter()8750){IN1(0);IN2(0);IN3(0);IN4(1);delay_ms(10);}else if(Timer_GetCounter()8750 Timer_GetCounter()10000){IN1(1);IN2(0);IN3(0);IN4(1);delay_ms(10);}
}void RturnControl_8(void) //反八拍
{if(Timer_GetCounter()1250){IN1(1);IN2(0);IN3(0);IN4(1);delay_ms(10);}else if(Timer_GetCounter()1250 Timer_GetCounter()2500){IN1(0);IN2(0);IN3(0);IN4(1);delay_ms(10);}else if(Timer_GetCounter()2500 Timer_GetCounter()3750){IN1(0);IN2(1);IN3(0);IN4(1);delay_ms(10);}else if(Timer_GetCounter()3750 Timer_GetCounter()5000){IN1(0);IN2(1);IN3(0);IN4(0);delay_ms(10);}else if(Timer_GetCounter()5000 Timer_GetCounter()6250){IN1(0);IN2(1);IN3(1);IN4(0);delay_ms(10);}else if(Timer_GetCounter()6250 Timer_GetCounter()7500){IN1(0);IN2(0);IN3(1);IN4(0);delay_ms(10);}else if(Timer_GetCounter()7500 Timer_GetCounter()8750){IN1(1);IN2(0);IN3(1);IN4(0);delay_ms(10);}else if(Timer_GetCounter()8750 Timer_GetCounter()10000){IN1(1);IN2(0);IN3(0);IN4(0);delay_ms(10);}
}