官术网_书友最值得收藏!

第4章 STM32單片機中斷編程與機器人觸覺導航

通過前面幾章的學習,你已經掌握如何用單片機的I/O接口來控制機器人的各種運動。當時,連接機器人伺服電機的單片機端口是作為輸出使用,而且使用非常簡單。

本章你將學習如何使用這些端口來獲取外界信息,即將STM32單片機端口作為輸入端口使用。比如獲取按鍵的信息進行人機交互,或給機器人小車增加觸覺傳感器判斷是否碰到了障礙物。實際上,對于任何一個嵌入式系統,如自動控制系統,都可能需要通過傳感器獲取外界信息,由計算機或單片機根據反饋的信息進行計算和決策,生成控制命令,然后通過輸出端口去控制系統相應的執行機構,完成相關任務。因此,學習如何使用STM32單片機的輸入接口同學習使用輸出接口同等重要。本章除了學習按鍵檢測方法外,你還可以在機器人前端安裝并測試一個稱為胡須的觸覺開關,通過編程來監視觸覺開關的狀態,以及決定當它遇到障礙物時如何動作。最終的結果就是通過觸覺實現機器人自動導航。

4.1 TM32單片機按鍵輸入檢測

為了檢測按鍵是否被按下,可以將按鍵與STM32單片機的I/O端口相連,電路圖如圖4.1所示。當有鍵按下是相應端口為低電平,沒有鍵按下則為高電平。

圖4.1 按鍵電路圖

任務一 按鍵檢測

下面這段代碼的功能是當某個按鍵按下時,與之對應的發光二極管亮滅狀態交替變化一次。PC8端口的KEY1鍵與PB8端口的發光二極管對應,PC9端口的KEY2鍵與PB9端口的發光二極管對應,PC10端口的KEY3鍵與PC12端口的發光二極管對應,PC11端口的KEY4鍵與PC13端口的發光二極管對應。

例程:KeyNoEINT.c

      #include "stm32f10x_heads.h"
      #include "HelloRobot.h"
      int main(void)
      {
        BSP_Init(); //開發板初始化函數
        USART_Configuration();
        printf("Program Running!\n");
        while (1)
        {
          if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_8)==0)
          {
            if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8)==0)
              GPIO_SetBits(GPIOB, GPIO_Pin_8);
            else
              GPIO_ResetBits(GPIOB, GPIO_Pin_8);
          }
          if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_9)==0)
          {
            if(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_9)==0)
              GPIO_SetBits(GPIOB, GPIO_Pin_9);
            else
              GPIO_ResetBits(GPIOB, GPIO_Pin_9);
          }
          if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_10)==0)
          {
            if(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_12)==0)
              GPIO_SetBits(GPIOC, GPIO_Pin_12);
            else
              GPIO_ResetBits(GPIOC, GPIO_Pin_12);
          }
          if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_11)==0)
          {
            if(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13)==0)
              GPIO_SetBits(GPIOC, GPIO_Pin_13);
            else
              GPIO_ResetBits(GPIOC, GPIO_Pin_13);
          }
          delay_nms(120);
          }
      }

在GPIO配置函數GPIO_Configuration中,我們已將PC8、PC9、PC10、PC11設置為按鍵輸入引腳,下面的代碼是將PC11端口設置為浮空輸入模式:

      GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

許多自動化機械都依賴于各種觸覺型開關,如當機器人碰到障礙物時,接觸開關就會察覺,通過編程讓機器人躲開障礙物;旅客登機橋在靠近飛機時為了保護昂貴的飛機,在登機橋接口安裝觸須,當登機橋離飛機很近后觸須就會碰到飛機,立即通知控制器提醒離飛機已經很近了,需要降低靠近速度;工廠利用觸覺開關來計量生產線上的工件數量;在工業加工過程中,也被用來排列物體。在所有這些實例中,觸覺開關提供的輸入通過計算機或者單片機處理后生成其他形式的程序化的輸出。

主站蜘蛛池模板: 安义县| 灵寿县| 丰都县| 道孚县| 台江县| 牙克石市| 郴州市| 绍兴市| 会同县| 宾川县| 霍林郭勒市| 册亨县| 洛浦县| 大方县| 南澳县| 清水县| 雷山县| 内黄县| 松阳县| 连云港市| 鱼台县| 竹溪县| 安塞县| 甘孜县| 滁州市| 博野县| 高邑县| 靖西县| 嵊泗县| 积石山| 六枝特区| 赤壁市| 新郑市| 玉田县| 汨罗市| 洪洞县| 博湖县| 泾阳县| 九龙县| 乐东| 虹口区|