找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1125|回复: 2
打印 上一主题 下一主题
收起左侧

我用超声波控制高度飞行的时候发现不能实现双旋翼的高度控制,请帮忙一下

[复制链接]
跳转到指定楼层
楼主
我用超声波控制高度飞行的时候发现不能实现双旋翼的高度控制

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "timer.h"
  5. #include "usart.h"
  6. #include "ceju.h"


  7. //接线说明echo-PA0;trig-PA1;vcc接5v
  8. //TM3使超声波每隔一秒发送,TM2输入捕获。
  9. extern u16 *p1;
  10. extern u8 kaishi;
  11. extern u16 *p2;
  12. extern float Distance;
  13. extern u8  TIM2CH1_CAPTURE_STA;                //输入捕获状态                                                   
  14. extern u16        TIM2CH1_CAPTURE_VAL;        //输入捕获值
  15. int main(void)
  16. {       
  17.         u16 a=0,b=115,count1=115,count2=115,c;

  18.         u32 temp=0;
  19.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
  20.         delay_init();                     //延时函数初始化       
  21.         uart_init(115200);                                 //9600         
  22.         LED_Init();                          //初始化与LED连接的硬件接口
  23.         GPIO_Config() ;
  24.         TIM3_Int_Init(1999,719);                //一秒发送一次。4999*2,7199       
  25.         //TIM3_Config(1999,719);
  26.         TIM3_IRQHandler();
  27.         TIM2_Cap_Init(0XFFFF,7199);                //以10khz的频率计数  
  28.         ceju_Init();
  29.        
  30.         TIM_SetCompare1(TIM3,80);        //初始化占空比要在4%左右
  31.   TIM_SetCompare2(TIM3,80);
  32.          delay_ms(1500);
  33.          delay_ms(1500);
  34.          delay_ms(1500);
  35.          delay_ms(1500);
  36.          p1=&count1;
  37.         while (1)
  38. {
  39.            ceju_Init();
  40.            delay_ms(5);  
  41.          if(TIM2CH1_CAPTURE_STA&0X80)//成功捕获到了一次高电平
  42.          {
  43.                   temp=TIM2CH1_CAPTURE_STA&0X3F;
  44.                         temp*=65536;                                        //溢出时间总和
  45.                         temp+=TIM2CH1_CAPTURE_VAL;                //得到总的高电平时间
  46.                         Distance=temp*5*34*2/200.0;   //离地高度  cm
  47.                  if(Distance<40)
  48.                  {
  49.                             TIM_SetCompare1(TIM3,count1+=0.5);               
  50.                                         TIM_SetCompare2(TIM3,count2+=0.5);       
  51.                             delay_ms(20);
  52.                  }
  53.                  else {
  54.                       TIM_SetCompare1(TIM3,count1-=0.5);               
  55.                                         TIM_SetCompare2(TIM3,count2-=0.5);       
  56.                             delay_ms(20);
  57.                  }

  58.           TIM2CH1_CAPTURE_STA=0;                        //开启下一次捕获
  59.          }
  60. }
  61. }
复制代码

所有资料51hei提供下载:
超声波捕获测距实验.rar (293.96 KB, 下载次数: 7)



99999.PNG (27.05 KB, 下载次数: 33)

99999.PNG
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:123289 发表于 2018-8-5 09:33 | 只看该作者
控制问题是一个系统问题,与控制方案有关。先说一下你的控制原理与方案。
回复

使用道具 举报

板凳
ID:364826 发表于 2018-8-5 11:37 | 只看该作者
yzwzfyz 发表于 2018-8-5 09:33
控制问题是一个系统问题,与控制方案有关。先说一下你的控制原理与方案。

我是想每次捕获的脉冲转化成Distance距离之后,如果小于40cm就电机的占空比就进行增量运算,大于就做减法运算。来控制双旋翼的高度,但是总会有好多问题,我也才学stm32大半个月,很多问题我察觉不出来。能请你帮忙看一下吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表