分享到:
最近硬件四轴很火,了解了很久,还是选择了***的MinIFly,主要还是资料多,后边可以有人讨论,建了个群830802928,研究问题相对来说方便一些。
兴奋!!四轴终于拿到手,功能很强大,主要是还支持二次开发,可以研究下玩玩小四轴了
还是先从硬件入手分析下
1.系统框架
主体可以分成两个小系统,后续可以按照这个顺序分析代码
2.控制部分---基于M4和外围传感器

2.比较关注的电源部分
电源还是比较考究,直接包含了充电功能,不用每次使用外置的充电模块(之前自制过一个充电模块,看来以后可以集成到电路里了)
按键断电功能这个比较喜欢:这个是NFR51822控制VEN_D引脚来实现断电的
上个NFR51822部分电路

开始看代码,大致看了下程序,先是监测按键状态
/*按键扫描处理*/
-
-
<p style="font-size: 18px;"> void buttonProcess()</p>
-
<p style="font-size: 18px;"> {</p>
-
<p style="font-size: 18px;"> static unsigned int lastTick;</p>
-
<p style="font-size: 18px;"> static unsigned int pressedTick;</p>
-
<p style="font-size: 18px;"> static bool pressed = false;</p>
-
<p style="font-size: 18px;"> if (lastTick != systickGetTick())</p>
-
<p style="font-size: 18px;"> {</p>
-
<p style="font-size: 18px;"> lastTick = systickGetTick();</p>
-
<p style="font-size: 18px;"> if(pressed==false && BUTTON_READ()==BUTTON_PRESSED)</p>
-
<p style="font-size: 18px;"> {</p>
-
<p style="font-size: 18px;"> pressed = true;</p>
-
<p style="font-size: 18px;"> pressedTick = systickGetTick();</p>
-
<p style="font-size: 18px;"> }</p>
-
<p style="font-size: 18px;"> else if(pressed==true)</p>
-
<p style="font-size: 18px;"> {</p>
-
<p style="font-size: 18px;"> if(BUTTON_READ()==BUTTON_RELEASED)</p>
-
<p style="font-size: 18px;"> pressed = false;</p>
-
<p style="font-size: 18px;"> if ((systickGetTick()-pressedTick) > BUTTON_LONGPRESS_TICK)</p>
-
<p style="font-size: 18px;"> state = buttonLongPress;</p>
-
<p style="font-size: 18px;"> else if(BUTTON_READ()==BUTTON_RELEASED)</p>
-
<p style="font-size: 18px;"> state = buttonShortPress;</p>
-
<p style="font-size: 18px;"> }</p>
-
<p style="font-size: 18px;"> }</p>
-
<p style="font-size: 18px;"> }</p>
-
<p style="font-size: 18px;"> /*获取按键状态*/</p>
-
<p style="font-size: 18px;"> buttonEvent_e buttonGetState()</p>
-
<p style="font-size: 18px;"> {</p>
-
<p style="font-size: 18px;"> buttonEvent_e currentState = state;</p>
-
<p style="font-size: 18px;"> state = buttonIdle;</p>
-
<p style="font-size: 18px;"> return currentState;</p>
- <p style="font-size: 18px;"> }</p>
然后就是在主函数中进行相应的操作,先不说了
看下怎么实现电源开关的:这么最后应该F1部分还是有电的,只是消耗较少,寻求一种可以完全断电的方案??
/*开启电源*/
-
-
<p style="font-size: 18px;"> void pmPowerOn(void)</p>
-
<p style="font-size: 18px;"> {</p>
-
<p style="font-size: 18px;"> nRF_gpio_cfg_output(UART_TX_PIN); //使能串口TX</p>
-
<p style="font-size: 18px;"> nrf_gpio_pin_set(UART_TX_PIN);</p>
-
<p style="font-size: 18px;"> nrf_gpio_cfg_output(RADIO_PAEN_PIN);// 开启无线功能</p>
-
<p style="font-size: 18px;"> nrf_gpio_pin_set(RADIO_PAEN_PIN);</p>
-
<p style="font-size: 18px;"> nrf_gpio_cfg_output(PM_VBAT_SINK_PIN);// 设置ADC</p>
-
<p style="font-size: 18px;"> nrf_gpio_pin_clear(PM_VBAT_SINK_PIN);</p>
-
<p style="font-size: 18px;"> pmStartAdc(); //开启ADC转换</p>
-
<p style="font-size: 18px;"> }</p>
-
<p style="font-size: 18px;"> /*关闭电源*/</p>
-
<p style="font-size: 18px;"> void pmPowerOff(void)</p>
-
<p style="font-size: 18px;"> {</p>
-
<p style="font-size: 18px;"> nrf_gpio_cfg_input(UART_TX_PIN, NRF_GPIO_PIN_PULLDOWN);</p>
-
<p style="font-size: 18px;"> uartDeinit();</p>
-
<p style="font-size: 18px;"> nrf_gpio_cfg_input(STM_NRST_PIN, NRF_GPIO_PIN_PULLDOWN);</p>
-
<p style="font-size: 18px;"> nrf_gpio_pin_clear(STM_NRST_PIN);</p>
-
<p style="font-size: 18px;"> nrf_gpio_pin_clear(PM_VCCEN_PIN); //关闭 LDO使能控制脚</p>
-
<p style="font-size: 18px;"> LED_OFF();</p>
-
<p style="font-size: 18px;"> nrf_gpio_pin_clear(RADIO_PAEN_PIN); //关闭PA</p>
-
<p style="font-size: 18px;"> nrf_gpio_cfg_input(PM_VBAT_SINK_PIN, NRF_GPIO_PIN_NOPULL);</p>
-
<p style="font-size: 18px;"> NRF_POWER->SYSTEMOFF = 1UL;</p>
-
<p style="font-size: 18px;"> while(1); //进入死循环</p>
-
<p style="font-size: 18px;"> }</p>
-
<p style="font-size: 18px;"> void pmInit()</p>
-
<p style="font-size: 18px;"> {</p>
-
<p style="font-size: 18px;"> /* STM32 电源配置 */</p>
-
<p style="font-size: 18px;"> nrf_gpio_cfg_output(PM_VCCEN_PIN);</p>
-
<p style="font-size: 18px;"> nrf_gpio_pin_set(PM_VCCEN_PIN); //使能stm32电源</p>
-
<p style="font-size: 18px;"> msDelay(100);</p>
-
<p style="font-size: 18px;"> /* STM32 复位 */</p>
-
<p style="font-size: 18px;"> nrf_gpio_cfg_output(STM_NRST_PIN);</p>
-
<p style="font-size: 18px;"> nrf_gpio_pin_clear(STM_NRST_PIN);</p>
-
<p style="font-size: 18px;"> msDelay(100);</p>
-
<p style="font-size: 18px;"> nrf_gpio_pin_set(STM_NRST_PIN);</p>
-
<p style="font-size: 18px;"> msDelay(100);</p>
-
<p style="font-size: 18px;"> nrf_gpio_cfg_input(USB_CONNECTED_PIN, NRF_GPIO_PIN_NOPULL);</p>
-
<p style="font-size: 18px;"> nrf_gpio_cfg_input(PM_CHG_STATE_PIN, NRF_GPIO_PIN_PULLUP);</p>
-
<p style="font-size: 18px;"> pmPowerOn(); //开启电源</p>
- <p style="font-size: 18px;"> }</p>
(0 )
(0 )


-
- 0000000000000000
-
1888 发帖7917 回复34980 积分
- 私信他 +关注
发表回复
块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