當(dāng)前位置: 首頁(yè) > 傳感測(cè)量產(chǎn)品 > 工業(yè)傳感器 > 霍爾傳感器
發(fā)布日期:2022-10-09 點(diǎn)擊率:1238
霍爾傳感器 stm32:stm32—霍爾傳感器的初步使用 第1張" title="霍爾傳感器 stm32:stm32—霍爾傳感器的初步使用 第1張-傳感器知識(shí)網(wǎng)"/>
目錄
一、簡(jiǎn)介二、連接三、代碼
一、簡(jiǎn)介
霍爾器件是一種磁傳感器。用它們可以檢測(cè)磁場(chǎng)及其變化,可在各種與磁場(chǎng)有關(guān)的場(chǎng)合中使用。在模塊測(cè)試的時(shí)候也很簡(jiǎn)單,用手在附近其他引腳波動(dòng)也會(huì)造成磁場(chǎng)變化,可以檢測(cè)得出,此外通過(guò)它,將許多非電、非磁的物理量例如力、力矩、壓力、應(yīng)力、位置、位移、速度、加速度、角度、角速度、轉(zhuǎn)數(shù)、轉(zhuǎn)速以及工作狀態(tài)發(fā)生變化的時(shí)間等,也可以通過(guò)本傳感器轉(zhuǎn)變成電量來(lái)進(jìn)行檢測(cè)和控制。
按照霍爾器件的功能可將它們分為:霍爾線(xiàn)性器件和霍爾開(kāi)關(guān)器件。前者輸出模擬量,后者輸出數(shù)字量。本模塊是霍爾開(kāi)關(guān)傳感器
二、連接
將VCC和GND連接在開(kāi)發(fā)板對(duì)應(yīng)的引腳上(此處選擇普中STM32F103開(kāi)發(fā)板),
D0接在PD7上;因?yàn)楸緜鞲衅魇呛突魻栭_(kāi)關(guān)器件,所以雖然有D0口但是沒(méi)有什么用處,只是擺設(shè)。
三、代碼
在huoer.h 文件中,我們先進(jìn)行宏定義,方便移植
定義完了之后,再對(duì)huoer.c文件中的PC4接收引腳進(jìn)行初始化
#include “frame.h”
//對(duì)霍爾傳感器進(jìn)行初始化
最后,在main.c函數(shù)里面進(jìn)行情況選擇
1、霍爾傳感器是什么?
答:霍爾傳感器是根據(jù)霍爾效應(yīng)制作的一種磁場(chǎng)傳感器。
用磁鐵去靠近霍爾傳感器時(shí),霍爾傳感器的引腳電平會(huì)產(chǎn)生變化。
2、霍爾傳感器主要用在什么地方?
答:霍爾傳感器可測(cè)速、計(jì)數(shù)、限位上。
舉例限位功能:兩個(gè)霍爾傳感器形成45°的夾角,電機(jī)邊緣粘著一個(gè)磁鐵,一旦電機(jī)轉(zhuǎn)動(dòng)導(dǎo)致磁鐵觸發(fā)任意其中一個(gè)霍爾傳感器,則STM32檢測(cè)到觸發(fā)后立刻停止電機(jī),不能再繼續(xù)往此方向轉(zhuǎn)動(dòng)。以此達(dá)到限制電機(jī)轉(zhuǎn)動(dòng)角度的作用。
3、本文使用的是什么霍爾傳感器模塊?
答:
香瓜買(mǎi)的霍爾傳感器模塊一共有四個(gè)引腳,GND、VCC、D0、A0。
其中只需要用到三根線(xiàn),GND、VCC、D0。(A0不知做啥用的,計(jì)數(shù)?)
使用方法:
1)5V供電。
2)用跳線(xiàn)連接D0和STM32的IO口(本文連接的是PA11)。
3)D0默認(rèn)是高電平,但磁鐵的特定一面(磁鐵另一面無(wú)用)去靠近霍爾傳感器模塊時(shí),D0會(huì)被拉低。
4、霍爾傳感器與限位開(kāi)關(guān)有什么區(qū)別?
答:
1)限位開(kāi)關(guān)
①優(yōu)點(diǎn):無(wú)功耗。
②缺點(diǎn):易損壞。
2)霍爾傳感器
①優(yōu)點(diǎn):不易損壞。
②缺點(diǎn):有功耗。
六、實(shí)驗(yàn)步驟
1、編寫(xiě)并添加霍爾傳感器驅(qū)動(dòng)
1)編寫(xiě)驅(qū)動(dòng)GUA_Hall_Sensor.c(存放在“……HARDWARE”)
實(shí)驗(yàn)前提
1、在進(jìn)行本文步驟前,請(qǐng)先閱讀以下博文:
暫無(wú)
2、在進(jìn)行本文步驟前,請(qǐng)先實(shí)現(xiàn)以下博文:
暫無(wú)
五、基礎(chǔ)知識(shí)
1、霍爾傳感器是什么?
答:霍爾傳感器是根據(jù)霍爾效應(yīng)制作的一種磁場(chǎng)傳感器。
用磁鐵去靠近霍爾傳感器時(shí),霍爾傳感器的引腳電平會(huì)產(chǎn)生變化。
2、霍爾傳感器主要用在什么地方?
答:霍爾傳感器可測(cè)速、計(jì)數(shù)、限位上。
舉例限位功能:兩個(gè)霍爾傳感器形成45°的夾角,電機(jī)邊緣粘著一個(gè)磁鐵,一旦電機(jī)轉(zhuǎn)動(dòng)導(dǎo)致磁鐵觸發(fā)任意其中一個(gè)霍爾傳感器,則STM32檢測(cè)到觸發(fā)后立刻停止電機(jī),不能再繼續(xù)往此方向轉(zhuǎn)動(dòng)。以此達(dá)到限制電機(jī)轉(zhuǎn)動(dòng)角度的作用。
3、本文使用的是什么霍爾傳感器模塊?
答:
香瓜買(mǎi)的霍爾傳感器模塊一共有四個(gè)引腳,GND、VCC、D0、A0。
其中只需要用到三根線(xiàn),GND、VCC、D0。(A0不知做啥用的,計(jì)數(shù)?)
使用方法:
1)5V供電。
2)用跳線(xiàn)連接D0和STM32的IO口(本文連接的是PA11)。
3)D0默認(rèn)是高電平,但磁鐵的特定一面(磁鐵另一面無(wú)用)去靠近霍爾傳感器模塊時(shí),D0會(huì)被拉低。
4、霍爾傳感器與限位開(kāi)關(guān)有什么區(qū)別?
答:
1)限位開(kāi)關(guān)
①優(yōu)點(diǎn):無(wú)功耗。
②缺點(diǎn):易損壞。
2)霍爾傳感器
①優(yōu)點(diǎn):不易損壞。
②缺點(diǎn):有功耗。
六、實(shí)驗(yàn)步驟
1、編寫(xiě)并添加霍爾傳感器驅(qū)動(dòng)
1)編寫(xiě)驅(qū)動(dòng)GUA_Hall_Sensor.c(存放在“……HARDWARE”)
/
//霍爾傳感器引腳
#define GUA_HALL_SENSOR_PORT GPIOA
#define GUA_HALL_SENSOR_PIN GPIO_Pin_11
//消抖總次數(shù)
#define GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT
staTIc GUA_U32 sGUA_Hall_Sensor_DisapperasShakes_IdleCount=0; //消抖時(shí)的空閑狀態(tài)計(jì)數(shù)值
staTIc GUA_U32 sGUA_Hall_Sensor_DisapperasShakes_TriggerCount=0; //消抖時(shí)的觸發(fā)狀態(tài)計(jì)數(shù)值
staTIc void GUA_Hall_Sensor_IO_Init(void);
/
//類(lèi)型宏
#ifndef GUA_U8
typedef unsigned char GUA_U8;
#endif
#ifndef GUA_8
typedef signed char GUA_8;
#endif
#ifndef GUA_U16
typedef unsigned short GUA_U16;
#endif
#ifndef GUA_16
typedef signed short GUA_16;
#endif
#ifndef GUA_U32
typedef unsigned long GUA_U32;
#endif
#ifndef GUA_32
typedef signed long GUA_32;
#endif
#ifndef GUA_U64
typedef unsigned long long GUA_U64;
#endif
#ifndef GUA_64
typedef signed long long GUA_64;
#endif
//霍爾傳感器的觸發(fā)狀態(tài)
#define GUA_HALL_SENSOR_STATUS_TRIGGER 0 //霍爾傳感器觸發(fā)
#define GUA_HALL_SENSOR_STATUS_IDLE 1 //霍爾傳感器沒(méi)觸發(fā)
#define GUA_HALL_SENSOR_STATUS_DISAPPERAS_SHAKS 2 //霍爾傳感器消抖中
GUA_U8 GUA_Hall_Sensor_Check_Pin(void);
void GUA_Hall_Sensor_Init(void);
#endif
3)工程中添加GUA_Hall_Sensor.c
4)在MDK設(shè)置中添加串口驅(qū)動(dòng)源文件路徑
2、在應(yīng)用層中調(diào)用
1)添加驅(qū)動(dòng)頭文件(main.c中)
#include “GUA_Hall_Sensor.h”
2)添加驅(qū)動(dòng)初始化代碼(main.c的main函數(shù)中)
//霍爾傳感器初始化
GUA_Hall_Sensor_Init();
3)添加測(cè)試代碼
①寫(xiě)測(cè)試代碼(main.c中)
static void GUA_Test(void)
{
U8 nGUA_Ret=0;
U8 nGUA_Stop=0;
while(1)
{
//檢測(cè)霍爾當(dāng)前狀態(tài)
nGUA_Ret=GUA_Hall_Sensor_Check_Pin();
//檢測(cè)到霍爾被觸發(fā)
if(nGUA_Ret==GUA_HALL_SENSOR_STATUS_TRIGGER)
{
nGUA_Stop=1;
}
}
②調(diào)用測(cè)試代碼(main.c的main函數(shù)中)
//測(cè)試代碼
GUA_Test();
七、注意事項(xiàng)
暫無(wú)。
八、實(shí)驗(yàn)結(jié)果
仿真并設(shè)置斷點(diǎn)在測(cè)試代碼的“nGUA_Stop=1;”中,全速運(yùn)行。
用磁鐵去靠近模塊上的霍爾傳感器芯片,模塊上的led被點(diǎn)亮表示觸發(fā),同時(shí)工程中消抖之后會(huì)停止在斷點(diǎn)處,表示檢測(cè)到PA11處的霍爾傳感器觸發(fā)導(dǎo)致的低電平。
這里我用通用定時(shí)器3的通道1來(lái)測(cè)量轉(zhuǎn)速
霍爾轉(zhuǎn)速傳感器基本介紹霍爾傳感器分類(lèi)和原理關(guān)于為什么選用開(kāi)關(guān)型常開(kāi)PNP型霍爾傳感器
STM32程序?qū)崿F(xiàn)程序介紹程序源碼TIM3_CAP.HTIM3_CAP.H解讀TIM3_CAP.CTIM3_CAP.C解讀TIM3中斷函數(shù)解讀MAIN.CMAIN.C解讀
結(jié)果工程文件
霍爾轉(zhuǎn)速傳感器基本介紹
霍爾傳感器分類(lèi)和原理
我用的是開(kāi)關(guān)型常開(kāi)PNP型的霍爾傳感器
開(kāi)關(guān)型的有2種分類(lèi),一種是常開(kāi),另外一種就是常閉了
關(guān)于什么常開(kāi)常閉,請(qǐng)看下圖
常開(kāi)通俗來(lái)講,就是霍爾傳感器沒(méi)有檢測(cè)到磁鐵的時(shí)候開(kāi)關(guān)就是斷開(kāi)的,常閉相反
霍爾傳感器具體分類(lèi)
圖片來(lái)自淘寶鏈接
說(shuō)明
DC-直流AC交流NO-常開(kāi)NC-常閉
關(guān)于為什么選用開(kāi)關(guān)型常開(kāi)PNP型霍爾傳感器
單片機(jī)只能接收高低電平,0或者是1,
開(kāi)關(guān)型常開(kāi)的霍爾傳感器剛好符合單片機(jī)的這個(gè)特性
檢測(cè)到磁鐵的時(shí)候就輸出高電平或者低電平,
PNP型就是檢測(cè)到磁鐵的時(shí)候的輸出高電平,沒(méi)有檢測(cè)到的時(shí)候就是低電平
實(shí)驗(yàn)中,給霍爾傳感器5V供電,檢測(cè)到磁鐵,霍爾傳感器就輸入5V,沒(méi)有檢測(cè)到就是0V了
實(shí)物圖
STM32程序?qū)崿F(xiàn)
程序介紹
單片機(jī)STM32F103ZE
霍爾5V供電,傳感器數(shù)據(jù)輸出線(xiàn)接PA6
定時(shí)器3 通道1 輸入捕獲模式
程序源碼
TIM3_CAP.H
TIM3_CAP.H解讀
定時(shí)器只能在捕獲到高電平的時(shí)候,把當(dāng)前計(jì)數(shù)器的數(shù)值保存下次,由于我們需要計(jì)算2次高電平的時(shí)間,所有需要一個(gè)邏輯位TIM3_FLAG
TIM3_CAP用于保存第2次定時(shí)器捕獲高電平時(shí)候的計(jì)數(shù)器的數(shù)值
TIM3_RES是2次高電平總的計(jì)數(shù)器的數(shù)值
TIM3_RES乘以計(jì)數(shù)器每計(jì)一個(gè)數(shù)的時(shí)間就是總的時(shí)間了
TIM3_CAP.C
TIM3_CAP.C解讀
首先開(kāi)啟定時(shí)器3和GPIOA的時(shí)鐘
接著設(shè)置PA6為下拉輸入,為什么下拉輸入,因?yàn)槲覀冃枰东@高電平,如果你要捕獲低電平,設(shè)置PA6為上拉輸入,然后設(shè)置定時(shí)器下降沿捕獲
設(shè)置定時(shí)器的自動(dòng)重載值和預(yù)分頻值
設(shè)置通道1為輸入不分頻,不濾波
關(guān)于什么是分頻,什么是濾波
濾波
首先看STM32中文參考手冊(cè)中的介紹
我的理解就是輸入捕獲采樣頻率也就是速度
分頻
貼上官方介紹
就是每幾個(gè)高電平觸發(fā)一次捕獲
如果你設(shè)置每2個(gè)事件觸發(fā)一次捕獲,那么檢測(cè)到2次高電平的時(shí)候才會(huì)把當(dāng)前的計(jì)數(shù)器的數(shù)值保存到TIM3->CCR1寄存器中
什么是TIM3->CCR1寄存器呢
看官方的介紹就知道了
也就是保存捕獲的時(shí)候計(jì)數(shù)器的數(shù)值
計(jì)數(shù)器的值能捕獲入TIM3_CCR1寄存器和設(shè)置上升沿捕獲
開(kāi)啟定時(shí)器更新中斷和通道1捕獲中斷
設(shè)置中斷分組和優(yōu)先級(jí)
開(kāi)啟定時(shí)器3
TIM3中斷函數(shù)解讀
TIM3_FLAG是8位的,其中第7位用于標(biāo)志第一次捕獲,如果檢測(cè)到第一次捕獲就置1,第8位用于標(biāo)志第二次捕獲,檢測(cè)到了就置1,1~6用于在檢測(cè)到第一次捕獲的時(shí)候定時(shí)器更新的次數(shù)
MAIN.C
MAIN.C解讀
主函數(shù)是檢測(cè)到2次高電平就通過(guò)串口打印出高電平的時(shí)間
以下頭文件中是用了原子哥的頭文件
結(jié)果
LED1每0.2s切換亮滅狀態(tài)一次,故每0.4s亮一次,結(jié)果和下圖一樣
用飛線(xiàn)把PA6(通道1)和PE5(LED1)連接起來(lái)
工程文件
工程文件 鏈接
下一篇: PLC、DCS、FCS三大控
上一篇: 電氣控制線(xiàn)路圖控制原