0基礎 | L298N電機驅動模塊 | 使用指南

引言

在嵌入式系統開發中,電機驅動是一個常見且重要的功能。L298N是一款高電壓、大電流電機驅動芯片,廣泛應用于各種電機控制場景,如直流電機的正反轉、調速,以及步進電機的驅動等。本文將詳細介紹如何使用51單片機來控制L298N電機驅動模塊,幫助大家快速上手相關項目開發。

L298N電機驅動模塊簡介

L298N內部包含4通道邏輯驅動電路,可以方便地驅動兩個直流電機或者一個兩相步進電機。它具有以下主要特點:

  • 高電壓、大電流:能夠提供高達46V的電壓和2A的電流,滿足大多數電機的驅動需求。
  • 邏輯兼容性好:可以直接與5V邏輯電平的微控制器(如51單片機)連接。
  • 控制靈活:通過控制輸入引腳的電平狀態,可以方便地實現電機的正反轉、制動和使能等功能。

從外觀上看,L298N模塊通常由紅色的電路板、黑色的散熱片以及多個引腳和接線端子組成,如圖所示:

(此處可替換為實際圖片鏈接)

模塊上的引腳功能如下:

  • 12V供電:為L298N內部電路提供工作電源,一般接12V直流電源。
  • 供電GND:電源地,與12V供電的地相連。
  • 5V供電:為L298N的邏輯電路提供5V電源,也可為5V單片機供電(注意電流限制)。
  • 板載5V使能:當該引腳接高電平時,5V供電輸出有效;接低電平時,5V輸出被切斷。
  • 通道A使能(ENA):控制通道A(輸出A)電機的使能狀態,高電平有效。
  • 邏輯輸入(IN1、IN2):控制通道A電機的正反轉,通過不同的電平組合實現。
  • 通道B使能(ENB):控制通道B(輸出B)電機的使能狀態,高電平有效。
  • 邏輯輸入(IN3、IN4):控制通道B電機的正反轉,通過不同的電平組合實現。
  • 輸出A:連接直流電機的一端或步進電機的一相。
  • 輸出B:連接直流電機的另一端或步進電機的另一相。

硬件連接

電源連接

  1. 將12V直流電源的正極連接到L298N模塊的12V供電引腳。
  2. 將12V直流電源的負極連接到L298N模塊的供電GND引腳。
  3. 如果51單片機的工作電壓為5V,可以將L298N模塊的5V供電引腳連接到51單片機的5V電源引腳,同時將L298N模塊的供電GND引腳也連接到51單片機的GND引腳。注意,L298N的5V供電能力有限,若同時驅動多個大電流設備,可能需要額外為51單片機提供獨立的5V電源。
注意
“板載5V” 的短接口連上時,12v和GND為電源接入,5V為電源輸出
通道A和通道B的使能引腳短接:可以控制兩個電機的正反轉
邏輯輸入IN1和IN2控制OUT1和OUT2;邏輯輸入IN3和IN4控制OUT3和OUT4;

電機連接

假設我們要驅動一個直流電機,將電機的兩端分別連接到L298N模塊的Output 1(輸出A)和Output 2(輸出B)引腳。

51單片機連接

  1. 使能引腳連接
    • 將51單片機的一個GPIO引腳(例如P1.0)連接到L298N模塊的通道A使能引腳(ENA)。
    • 將51單片機的另一個GPIO引腳(例如P1.1)連接到L298N模塊的通道B使能引腳(ENB)。
  2. 邏輯輸入引腳連接
    • 將51單片機的一個GPIO引腳(例如P1.2)連接到L298N模塊的邏輯輸入引腳IN1。
    • 將51單片機的一個GPIO引腳(例如P1.3)連接到L298N模塊的邏輯輸入引腳IN2。
    • 將51單片機的一個GPIO引腳(例如P1.4)連接到L298N模塊的邏輯輸入引腳IN3。
    • 將51單片機的一個GPIO引腳(例如P1.5)連接到L298N模塊的邏輯輸入引腳IN4。

