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

版权声明:本文为博主原创文章,转载请备注转载地址!!!。 https://blog.csdn.net/super828/article/details/84350531
版权声明:本文为博主原创文章,转载请备注转载地址!!!。 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 (); //开启电源
}





版权声明:本文为博主原创文章,转载请备注转载地址!!!。 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 (); //开启电源
}





猜你喜欢

转载自blog.csdn.net/super828/article/details/84350531