关于电子设计大赛无人机题的学习笔记(1) MSP432入门和飞控源码框架解析
电赛无人机题及其情况简述
电子设计大赛 —四天三夜爆肝大赛那个 大家懂得都懂 今年被老板抓了带队参加,这倒没啥总体来说当时接了这个活还蛮快乐的,新的芯片还能做无人机开发,老快乐了。以前用32做过ROBOMASTER 去年战绩还是挺不错的,去年电控主力!!
但是,但是,但是,假期开工四天时间 直接人就裂了 ,最主要的原因 老板要求必须要用MSP432P401R来做 就TI家的芯片 ,真的开发经历 直接血泪史 ,各种裂开(小声BB),主要原因
1.必须用KEIl做开发
2.从放假到比赛 工期只有三周左右 从零到一个亿 emmmmm好叭 也没事啦 毕竟老板导师 ,以后 还要跟着老板混
3.TI的芯片资料实在少到可怜 干个啥第一步google 10min ---- 无,csdn/github/starkoverflow -----无 好叭芯片手册 ——-----第二天凌晨五点 终于找到了 , 测试 ----失败 第三天凌晨 ----问题解决了 ,人麻了 。
4.大一小菜鸡真的见过的场面太少了
程序和飞机老板联系到了一家研发无人机的企业 _–中科浩电 提供了起步资源,算是勉强能开工
顺便备赛期间还在做DJI开源飞控的二次研发 哇这个飞机已经做好的飞控和DJI的比起来 仿佛 emmm算了不描述了…。。。
好了吐槽结束 现在开始正式的学习笔记
学习记录 D7.17-D7.22
本来是想把每一篇心得和记录分开写分开发留个技术手册 下次有人用这个神奇的芯片的时候少走点弯路
但是备赛时间太紧张了,等比完赛我会专门写几个处理问题的专题文档留做备用的。现在只能写个重要问题记录和技术日志。
1 编译烧录日志,问题测试记录/环境搭建
XDS下载器安装正常流程中遇到的相关问题及解决方案
录的时候会出现驱动安装
-
== 驱动安装过程中必须保证 驱动安装在C盘==
-
可能会要求进行固件升级,固件升级的时候需要保证不断电 断电会刷砖(未找到修复方案)
Cannot Load Flash Programming Algorithm 问题的解决方案
- 烧录的时候出现该报错进行FLM remove 重置即可
- 最好在之后的烧录过程中把16K的FLASH FLM配置文件直接REMOVE掉,这样就再没出过这个报错。
2 无线调试器的装配
JTAG 接口
jtag在TI 的相关板子中使用的接口方式是TI_JTAG,并且在和XDS调试仿真器的更换过程中要仔细按照tI官方给的方案才能联通 ,略微有点复杂但是 最后基于JTAG进行下载调试还是实现了
无线调试器
正点原子提供的无线调试器可以进行无线调试操作,接线方式理论上和JTAG 一致
无线调试器由于驱动问题 设备管理器中识别异常,解决方案暂时未找到
目前的解决方案
还是用lunchpad上自带的xds110调试器还是好使 …白瞎了花了那么多时间,最后再看情况搞吧
3 MSP432401R里的时钟信号设置和应用方式
先放一段配置代码 后面再补相关文献资料和讲解,这个和PWM波调制花了一整天时间看了三四十页 datasheet才搞定 比较麻烦
时钟配置方法 //结构体用于配置时钟基本信息
下面的函数包含了所需要的时钟配置方法
eUSCI_UART_Config uartConfigA0 =
{
EUSCI_A_UART_CLOCKSOURCE_SMCLK, // SMCLK Clock Source
6, // BRDIV = 78
8, // UCxBRF = 2
32, // UCxBRS = 0
EUSCI_A_UART_NO_PARITY, // No Parity-
EUSCI_A_UART_LSB_FIRST, // LSB First
EUSCI_A_UART_ONE_STOP_BIT, // One stop bit
EUSCI_A_UART_MODE, // UART mode
EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION // Oversampling
};
MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P1,
GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);
MAP_UART_initModule(EUSCI_A0_BASE, &uartConfigA0);
CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_12); // set DCO 12MHZ
/* Enable UART module */
MAP_UART_enableModule(EUSCI_A0_BASE);
/* Enabling interrupts */
MAP_UART_enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_RECEIVE_INTERRUPT);
MAP_UART_enableInterrupt(EUSCI_A0_BASE, EUSCI_A_UART_TRANSMIT_INTER
4 MPU 6050
我们复用中科浩电写的一部分代码没注意到A0人家已经给光流传感器给占了 于是只能换一换方案
因为A0口被串口占用,在测试样例代码过程中发现串口数据会被光流数据占用
在到达测试代码之前会产生不正常的数据流混杂
pwm 相关应用方法和计算方法
Timer_A is a 16-bit timer/counter with up to seven capture/compare registers. Timer_A can support
multiple capture/compares, PWM outputs, and interval timing. Timer_A also has extensive interrupt
capabilities. Interrupts may be generated from the counter on overflow conditions and from each of the
capture/compare registers.
— TI user guide
输入捕获,简单的说就是通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存(TIMx_CCRx)里面,完成一次捕获。
时钟的四种模式
时钟的对应模式下生成的包含了多种模式 的电平转换机制,在比较寄存器CCRX到达不同的值得时候产生的效果包含了图中所示的机制
捕获/比较寄存器与引脚之间有映射对应关系----一定要注意这一点
在测试过程中犯了个很傻的错误 也做个小记录 示波器的阈值电压设错了 一直没检查出来问题 觉得是pwm波调制的有问题
示波器的阈值电压需要进行设置,如果设为3.3V,如果电压不完全够会出现波形完全不正常的情况
飞控主程序研究进展
FMU来自中科浩电
代码架构分析
但是轮询操作 kernel polling(); 十分暴力
直接把DOC时钟开到满,然后在不同时间 即在不同的频率上对应的不同的中断直接打开 (小声) 这DOC真是太难了 233333
在飞控中采用状态机逻辑操作,
状态机 的paRT1 负责操作 当前状态机的状态保持
包括的内容有 状态机的下一个状态 ,当前状态的参数 和当前状态的保持时长
状态机的paRT2 负责操作当前状态机的具体功能实现
状态机的标准写法值得学习
(代码下次再贴)
这是暂时的研发进展 会保持进展和记录