MiniFly四轴学习系列1---四轴部分系统及电源分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MiniFly四轴学习系列1---四轴部分系统及电源分析相关的知识,希望对你有一定的参考价值。

技术图片


最近硬件四轴很火,了解了很久,还是选择了正点原子的MiniFly,主要还是原子的论坛资料多,后边可以有人讨论,不像很多就是建了个群,研究问题还是在论坛方便很多。

四轴终于拿到手,功能很强大,主要是还支持二次开发,可以研究下玩玩小四轴了

还是先从硬件入手分析下

1.系统框架
主体可以分成两个小系统,后续可以按照这个顺序分析代码
1.通信部分---基于M0和NFR51822,包括电源管理
2.控制部分---基于M4和外围传感器

技术图片

2.比较关注的电源部分
电源还是比较考究,直接包含了充电功能,不用每次使用外置的充电模块(之前自制过一个充电模块,看来以后可以集成到电路里了)

按键断电功能这个比较喜欢:这个是NFR51822控制VEN_D引脚来实现断电的

上个NFR51822部分电路
技术图片

开始看代码,大致看了下程序,先是监测按键状态

/*按键扫描处理*/
void buttonProcess()

????static unsigned int lastTick;
????static unsigned int pressedTick;
????static bool pressed = false;
????if (lastTick != systickGetTick())
????
????????lastTick = systickGetTick();
????????if(pressed==false && BUTTON_READ()==BUTTON_PRESSED)
????????
????????????pressed = true;
????????????pressedTick = systickGetTick();
????????
????????else if(pressed==true)
????????
????????????if(BUTTON_READ()==BUTTON_RELEASED)
????????????????pressed = false;
????????????if ((systickGetTick()-pressedTick) > BUTTON_LONGPRESS_TICK)
????????????????state = buttonLongPress;
????????????else if(BUTTON_READ()==BUTTON_RELEASED)
????????????????state = buttonShortPress;
????????
????

/*获取按键状态*/
buttonEvent_e buttonGetState()

????buttonEvent_e currentState = state;
????state = buttonIdle;
????return currentState;

然后就是在主函数中进行相应的操作,先不说了

看下怎么实现电源开关的:这么最后应该F1部分还是有电的,只是消耗较少,寻求一种可以完全断电的方案??

/*开启电源*/
void pmPowerOn(void)

????nrf_gpio_cfg_output(UART_TX_PIN);???//使能串口TX
????nrf_gpio_pin_set(UART_TX_PIN);
????
????nrf_gpio_cfg_output(RADIO_PAEN_PIN);// 开启无线功能
????nrf_gpio_pin_set(RADIO_PAEN_PIN);
????
????nrf_gpio_cfg_output(PM_VBAT_SINK_PIN);// 设置ADC
????nrf_gpio_pin_clear(PM_VBAT_SINK_PIN);
????pmStartAdc();???//开启ADC转换

/*关闭电源*/
void pmPowerOff(void)
???
????nrf_gpio_cfg_input(UART_TX_PIN, NRF_GPIO_PIN_PULLDOWN);
????uartDeinit();
????
????nrf_gpio_cfg_input(STM_NRST_PIN, NRF_GPIO_PIN_PULLDOWN);
????nrf_gpio_pin_clear(STM_NRST_PIN);
????
????nrf_gpio_pin_clear(PM_VCCEN_PIN);???? //关闭 LDO使能控制脚
????
????LED_OFF();??
????nrf_gpio_pin_clear(RADIO_PAEN_PIN);?? //关闭PA
????nrf_gpio_cfg_input(PM_VBAT_SINK_PIN, NRF_GPIO_PIN_NOPULL);
????NRF_POWER->SYSTEMOFF = 1UL;
????while(1);? //进入死循环

void pmInit()
???
????/* STM32 电源配置 */
????nrf_gpio_cfg_output(PM_VCCEN_PIN);
????nrf_gpio_pin_set(PM_VCCEN_PIN);?????//使能stm32电源
????msDelay(100);
????
????/* STM32 复位 */
????nrf_gpio_cfg_output(STM_NRST_PIN);
????nrf_gpio_pin_clear(STM_NRST_PIN);
????msDelay(100);???
????nrf_gpio_pin_set(STM_NRST_PIN);
????msDelay(100);???
????nrf_gpio_cfg_input(USB_CONNECTED_PIN, NRF_GPIO_PIN_NOPULL);
????nrf_gpio_cfg_input(PM_CHG_STATE_PIN, NRF_GPIO_PIN_PULLUP);
????
????pmPowerOn(); //开启电源

以上是关于MiniFly四轴学习系列1---四轴部分系统及电源分析的主要内容,如果未能解决你的问题,请参考以下文章

MiniFly Firmware V1.1开源四轴代码分析七:系统时钟

MiniFly V1.1开源四轴驱动代码分析八:旋转矩阵控制分配矩阵等分析介绍

MiniFly V1.1开源四轴驱动代码分析八:旋转矩阵控制分配矩阵等分析介绍

MiniFly V1.1开源四轴驱动代码分析八:旋转矩阵控制分配矩阵等分析介绍

自己写四轴飞控难度有多大?

基于ArduPilot的旋翼式无人机飞行器开发系列(三,四轴无人机的组成)