打印
[四轴原创DIY]

做个四轴飞行器找工作

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
我也面试大疆了,第三关被刷了。他要求相当高啊

使用特权

评论回复
22
zhuyemm| | 2016-11-28 18:29 | 只看该作者
支持一下 楼主加油

使用特权

评论回复
23
andraw0912| | 2016-12-7 13:53 | 只看该作者
楼主继续日记,不要太监了!

使用特权

评论回复
24
遇见未知的你|  楼主 | 2016-12-12 21:06 | 只看该作者
楼主心累啊,飞机搞的是单环pid,参数还不太好继续努力中

使用特权

评论回复
25
遇见未知的你|  楼主 | 2016-12-12 21:22 | 只看该作者
file:///C:/Users/MMC_CAODONG/AppData/Roaming/Tencent/QQ/Temp/$GU1KP%7BU8D~AI1YC8_UY290.jpg

使用特权

评论回复
26
遇见未知的你|  楼主 | 2016-12-21 20:14 | 只看该作者
本帖最后由 遇见未知的你 于 2016-12-22 22:52 编辑

学习笔记:2016.11.20--2016.12.21
1)楼主上次已经搭好飞机,所有硬件环境已经完成,到公司实习时,已经有飞过飞机,飞机有点原地旋转,怀疑yaw有问题,但是在打方向舵时发现飞机没有响应,怀疑遥控捕获有问题,
2)飞机代码移植已经完成,进入代码优化,简化主函数,将一些函数写入到定时器,或者建立其他的c h文件。      在这里我先为大家上传源代码,并做一些解释,源代码bug较多,因为不是为了下载就可以用,希望大家一起努力从中学到东西。
                     《《楼主是硬件转软件,菜鸟级,大神没有必要看》》
                    百度云:pan.baidu.com/s/1hrGWt2O    密码:5qc2(请复制到新的网页打开)

使用特权

评论回复
27
遇见未知的你|  楼主 | 2016-12-21 23:56 | 只看该作者
本帖最后由 遇见未知的你 于 2016-12-22 00:12 编辑

#define  Roll_PID_ADDR_BASE    0x0800E000            //存储Roll_PID参数的Flash页首地址,对于256K的来说,就是从248k开始
#define  Pitch_PID_ADDR_BASE   0x0800E800            //存储Pitch_PID参数的Flash页首地址,对于256K的来说,就是从250k开始
#define  Yaw_PID_ADDR_BASE     0x0800F000            //存储Yaw_PID参数的Flash页首地址,对于256K的来说,就是从252k开始
#define  Mag_ADDR_BASE         0x0800F800            //存储mag数据的Flash页首地址,对于256K的来说,就是从254k开始
/*--------------------------------------------------------------------------------------------------*/

      
      这是com.h中的一段代码,com.h用来在线调试pid,并将pid参数写入flash,这一段代码主要作用是确定flash地址,飞控在开机后先会传感器自检,然后判断是否进入姿态矫正,再然后开始从主控芯片的flash中读取pid参数,用来姿态解算。所以大家如果要移植这个程序则首先要更改Flash页首地址。
      stm32c8t6的flash官方说是64k但是有一些网友的却是128k,我也是,听说是厂家可能把CB不良的部分按C8用或者用的是同一个晶圆而已了,只是测试的时候未测型号不说明的部分,这里不做讨论。
      

图片1.jpg (66.57 KB )

图片1.jpg

使用特权

评论回复
28
遇见未知的你|  楼主 | 2016-12-22 22:39 | 只看该作者
本帖最后由 遇见未知的你 于 2016-12-22 22:54 编辑

那该如何确定flash首地址呢?对于keil软件很简单:打开工程魔术棒图标,可以看到target下有IROM1:0x8000000  0x10000(0x8000000为首地址  0x10000为偏移量),它的意思就是对于stm32f103c8t6来说64k的flash地址由0x8000000开始,到0x8010000结束,中间的长度代表64k的flash空间。 但是直接设置flash地址比较麻烦而且不易移植所以建议改为一下代码
#define USER_SECTOR (60)
//#define USER_ADDR
#define  Roll_PID_ADDR_BASE    0x08000000+((USER_SECTOR+0)*1024)            //存储Roll_PID参数的Flash页首地址,对于256K的来说,就是从248k开始
#define  Pitch_PID_ADDR_BASE   0x08000000+((USER_SECTOR+1)*1024)            //存储Pitch_PID参数的Flash页首地址,对于256K的来说,就是从250k开始
#define  Yaw_PID_ADDR_BASE     0x08000000+((USER_SECTOR+2)*1024)                    //存储Yaw_PID参数的Flash页首地址,对于256K的来说,就是从252k开始
#define  Mag_ADDR_BASE         0x08000000+((USER_SECTOR+3)*1024)                    //存储mag数据的Flash页首地址,对于256K的来说,就是从254k开始
注释有错大家不必在意。     #define USER_SECTOR (60)//改变60 即可适用于其他32mcu。

