《SLAM机器人基础教程》第三章 单片机与STM32:碰撞传感器实验
生活随笔
收集整理的這篇文章主要介紹了
《SLAM机器人基础教程》第三章 单片机与STM32:碰撞传感器实验
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
3.8節 碰撞傳感器實驗
碰撞傳感器是機器人重要的安全傳感器之一,下面介紹如何編寫碰撞傳感器的驅動程序。
a.實驗準備:碰撞傳感器,USB轉串口模塊,ST-Llink下載器,CHEAPX機器人控制板
b.實驗目的:STM32實現碰撞傳感器的數據采集
c.相關知識點:
本次碰撞模塊使用開關按鍵式碰撞,開關按鍵常常伴有抖動,因此需要軟件消除抖動。
d.編程及運行
(1)初始化3個碰撞傳感器
//硬件接口關系:
//H1 BUMP1 PD8
//H2 BUMP2 PB15
//H3 BUMP3 PB14
//H4 BUMP4 PB13
//H5 BUMP5 PB12
void InitBumper(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
//Bumper Left(PD8) Middle(PB15) Right(PB14)
//Config Clock 配置時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD, ENABLE);//打開GPIOB GPIOD時鐘
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode GPIO模式:上拉輸入模式
GPIO_Init(GPIOB, &GPIO_InitStruct);//傳入結構GPIO_InitStruct,配置GPIOB
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode GPIO模式:上拉輸入模式
GPIO_Init(GPIOD, &GPIO_InitStruct);//傳入結構GPIO_InitStruct,配置GPIOD
}
(2)傳感器數據更新函數
void BumperUpdate(void)
{
static u8 lastBumperStatus=0;//上一次碰撞傳感器狀態
static u8 lastPrintfStatus=0;//上次打印時碰撞傳感器狀態
u8 currBumperStatus =0; //當前碰撞傳感器狀態
//_BumperStatus bit2-0:Left(PD8) Middle(PB15) Right(PB14)
//Bumper Left(PD8) Middle(PB15) Right(PB14)
if(GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_8)) {currBumperStatus&=0xFB;}else {currBumperStatus|=0x04;}//若PD8高電平,碰撞沒被按下,則將currBumperStatus第3位設0,否則將currBumperStatus第3位設1
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)){currBumperStatus&=0xFD;}else {currBumperStatus|=0x02;}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)){currBumperStatus&=0xFE;}else {currBumperStatus|=0x01;}
_BumperStatus = currBumperStatus & lastBumperStatus;//統計濾波:兩次值均為1,才認定碰撞開關按下
lastBumperStatus = currBumperStatus;
if(_BumperStatus>0)
if(_BumperStatus!=lastPrintfStatus)
{
printf("Bumper ");
if(_BumperStatus&0x04)printf("1 ");
if(_BumperStatus&0x02)printf("2 ");
if(_BumperStatus&0x01)printf("3 ");
printf("觸發
");
}
lastPrintfStatus=_BumperStatus;
}
(3)主函數:每隔10毫秒運行一次碰撞傳感器更新函數BumperUpdate(),讀取一次碰撞傳感器的狀態
//碰撞傳感器實驗
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //PriorityGroupConfig NVIC中斷分組設置 組2(2位搶占優先級,2位響應優先級)
initDebugSerial(500000);//初始化調試串口USART1,波特率500000
initSysTick();//初始化滴答定時器和TIM4定時器
showVersion();//顯示版本
InitBumper(); //初始化 BUMP1-3
while(1)
{
BumperUpdate();//更新
delay_ms(10);//間隔10ms,消除抖動影響
}
}
(4)實驗結果:按下開關,串口打印出碰撞開關的編號
總結
以上是生活随笔為你收集整理的《SLAM机器人基础教程》第三章 单片机与STM32:碰撞传感器实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何创建最简单的 SAP Kyma Fu
- 下一篇: SAP UI5 Routing 路由介绍