博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
开坑写博客1-2013电子设计大赛-四旋翼自主飞行器
阅读量:5051 次
发布时间:2019-06-12

本文共 3901 字,大约阅读时间需要 13 分钟。

先开个坑吧…

熬夜了4天4夜的比赛要记录一下诶..

而且第一次做四轴飞行器还是挺有趣的~

 

首先是题目

 

这是我们第一次做飞行器所以有很多东西我们都不太懂

经过一番查资料我们大概了解了一些制作步骤吧

首先是飞行原理,很简单四个轴的小飞机..

如果飞机是绝对对称的,只要在四个轴上产生同样大小的风力就能够稳定起飞

 

飞行模式有两种,一个是十字模式一个是X字模式.

区别很简单X字就是十字的航行方向偏移了45度

 

这些都不是太大的问题什么的不懂就自己百度吧或者可以上果壳的飞行器小组

 

题目上要求了不许用飞行控制模块(目的为了是限制北航之类的专业高校的能力)

但是它规定了必须要用瑞萨的单片机(目的是为了防止你们直接购买网上现成的基于主流单片机例如STM32的飞行器)

 

但是这些都不是问题…问题是为什么这款单片机这么不好用!!!!!!!!!

 

待会再慢慢吐槽…

我的角色是程序员:就是好好的用好这个单片机和各种传感器

 

不过还是要赞一下瑞萨的Code Generator真好用!!!!各种外设的初始化变得简单多了…

 

网上有人说这种”偷懒”的初始化特别不好因为会使得硬件工程师对单片机的各种寄存器和外设的了解程度降低

 

但是我觉得这并不影响开发者的学习过程

 

因为要真正的好好的去使用一款单片机你不可能不了解他的各个寄存器,而Code Generator这种东西只是给你了一个快捷的方法去进行一些设置

 

而且通过查看生成的代码开发者也能够更加清晰的去知道该往什么方向去修改寄存器

 

因为生成的代码后面都有注释让你知道对某个寄存器的操作是处于什么样的目的

 

总之目前我对瑞萨这套IDE的欣赏程度应该仅仅次于Eclipse for Java

 

下面来写下这里的编程笔记吧..

 

首先是单片机的各种使用部分:

 

>>单片机的各种资源设置统计:

定时器:

TIM0定时器:系统定时器,1us中断计时

TIM1定时器:高电平测宽模式,用于超声波模块的返回值处理

TIM2定时器:4路PWM的Master定时器

TIM3-6定时器:4路PWM输出的Slave定时器,用于输出PWM波

TIM7定时器:预留做遥控器接收机的信号处理或者其他用途

 

传感器:

MPU6050三轴陀螺仪+三轴加速度模块

HR-SC04超声波

还有几个不是我采购的激光的光电反射式传感器貌似比较贵70一个用于循迹

 

>>MPU6050的使用

目前我的使用方法是软件端口的IIC模拟的形式,第一次用IIC虽然有例程

不过我这个傻叉在数据移位的时候多移了一位尼玛输出都是000000

 

>>串口函数的改写

瑞萨单片机提供串口的发送函数,并不需要我们自己来给寄存器直接写数据但是每次写数据就必须把数据长度输入什么的比较麻烦

于是我就稍微改写了一下原来在STM32上的串口输出程序

void print( uint8_t *Data,int de){     const char *s;   int d;    char buf[16];    va_list ap;    va_start(ap, Data);    while(*Data!=0){                                                  if(*Data==0x5c){                                                  switch (*++Data){                case 'r':                    txflag=0;                    tx_data[0]=0x0d;                       R_UART0_Send(tx_data,1);                    while(!txflag){NOP();}                    Data++;                    break;                case 'n':                                                          //USART_SendData(USARTx, 0x0a);                        txflag=0;                    tx_data[0]=0x0a;                       R_UART0_Send(tx_data,1);                    while(!txflag){NOP();}                                        Data++;                    break;                                default:                    Data++;                    break;            }                                 }        else if(*Data=='%'){                                                  switch (*++Data){                                                case 'd':                                                              //d = va_arg(ap, int);                    itoa(de, buf, 10);                    for (s = buf; *s; s++) {                                                                        txflag=0;                      tx_data[0]=*s;                      R_UART0_Send(tx_data,1);                      while(!txflag){NOP();}                                                              }                    Data++;                    break;                default:                    Data++;                    break;            }                 }        else {                        txflag=0;            tx_data[0]=*Data++;            R_UART0_Send(tx_data,1);            while(!txflag){NOP();}        }                //USART_SendData(USARTx, *Data++);        //while(USART_GetFlagStatus(USARTx, USART_FLAG_TC)==RESET);    }}char *itoa(int value, char *string, int radix){    int     i, d;    int     flag = 0;    char    *ptr = string;    if (radix != 10)    {        *ptr = 0;        return string;    }    if (!value)    {        *ptr++ = 0x30;        *ptr = 0;        return string;    }       if (value < 0)    {        *ptr++ = '-';        value *= -1;    }    for (i = 10000; i > 0; i /= 10)    {        d = value / i;        if (d || flag)        {            *ptr++ = (char)(d + 0x30);            value -= (d * i);            flag = 1;        }    }      *ptr = 0;    return string;} /* End user code. Do not edit comment generated here */

 

大约用到的就是这些.

以下是虽然不是我负责的但是我也稍稍参与了的算法部分:

 

 

继续留坑.下次要把IIC的通讯改写和算法贴上来…

转载于:https://www.cnblogs.com/pipicold/p/3320535.html

你可能感兴趣的文章
Vue 框架-01- 入门篇 图文教程
查看>>
多变量微积分笔记24——空间线积分
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>