實(shí)驗(yàn)前提
1、在進(jìn)行本文步驟前,請(qǐng)先閱讀以下博文:
暫無
2、在進(jìn)行本文步驟前,請(qǐng)先實(shí)現(xiàn)以下博文:
暫無
五、基礎(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、本文使用的是什么霍爾傳感器模塊?
答:
香瓜買的霍爾傳感器模塊一共有四個(gè)引腳,GND、VCC、D0、A0。
其中只需要用到三根線,GND、VCC、D0。(A0不知做啥用的,計(jì)數(shù)?)
使用方法:
1)5V供電。
2)用跳線連接D0和STM32的IO口(本文連接的是PA11)。
3)D0默認(rèn)是高電平,但磁鐵的特定一面(磁鐵另一面無用)去靠近霍爾傳感器模塊時(shí),D0會(huì)被拉低。
4、霍爾傳感器與限位開關(guān)有什么區(qū)別?
答:
1)限位開關(guān)
①優(yōu)點(diǎn):無功耗。
②缺點(diǎn):易損壞。
2)霍爾傳感器
?、賰?yōu)點(diǎn):不易損壞。
②缺點(diǎn):有功耗。
六、實(shí)驗(yàn)步驟
1、編寫并添加霍爾傳感器驅(qū)動(dòng)
1)編寫驅(qū)動(dòng)GUA_Hall_Sensor.c(存放在“……\HARDWARE”)
//******************************************************************************
//name: GUA_Hall_Sensor.c
//introduce: 霍爾傳感器驅(qū)動(dòng)
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜單片機(jī)之STM8/STM32(164311667)
//changetime: 2017.03.06
//******************************************************************************
#include “stm32f10x.h”
#include “GUA_Hall_Sensor.h”
/*********************宏定義************************/
//霍爾傳感器引腳
#define GUA_HALL_SENSOR_PORT GPIOA
#define GUA_HALL_SENSOR_PIN GPIO_Pin_11
//消抖總次數(shù)
#define GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT 500000
/*********************內(nèi)部變量************************/
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ù)值
/*********************內(nèi)部函數(shù)************************/
static void GUA_Hall_Sensor_IO_Init(void);
//******************************************************************************
//name: GUA_Hall_Sensor_IO_Init
//introduce: 霍爾傳感器的IO初始化
//parameter: none
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜單片機(jī)之STM8/STM32(164311667)
//changetime: 2017.03.06
//******************************************************************************
static void GUA_Hall_Sensor_IO_Init(void)
{
//IO結(jié)構(gòu)體
GPIO_InitTypeDef GPIO_InitStructure;
//時(shí)鐘使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//霍爾IO配置
GPIO_InitStructure.GPIO_Pin = GUA_HALL_SENSOR_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GUA_HALL_SENSOR_PORT, &GPIO_InitStructure);
}
//******************************************************************************
//name: GUA_Hall_Sensor_Check_Pin
//introduce: 霍爾傳感器檢測(cè)觸發(fā)狀態(tài)
//parameter: none
//return: GUA_HALL_SENSOR_STATUS_IDLE or GUA_HALL_SENSOR_STATUS_TRIGGER
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜單片機(jī)之STM8/STM32(164311667)
//changetime: 2017.03.06
//******************************************************************************
GUA_U8 GUA_Hall_Sensor_Check_Pin(void)
{
//沒觸發(fā)
if(GPIO_ReadInputDataBit(GUA_HALL_SENSOR_PORT, GUA_HALL_SENSOR_PIN) == SET)
{
//計(jì)數(shù)
sGUA_Hall_Sensor_DisapperasShakes_IdleCount++;
sGUA_Hall_Sensor_DisapperasShakes_TriggerCount = 0;
//判斷計(jì)數(shù)是否足夠
if(sGUA_Hall_Sensor_DisapperasShakes_IdleCount 》= GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT)
{
return GUA_HALL_SENSOR_STATUS_IDLE;
}
}
//觸發(fā)
else
{
//計(jì)數(shù)
sGUA_Hall_Sensor_DisapperasShakes_IdleCount = 0;
sGUA_Hall_Sensor_DisapperasShakes_TriggerCount++;
//判斷計(jì)數(shù)是否足夠
if(sGUA_Hall_Sensor_DisapperasShakes_TriggerCount 》= GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT)
{
return GUA_HALL_SENSOR_STATUS_TRIGGER;
}
}
return GUA_HALL_SENSOR_STATUS_DISAPPERAS_SHAKS;
}
//******************************************************************************
//name: GUA_Limit_Switch_Init
//introduce: 霍爾傳感器初始化
//parameter: none
//return: none
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜單片機(jī)之STM8/STM32(164311667)
//changetime: 2017.03.06
//******************************************************************************
void GUA_Hall_Sensor_Init(void)
{
//初始化IO
GUA_Hall_Sensor_IO_Init();
}
2)編寫驅(qū)動(dòng)頭文件GUA_Hall_Sensor.h(存放在“……\HARDWARE”)
//******************************************************************************
//name: GUA_Hall_Sensor.h
//introduce: 霍爾傳感器驅(qū)動(dòng)的頭文件
//author: 甜甜的大香瓜
//email: 897503845@qq.com
//QQ group 香瓜單片機(jī)之STM8/STM32(164311667)
//changetime: 2017.03.06
//******************************************************************************
#ifndef _GUA_HALL_SENSOR_H_
#define _GUA_HALL_SENSOR_H_
/*********************宏定義************************/
//類型宏
#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 //霍爾傳感器沒觸發(fā)
#define GUA_HALL_SENSOR_STATUS_DISAPPERAS_SHAKS 2 //霍爾傳感器消抖中
/*********************外部函數(shù)聲明************************/
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è)試代碼
?、賹憸y(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)
暫無。
八、實(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)致的低電平。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(2) 100%
相關(guān)閱讀:
- [電子說] 了解線性霍爾效應(yīng)傳感技術(shù) 2024-12-05
- [電子說] 霍爾傳感器工作原理及在電機(jī)中的應(yīng)用 2024-12-04
- [電子說] 淺談對(duì)霍爾傳感器的誤區(qū)解讀 2024-12-03
- [電子說] 霍爾傳感器的應(yīng)用——跑步機(jī) 2024-12-03
- [電子說] 霍爾傳感器測(cè)速:精確與效率的完美結(jié)合 2024-12-02
- [電子說] 高效學(xué)習(xí) 霍爾傳感器 2024-12-02
- [電子說] HAL庫在STM32開發(fā)中的重要性 2024-12-02
- [電子說] stm32單片機(jī)畢業(yè)設(shè)計(jì)——物聯(lián)網(wǎng)智能家居源代碼原理圖 2024-11-30
( 發(fā)表人:金巧 )