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

2019-07-13 21:55发布

class="markdown_views prism-atom-one-light"> 版权声明:本文为博主原创文章,转载请备注转载地址!!!。 https://blog.csdn.net/super828/article/details/80037571 最近硬件四轴很火,了解了很久,还是选择了正点原子的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(); //开启电源}




微信搜索“炫 {MOD}Allen” 或者扫描下面二维码、关注,获取更多干货!
在这里插入图片描述