板載5V使能連接(可選)

如果需要使用L298N模塊的板載5V供電功能,可以將51單片機的一個GPIO引腳連接到板載5V使能引腳,并在程序中進行控制。

軟件編程

電機正反轉

下面以51單片機C語言為例,給出控制直流電機正反轉的代碼示例:

#include <reg51.h>
#include < intrins.h>// 定義引腳
sbit ENA = P1^0;  // 通道A使能引腳
sbit ENB = P1^1;  // 通道B使能引腳
sbit IN1 = P1^2;  // 通道A邏輯輸入引腳1
sbit IN2 = P1^3;  // 通道A邏輯輸入引腳2
sbit IN3 = P1^4;  // 通道B邏輯輸入引腳1
sbit IN4 = P1^5;  // 通道B邏輯輸入引腳2// 延時函數
void delay(unsigned int time)
{unsigned int i, j;for(i = 0; i < time; i++)for(j = 0; j < 1275; j++);
}void main()
{while(1){// 電機正轉ENA = 1;  // 使能通道AIN1 = 1;IN2 = 0;delay(5000);  // 延時一段時間// 電機反轉ENA = 1;  // 保持通道A使能IN1 = 0;IN2 = 1;delay(5000);  // 延時一段時間// 電機停止ENA = 0;  // 失能通道Adelay(5000);  // 延時一段時間}
}

在上述代碼中:

  1. 首先定義了與L298N模塊連接的51單片機引腳。
  2. delay函數用于實現簡單的延時功能,通過嵌套循環來消耗一定的時間。
  3. main函數中,通過改變ENAIN1IN2的電平狀態來控制電機的正轉、反轉和停止。

電機調速

如果要實現電機的調速功能,可以使用PWM(脈沖寬度調制)技術。以定時器T0產生PWM信號控制ENA引腳為例,代碼如下:

#include <reg51.h>
#include < intrins.h>// 定義引腳
sbit ENA = P1^0;  // 通道A使能引腳
sbit ENB = P1^1;  // 通道B使能引腳
sbit IN1 = P1^2;  // 通道A邏輯輸入引腳1
sbit IN2 = P1^3;  // 通道A邏輯輸入引腳2
sbit IN3 = P1^4;  // 通道B邏輯輸入引腳1
sbit IN4 = P1^5;  // 通道B邏輯輸入引腳2// 定義PWM相關變量
unsigned char PWM_Count;
unsigned char PWM_Duty;// 初始化定時器T0為PWM模式
void Timer0_Init()
{TMOD = 0x01;  // 設置定時器T0為工作方式1TH0 = 0xFE;   // 設置定時器初值,產生1ms的定時周期(假設晶振為12MHz)TL0 = 0x33;ET0 = 1;      // 使能定時器T0中斷EA = 1;       // 使能總中斷TR0 = 1;      // 啟動定時器T0
}// 定時器T0中斷服務程序
void Timer0_ISR(void) interrupt 1
{TH0 = 0xFE;   // 重新賦初值TL0 = 0x33;PWM_Count++;if (PWM_Count >= PWM_Duty){ENA = 0;  // 低電平,電機減速}else{ENA = 1;  // 高電平,電機加速}if (PWM_Count >= 100)  // PWM周期為100ms{PWM_Count = 0;}
}// 設置PWM占空比
void Set_PWM_Duty(unsigned char duty)
{PWM_Duty = duty;
}void main()
{Timer0_Init();while(1){// 電機正轉并設置PWM占空比為50%

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80579.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80579.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80579.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flink 系列之十五 - 高級概念 - 窗口

之前做過數據平臺&#xff0c;對于實時數據采集&#xff0c;使用了Flink。現在想想&#xff0c;在數據開發平臺中&#xff0c;Flink的身影幾乎無處不在&#xff0c;由于之前是邊用邊學&#xff0c;總體有點混亂&#xff0c;借此空隙&#xff0c;整理一下Flink的內容&#xff0c…

大疆卓馭嵌入式面經及參考答案

FreeRTOS 有哪 5 種內存管理方式&#xff1f; heap_1.c&#xff1a;這種方式簡單地在編譯時分配一塊固定大小的內存&#xff0c;在整個運行期間不會進行內存的動態分配和釋放。它適用于那些對內存使用需求非常明確且固定&#xff0c;不需要動態分配內存的場景&#xff0c;優點是…

Java 線程池原理

Java 線程池是一種管理和復用線程的機制&#xff0c;其原理如下&#xff1a; 核心概念 線程池的初始化 &#xff1a;在創建線程池時&#xff0c;需要設置一些關鍵參數&#xff0c;如核心線程數&#xff08;corePoolSize&#xff09;、最大線程數&#xff08;maximumPoolSize&am…

大模型都有哪些超參數

大模型的超參數是影響其訓練效果、性能和泛化能力的關鍵設置,可分為以下幾大類別并結合實際應用進行詳細說明: 一、訓練過程相關超參數 學習率(Learning Rate) 作用:控制參數更新的步長,直接影響收斂速度和穩定性。過高會導致震蕩或過擬合,過低則收斂緩慢。調整策略:初…

路由器斷流排查終極指南:從Ping測試到Wireshark抓包5步定位法

測試路由器是否出現“斷流”&#xff08;網絡連接間歇性中斷&#xff09;&#xff0c;需通過多維度排查硬件、軟件及外部干擾因素。以下是詳細步驟指南&#xff1a; 一、基礎環境準備 設備連接 有線測試&#xff1a;用網線將電腦直接連接路由器LAN口&#xff0c;排除WiFi干擾。…

低代碼開發:開啟軟件開發的新篇章

摘要 低代碼開發作為一種新興的軟件開發方式&#xff0c;正在迅速改變傳統軟件開發的模式和效率。它通過可視化界面和預設的模板&#xff0c;使非專業開發者也能夠快速構建應用程序&#xff0c;極大地降低了開發門檻和成本。本文將深入探討低代碼開發的定義、優勢、應用場景以及…

基于Django汽車數據分析大屏可視化系統項目

基于Django汽車數據分析大屏可視化系統項目 一、項目概述 本項目是一個基于 Python 的汽車數據分析大屏可視化系統&#xff0c;旨在通過直觀的可視化界面展示汽車相關數據&#xff0c;幫助用戶更好地理解和分析汽車市場動態、車輛性能等信息。系統采用前后端分離的架構&#…

WebRTC通信原理與流程

1、服務器與協議相關 1.1 STUN服務器 圖1.1.1 STUN服務器在通信中的位置圖 1.1.1 STUN服務簡介 STUN&#xff08;Session Traversal Utilities for NAT&#xff0c;NAT會話穿越應用程序&#xff09;是一種網絡協議&#xff0c;它允許位于NAT&#xff08;或多重 NAT&#xff09;…

Beta分布--貝葉斯建模概率或比例常用分布

Beta分布是一種定義在區間 ([0, 1]) 上的連續概率分布&#xff0c;常用于描述比例或概率的不確定性。它的形狀由兩個正參數 (\alpha)&#xff08;alpha&#xff09;和 (\beta)&#xff08;beta&#xff09;控制&#xff0c;能夠呈現多種形態&#xff08;如對稱、偏態、U型等&am…

深度學習算法:開啟智能時代的鑰匙

引言 深度學習作為機器學習的一個分支&#xff0c;近年來在圖像識別、自然語言處理、語音識別等多個領域取得了革命性的進展。它的核心在于構建多層的神經網絡&#xff0c;通過模仿人腦處理信息的方式&#xff0c;讓機器能夠從數據中學習復雜的模式。 深度學習算法的基本原理…

深入了解linux系統—— 自定義shell

shell的原理 我們知道&#xff0c;我們程序啟動時創建的進程&#xff0c;它的父進程都是bash也就是shell命令行解釋器&#xff1b; 那bash都做了哪些工作呢&#xff1f; 根據已有的知識&#xff0c;我們可以簡單理解為&#xff1a; 輸出命令行提示符獲取并解析我們輸入的指令…

Redux和Vuex

為什么React和Vue需要Redux和Vuex 狀態管理需求的演變 #mermaid-svg-GaKl3pkZ82yc1m8E {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GaKl3pkZ82yc1m8E .error-icon{fill:#552222;}#mermaid-svg-GaKl3pkZ82yc1m8E…

Kubernetes排錯(十三):Pod間偶發超時問題排查

在微服務架構中&#xff0c;Pod間偶發的通信超時是最令人頭疼的問題之一。本文將通過生產環境中的真實案例&#xff0c;手把手教你定位這類"幽靈問題"。 一、快速定位問題方向&#xff08;5分鐘縮小范圍&#xff09; 1. 基礎檢查三板斧 # 檢查Service與Endpoint映…

Nginx 源碼安裝成服務

一、環境準備 一臺裝有 CentOS 7.9 的虛擬機&#xff08;IP: 192.168.40.81&#xff09;nginx-1.21.6.tar.gz 安裝包一個&#xff08;版本隨意&#xff09; 二、安裝 1&#xff09;解壓 nginx-1.21.6.tar.gz tar -xzvf nginx-1.21.6.tar.gz -tar&#xff1a;這是一個在 Linu…

L51.【LeetCode題解】438. 找到字符串中所有字母異位詞(四種方法)

目錄 1.題目 2.分析 暴力解法 方法1:排序(超時) 方法2:哈希表(險過) ★判斷兩個哈希表是否相同算法(通用方法,必須掌握) 能相等的前提:兩個哈希表的大小相等 哈希表有迭代器,可以使用范圍for從頭到尾遍歷 提交結果 優化方法:定長滑動窗口 提交結果 使用哈希數組更快…

Qt模塊化架構設計教程 -- 輕松上手插件開發

概述 在軟件開發領域,隨著項目的增長和需求的變化,保持代碼的可維護性和擴展性變得尤為重要。一個有效的解決方案是采用模塊化架構,尤其是利用插件系統來增強應用的功能性和靈活性。Qt框架提供了一套強大的插件機制,可以幫助開發者輕松實現這種架構。 模塊化與插件系統 模…

深入理解 HashMap 的索引計算:右移與異或的作用

在 Java 中&#xff0c;HashMap 是一種高效的數據結構&#xff0c;它通過將鍵映射到數組中的索引位置來實現快速的插入和查找。但之前看源碼總是理解到它要hash之后散列到數組中某一個位置&#xff0c;但卻從未深究它究竟怎么散列的&#xff0c;如果不夠散那就意味著hash沖突增…

overleaf較高級的細節指令

換行命令 原來代碼是將三個矩陣表達式在同一行顯示&#xff0c;使用aligned環境&#xff08;需引入amsmath宏包&#xff0c;一般文檔導言區默認會引入&#xff09;&#xff0c;把三個矩陣的定義分別放在不同行&#xff0c;可通過\\換行。 對齊命令 &放在等號前&#xff0…

LiteLLM:統一API接口,讓多種LLM模型調用如臂使指

在人工智能迅猛發展的今天,各種大語言模型(LLM)層出不窮。對開發者而言,如何高效集成和管理這些模型成為一個棘手問題。LiteLLM應運而生,它提供了一個統一的API接口,讓開發者可以輕松調用包括OpenAI、Anthropic、Cohere等在內的多種LLM模型。本文將深入介紹LiteLLM的特性、…

Google語法整理

以下是從整理出的 Google 語法&#xff1a; site&#xff1a;指定域名&#xff0c;如 “apache site:bbs.xuegod.cn”&#xff0c;可查詢網站的收錄情況 。 inurl&#xff1a;限定在 url 中搜索&#xff0c;如 “inurl:qq.txt”&#xff0c;可搜索 url 中包含特定內容的頁面&a…