ESPcopter无人机源码分析.3(阅读环境搭建)
ESPcopter无人机源码分析.2(使用分时库)
ESPcopter无人机源码分析.1
ESPcopter无人机初探(UWB定位+ESP8266MCU)
这篇文章同样是不完整的,因为我隔得时间太久了,我思路没有了。
https://www.espressif.com/zh-hans/support/documents/technical-documents?keys=&field_type_tid%5B%5D=14
ESP8266的文档页面
https://github.com/esp8266/Arduino
ESP8266 arduino
https://github.com/yunswj/esp8266-drone
应该源码在我的GT上面
把源码放一起
一个最简单的demo
这是引入的头文件引入的文件
启动了很多的实例:基础,TOF,PID,姿态解算,积木接口
对于一个无人机来讲,需要管理的硬件有很多,需要一个比较强大的初始化
不知道为啥
为了串口正确初始化
这个应该是Arduino里面的封装
要启用的引脚
对速度的控制在应该drone里面很重要,使用PWM去体现,所有有必要对PWM展开说说。
符号树
还有对4个电机引脚的初始化工作,使用4个PWM的通道
4给电机4个通道
全部关闭,把4个通道都关闭,占空比都关了!!!
https://github.com/espressif/ESP8266_NONOS_SDK
https://github.com/espressif/ESP8266_RTOS_SDK
乐鑫的开发有一个NONOS_SDK,还有一个RTOS
对于ESP8266_NONOS_SDK,
用ICACHE_FLASH_ATTR编译的函数编译到IROM部分; 对于这些功能,CPU执行指令高速缓存中的代码。
相反,系统启动时没有ICACHE_FLASH_ATTR的函数加载到IRAM中。因此,使用ICACHE_FLASH_ATTR有助于降低IRAM要求。
不要在中断处理程序中使用ICACHE_FLASH_ATTR函数,因为它可能与闪存R / W操作冲突。
static pwm_phase_array pwm_phases[3];
typedef struct pwm_phase(pwm_phase_array)[PWM_MAX_CHANNELS + 2];
我觉得这个时代写的东西应该是NOSDK写的
Non-OS SDK 主 要使⽤定时器和回调函数的⽅式实现各个功能事件的嵌套,达到特定条件下触发特定功能 函数的⽬的。
此时不知道花了多少时间。。。。:
https://www.espressif.com/sites/default/files/documentation/2c-esp8266_non_os_sdk_api_reference_cn.pdf
API在此
PWM在意的是占空比的时间,就是这个高电平的时间
这个地方看wiki的解释好了
https://zh.wikipedia.org/zh-cn/%E8%84%88%E8%A1%9D%E5%AF%AC%E5%BA%A6%E8%AA%BF%E8%AE%8A
PWM是一个23位的硬件定时器,NMI就是个不可屏蔽中断
总之就是很吊,爷一启动谁都拦不住
硬件定时器不能和PWM混用,虽然Arduino的定时器控制起来很鬼畜
NMI就是要一种全部资源倾向它的中断,很狂,但是为了这个任务一马前行
寄存器不是很多,比较好控制
PWM的配置
PWM计算出定时器的周期,然后保存各通道的参数。中断以后会被要求给一个新的参数,这个参数使用标志位来控制,看不懂了,看看代码。
在这里
这是Demo,电灯的程序,PWM控制
这里就似乎跟着我们的代码看定义,灯的定义是1,0是个传感器设备
PWM通道5个,剩下是RGB,剩下是冷色和暖色?
这个就是我们文档里面说的这个参数保存
因为是SDK嘛,数据类型也要自成体系
这里就是函数的修饰,这个函数编译的时候放哪里
这个是得到通道数量
就是这个结构体的信息
set就是设置灯的占空比信息
得到PWM的周期