@G$2OZ$UGT72{T~[TE~_BIU.png (45.78 KB )

@G$2OZ$UGT72{T~[TE~_BIU.png

使用特权

评论回复
29
遇见未知的你|  楼主 | 2016-12-22 23:00 | 只看该作者
本帖最后由 遇见未知的你 于 2016-12-23 00:01 编辑

      我先从主函数开始,告诉大家我如何移植的程序并阐述一些个人观点,大神勿喷,欢迎纠错。
int main(void)
{
    Clock_Enable();                         //使能系统时钟
    NVIC_Configuration();           //配置嵌套中断
    SysTick_Config(SystemCoreClock / 1000);        //systick时钟采用108M,产生1ms时基,中断优先级最低0xFFF
    TIM1_PWMOutMotor_Init();    //初始化Tim4 PWMOUT  周期2.5ms 频率400hz  高电平0.875ms~2.0ms
    delay_ms(20);           //500ms后系统稳定
    GPIO_Configuration();
    Usart2Init(115200);        //配置串口
    i2cInit();                         //初始化I2C总线

    TIM3_PWMInCap_Init();       //初始化Tim2 PWMin捕获 周期为20ms,脉冲宽度为1ms~2ms之间
    delay_ms(500);           //500ms后系统稳定
    Turn_On_LEDs();         //红灯和绿灯点亮,进入等待
    init_mpu9150();                 //初始化传感器
    delay_ms(3000);                     //延迟3s等待系统稳定,等待接收机与遥控连接,等待是否启动compass校准
《1》  Clock_Enable();      //使能系统时钟---主要用于使能所有GPIO时钟,以下为原函数:
void Clock_Enable(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
                           RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
}
《2》 NVIC_Configuration();    //配置嵌套中断                   这有一个讲的比较好的帖子 (  请在新网页打开      blog.sina.com.cn/s/blog_1456c40890102vaq1.html   )
        中断就是CPU在执行一件事A时突然有一件急事B要做,于是CPU停下手头的事A,保护好现场(为一会处理完急事B可以继续回来处理A)去做急事B,做完后立即回来做A.这就是一次中断。为什么要中断?为了实现实时处理与同步操作,在不写操作系统的情况下单片机不能同时做两件事,中断可以实现





















使用特权

评论回复
30
cdc321| | 2016-12-28 23:38 | 只看该作者
楼主你是电子专业出身的?拿到大僵的OFFER了吗?

使用特权

评论回复
31
遇见未知的你|  楼主 | 2017-1-3 17:53 | 只看该作者
cdc321 发表于 2016-12-28 23:38
楼主你是电子专业出身的?拿到大僵的OFFER了吗?

电气专业出身的。拿到大疆的OFFER了,但是是做机器人,所以推了

使用特权

评论回复
32
lizhuang_1| | 2017-1-9 21:01 | 只看该作者
用的什么通讯方式?如果软件用的是现成的代码,硬件可以直接组装的话,那工作量体现在哪里啊?

使用特权

评论回复
33
遇见未知的你|  楼主 | 2017-1-12 22:17 | 只看该作者
什么通讯方式?指的是哪个?姿态模块?还是?

使用特权

评论回复
34
遇见未知的你|  楼主 | 2017-1-12 22:17 | 只看该作者
lizhuang_1 发表于 2017-1-9 21:01
用的什么通讯方式?如果软件用的是现成的代码,硬件可以直接组装的话,那工作量体现在哪里啊? ...

主板自己画
软件移植平台不同

使用特权

评论回复
35
liu787290| | 2017-1-14 16:04 | 只看该作者
楼主,能留个联系方式么,我最近也在做这个,遇到点问题

使用特权

评论回复
36
中西部牛仔| | 2017-1-14 20:24 | 只看该作者
楼主好厉害

使用特权

评论回复
37
cdc321| | 2017-1-19 00:57 | 只看该作者
遇见未知的你 发表于 2017-1-3 17:53
电气专业出身的。拿到大疆的OFFER了,但是是做机器人,所以推了

做机器人?大疆不是做四轴飞行器的吗

使用特权

评论回复
38
1357529032| | 2017-1-25 22:18 | 只看该作者
面试怎么样?

使用特权

评论回复
39
q2512262471| | 2017-2-12 22:13 | 只看该作者
学习了!!

使用特权

评论回复
40
wmslecz| | 2017-2-22 15:06 | 只看该作者
楼主真的强啊。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则