序言
人生如逆旅,我亦是行人。————苏轼《临江仙·送钱穆父》
目录:L298N马达驱动介绍编码器介绍马达介绍新建工程编撰代码实验结果一、L298N马达驱动介绍
B站-视频讲解:l298n马达驱动模块马达正反转马达调速
L298N是ST公司生产的一种高电流、大电压马达驱动芯片。该芯片采用15脚封装。主要特征是:工作电流高,最高工作电流可达46V;输出电压大,顿时峰值电压可达3A,持续工作电压为2A;额定功率25W。内含两个H桥的高电流大电压全桥式驱动器,可以拿来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平讯号控制;具有两个使能控制端,在不受输入讯号影响的情况下容许或严禁元件工作有一个逻辑电源输入端,使内部逻辑电路部份在低电流下工作;可以外接测量阻值,将变化量反馈给控制电路。使用L298N芯片驱动马达,该芯片可以驱动一台两相步进马达或四相步进马达,也可以驱动两台直流马达。
下边为最常见的一款L298N芯片,值得注意的是,它早已外置的5V供电linux 定时器 驱动,所以毋须从外边再接5V输入。届时5V端子将成为5V输出,为了保证L298N供电的稳定性(供电不足可能导致L298N的毁坏),不建议使用此5V供电作为单片机的电源。
插口介绍:一、12V供电
理论上最高可以接入35v(没试过最低和最高的电流,此处是某宝买家提供的参数),订购直流马达前,先认清楚直流马达的相关参数和性能,假若满足L298N的使用要求,再进行订购使用,否则容易毁坏L298N。
二、GND共地
顾名思义,接地线。但要注意的是,此处GND不但要接驱动电源的GND,倘若是和别的单片机或则其他系统联接在一起的时侯,一定要从这儿再引出一根GND和单片机或则系统的GND相连。即整个系统的GND联接在一起,假如不联接在一起,电流没有参考电平,未能进行正常的控制。
三、5V供电
这是一个特殊的端口。既可以做L298N的逻辑电流的输入,也可以做外部单片机或系统的5v供电口。具体切换在板载5v跳帽中介绍。
四、板载5V跳帽五、通道AB使能跳帽六、逻辑输入七、输出AB
直接接相应的输出即可。
!!指出!!:L298N马达驱动、STM32单片机、编码器马达两者在使用过程中,一定要把两者的GND联接在一起,也就是共地!!!驱动电流可以接受的输入范围是7~12V,板子标示为VCC输入,通常都是使用航模电瓶或买电瓶盒。
使能端A/B输入引脚1/3输入引脚2/4马达运动形式
前进(顺秒针转动)
退后(逆秒针转动)
紧急停车
紧急停车
停止(自由转动)
二、编码器介绍
B站-视频介绍:【电工知识】编码器是干哪些用的,这下总算明白了!
编码器(encoder)是将讯号(如比特流)或数据进行编制、转换为可用以通信、传输和储存的讯号方式的设备。编码器可以把角位移或直线位移转换成联通号,是工业中常用的马达定位设备,可以精确地测试出马达的角位移和旋转位置。其最直接的作用就是可以检测位移,通过位移就可以估算出速率。
简单的来说查看linux是什么系统,学习马达上的编码器,是为了才能通过编码器测出马达的怠速,进而才能更好地控制马达进行工作。
1.编码器的种类按输出讯号分:增量式和绝对式
增量式:就是每转过单位的角度就发出一个脉冲讯号。一般为A相、B相、Z相输出,A相、B相为互相延后1/4周期的脉冲输出,按照延后关系可以区别正反转,并且通过取A相、B相的上升和增长沿可以进行2或4外频;Z相为单圈脉冲,即每圈发出一个脉冲。
绝对式:就是对应一圈,每位基准的角度发出一个惟一与该角度对应二补码的数值,通过外部记圈元件可以进行多个位置的记录和检测。
区别在于:绝对式掉电不遗失读取数值,增量式会遗失。
按传感器技术分:光电式和霍尔式(光式、磁式、电容式)
光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感。这是应用最多的传感,由光源、光码盘和光敏器件组成。
霍尔编码器是一种通过磁电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感。是由霍尔码盘(磁环)和霍尔器件组成。
光电式:当光线穿过蜗杆盘时,接收器会计一次数,并传送给CPU。不同的怠速,自然在相同时间内的计数值不一样,从而达到测速的功能。
霍尔式:霍尔码盘是在一定半径的圆板上等分地布置有不同的磁体。霍尔码盘与电动机同轴,电动机旋转时,霍尔器件检查输出若干脉冲讯号,为判定转向,通常输出两组存在一定相位差的方波讯号(一般相差90°linux运维面试题,我们称为AB相)。
测速可以通过估算相同时间内的脉冲数,判定转向:
可以看见右图,当顺秒针旋转时,A交往在增长沿时,B相是高电平。A交往在上升沿时,B相是低电平;当逆秒针旋转时,(即把里面的波形从右向左看)A交往在增长沿时,B相是低电平。A交往在上升沿时,B相是高电平。因而判定正反转。
二者的主要区别:检查方法不同:霍尔编码器是电磁监测位置,光电编码器是光电测量位置精度不同:霍尔编码器通常是精度不高,用作简略的位置反馈,而光电编码器精度高,可以实现高精度的位置测量2.霍尔编码器实物图接线
接线表:
霍尔编码器的插口STM32单片机的IO口设置的工作模式
VCC
VCC(3.3V)
GND
GND
A相
接单片机的脉冲测量插口
定时器编码模式
B相
接单片机的脉冲测量插口
定时器编码模式
霍尔编码器的插口L298N马达驱动的插口
M+(马达线+)
接马达驱动的输出OUT1
M-(马达线-)
接马达驱动的输出OUT2
3.外频原理
我们通过软件的方式实现四外频,首先可以看出图中编码器输出的AB相波形,正常情况下我们使用M法测速的时侯,会通过检测单位时间内A相输出的脉冲数来得到速率信息,常规的方式,我们只检测A相(或则B相)的上升沿或则增长沿,也就是图中对应数字1234中的某一个,这样就只能计数3次,而四外频的方式是检测A相和B相编码器的上升沿和增长沿。这样在同样的时间内,可以计数12次(3个1234的循环)。这就是四外频的原理。
由于编码器输出的是标准的方波,所以我们可以直接用单片机进行读取,在软件中的处理方式分两种,自带编码器插口的单片机如STM32,可以直接使用硬件计数,而没有编码器插口的单片机如51单片机,可以通过外部中断读取,例如把编码器A相输出接到单片机的外部中断输入口,这样就可以通过跳变沿触发中断,之后在对应的中断服务函数上面,通过B相电平来确定正反转。如当一个A相来一个跳变沿的时侯,假如B相是高电平就觉得是正转,低电平就觉得是反转。
三、电机介绍
马达(英语:Electricmachinery,也称“马达”)是指根据电磁感应定理实现电能转换或传递的一种电磁装置。
马达在电路中是用字母M(旧标准用D)表示,它的主要作用是形成驱动扭矩,作为用家电或各类机械的动力源,发电机在电路中用字母G表示,它的主要作用是借助机械能转化为电能。
我所使用的也是一种减速马达,即马达背部有一个减速器,马达转动推动减速器里的蜗杆后再通过减速器的输出轴输出相应的怠速。例如减速比是1:30,表示马达转动30圈,马达的减速器转动一圈。
M法测速
最终接线表:(只使用IN1和IN2这一组,对应OutA(输出A))霍尔编码器的插口STM32单片机的IO口
编码器VCC(5V)
VCC(5V)
编码器GND
GND
编码器A相
定时器编码器模式的通道(TIMx_CH1)
编码器B相
定时器编码器模式的通道(TIMx_CH2)
霍尔编码器的插口L298N马达驱动的插口
M+(马达线+)
接马达驱动的输出OUT1
M-(马达线-)
接马达驱动的输出OUT2
STM32单片机的IO口L298N马达驱动
GND
L298N的GND
输出IO口高电平
IN1
输出IO口低电平
IN2
PWM波形成通道(定时器PWM波形成通道)
通道A使能端
12V供电电瓶L298N马达驱动
正极(黑线)
L298N的GND(三个电源接入的最中间)
负极(红线)
L298N的12V插口(三个电源接入的一侧)
四、新建工程硬件:1.打开STM32CubeMX软件,点击“新建工程”
2.选择MCU和封装
3.配置时钟
具体学习可以参考:博客网站-RCC学习
4.配置调试模式
5.并口(USART1)配置
6.引脚(IO)配置
配置两输出IO引脚,作为输出马达驱动的IN1和IN2。
7.定时器配置为PWM输出模式
配置定时器1的通道1形成PWM波linux 定时器 驱动,用以联接L298N马达驱动模块的输出A的使能输入。(将尾纤帽拿掉)
8.定时器配置为编码器模式(Encoder)
配置定时器2(TIM2)为编码器模式(EncoderMode),联接马达里面的编码器的A相与B相。
分频系数表示对计数值进行分频,编码器模式默认时四外频。
编码器上的AB相应当接编码器模式对应的引脚。编码器模式就相当于一个专门计数的工具,当编码器的码盘转动时,A、B相输出圆形波形脉冲,步入PA0和PA1进行计数(数脉冲)。
9.定时器配置中断函数
记得开启定时器中断,注:编码器的更新中断定时器最好要比10ms定时器的优先级高,拿来避免在更新中被打断。
10.生成代码
输入项目名称和路径。(注:路径中不容许出现英文。)
选择应用的IDE,开发环境MDK-ARMV5
每位外设生成独立的’.c/.h’文件
11.建立工程
五、编写代码
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM1_Init();
MX_TIM2_Init();
MX_TIM3_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim3); //开启10ms中断
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //开启PWM
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_1); //开启编码器定时器
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_2); //开启编码器定时器
__HAL_TIM_ENABLE_IT(&htim2,TIM_IT_UPDATE); //开启编码器定时器更新中断,防溢出处理
__HAL_TIM_SET_COUNTER(&htim2, 30000); //将编码器定时器初始值设定为30000
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
//中断处理函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM3)
{
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,20000);
}
}
六、实验结果
完成上述过程,结果是马达会转动上去,假如马达没有转动上去,可以通过检测线路,或则会出现板子焚毁的情况,会其他的情况。假如板子仍可以正常工作且接线无误,则考虑是不是L298N马达驱动的问题,可以通过使用万用表进行检测OUT1和OUT2两个引脚和GND之间是否有电流差,假如测得电流很小,则可能是驱动烧毁。换了新的驱动以后,测试有没有用的时侯,切忌一定要记得L298N驱动模块与STM32单片机要共地。(同一个电位参考)
感谢阅读