久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2789|回復: 1
收起左側

stm32f103rc單片機超聲波控制舵機旋轉代碼

[復制鏈接]
ID:853162 發表于 2021-4-27 17:50 | 顯示全部樓層 |閱讀模式
之前在學習stm32的時候接觸到一個簡單的項目--智能垃圾桶。通過研究它的原理發現其實是超聲波模塊HCSR04發射超聲波接觸到物體會返回并啟動舵機的旋轉。
單片機源程序如下:
  1. void PWM_Init()
  2. {
  3.         GPIO_InitTypeDef GPIO_InitStructure;   //聲明一個結構體變量,用來初始化GPIO

  4.         TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;//聲明一個結構體變量,用來初始化定時器

  5.         TIM_OCInitTypeDef TIM_OCInitStructure;//根據TIM_OCInitStruct中指定的參數初始化外設TIMx

  6.         /* 開啟時鐘 */
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  8.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
  9.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

  10.         /*  配置GPIO的模式和IO口 */
  11.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;// PA1
  12.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  13.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復用推挽輸出
  14.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  15.         
  16.         //TIM3定時器初始化
  17.         TIM_TimeBaseInitStructure.TIM_Period = 1999; //PWM 頻率=72000/(1999+1)=36Khz//設置自動重裝載寄存器周期的值
  18.         TIM_TimeBaseInitStructure.TIM_Prescaler = 719;//設置用來作為TIMx時鐘頻率預分頻值
  19.         TIM_TimeBaseInitStructure.TIM_ClockDivision = 0;//設置時鐘分割:TDTS = Tck_tim
  20.         TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;        //TIM向上計數模式
  21.         TIM_TimeBaseInit(TIM2, & TIM_TimeBaseInitStructure);

  22. //        GPIO_PinRemapConfig(GPIO_FullRemap_TIM2,ENABLE);//改變指定管腳的映射        //pC6

  23.         //PWM初始化          //根據TIM_OCInitStruct中指定的參數初始化外設TIMx
  24.         TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
  25.         TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//PWM輸出使能
  26.         TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;

  27.         TIM_OC1Init(TIM2,&TIM_OCInitStructure);
  28.         //注意此處初始化時TIM_OC1Init而不是TIM_OCInit,否則會出錯。因為固件庫的版本不一樣。
  29.         TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);//使能或者失能TIMx在CCR1上的預裝載寄存器
  30.         TIM_Cmd(TIM2,ENABLE);//使能或者失能TIMx外設
  31. }




  32. void pwm(void)
  33. {
  34.                 delay_ms(500);
  35.                 TIM_SetCompare1(TIM2, 50);//0度
  36.                 delay_ms(1000);
  37.                 TIM_SetCompare1(TIM2, 100);//45度
  38.           delay_ms(1000);
  39.                 TIM_SetCompare1(TIM2,150);//90度
  40.                 delay_ms(1000);
  41.                 TIM_SetCompare1(TIM2, 200);//135度
  42.                 delay_ms(1000);
  43.                 TIM_SetCompare1(TIM2, 250);//180度
  44.                 delay_ms(100);
  45.         
  46. }
復制代碼
這個是pwm舵機函數(sg90)
  1. #include "HCSR04.h"
  2. #include "sys.h"
  3. #include "delay.h"

  4. /*
  5. * 函數名:UltrasonicWave_Configuration
  6. * 描述  :超聲波模塊的初始化
  7. * 輸入  :無
  8. * 輸出  :無        
  9. */
  10. void UltrasonicWave_Configuration(void)
  11. {
  12.   GPIO_InitTypeDef GPIO_InitStructure;
  13.         
  14.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  15.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  16.   GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);  
  17.         
  18.         
  19.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                                         //PC8接TRIG
  20.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                     //設為推挽輸出模式
  21.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  22.   GPIO_Init(GPIOB, &GPIO_InitStructure);                         //初始化外設GPIO

  23.         
  24.         

  25.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                                     //PC9接ECH0
  26.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;                 //設為輸入
  27.   GPIO_Init(GPIOB,&GPIO_InitStructure);               
  28.         
  29. }

  30. /*
  31. * 函數名:UltrasonicWave_StartMeasure
  32. * 描述  :開始測距,發送一個>10us的脈沖,然后測量返回的高電平時間
  33. * 輸入  :無
  34. * 輸出  :無        
  35. */
  36. void UltrasonicWave_StartMeasure(void)
  37. {
  38.         Trig = 1;
  39.         delay_us(15);                                      //延時20US
  40.         Trig = 0;
  41. }
復制代碼
這個是超聲波模塊函數
剩下的代碼大家可以根據情況自行下載

注:我在整個超聲波控制舵機代碼運行時發現一個問題,就是在執行到舵機部分的時候就一直卡在那里,從硬件上看就是led0不會跳回到led1,但是有時可以有時又不可以,這個問題我也不知道怎么回事,遇到同樣問題的大家可以一起解決。

全部程序51hei下載地址:
超聲波控制舵機.7z (187.93 KB, 下載次數: 39)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:915610 發表于 2021-5-24 07:51 | 顯示全部樓層
有原理圖嗎,請問?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男女久久久 | 精品色| 午夜精品一区二区三区在线播放 | www.成人.com | 久久久久久综合 | 国产一区二区三区在线看 | 久久男人天堂 | 综合成人在线 | 香蕉国产在线视频 | 欧美大片在线观看 | 国产成人av一区二区三区 | 欧洲高清转码区一二区 | 国产精品永久久久久 | 色婷婷综合久久久久中文一区二区 | 久久99国产精一区二区三区 | 日日夜夜天天 | 欧美精品在线一区 | 日韩视频精品 | 亚洲精品在线免费播放 | 91在线精品一区二区 | 91精品国产91久久久久游泳池 | 久久久久久国产精品 | 亚洲精选一区 | 日韩一区二区在线播放 | 草草视频在线播放 | 欧美日韩在线观看视频网站 | www.日本在线播放 | 亚洲精品一区二区三区中文字幕 | 国产精品区二区三区日本 | 久久久免费少妇高潮毛片 | 免费的色网站 | 在线免费观看视频你懂的 | 黄色日本片| 91亚洲国产亚洲国产 | 国产在线一区观看 | 国产精品美女久久久 | 亚洲成人精品在线观看 | 麻豆av在线免费观看 | 久久成人一区 | 国产午夜视频 | 日韩一区二区三区在线观看视频 |