#与你相遇
在我找资料的过程中,我见到了大四轴与小四轴,特别是crazepony的开源精神让我敬佩,我想做的就是一个小四轴,大四轴是我未来的想法,毕竟大四轴需要天地飞等比较贵的遥控器等,屌丝我表示买不起。
#四轴基本组成部分
- 动力部分:电机、电机驱动、桨叶
- 控制部分:MCU、sensor、无线通讯
- 电源部分:电池、稳压模块
首先我可以确认的是我想用STM32来做飞控,这样可以学到不少知识。
##power部分设计
在我看来市场上所能买到的小四轴的锂电池为3.7V,那么现在我需要做的是如何将这个3.7V的电压稳定到5V。
这个电路已经验证完毕,同过VSYS的电压输入后,可以产生5V的电压。
具体是咋么算的。可以参考LM27313的spec。
还要检查电池的电量,告诉控制终端,电没了,快放我下来。
##代码实现
代码已经公开,请查看提交18
void adc_setting(const uint32_t Periph,ADC_TypeDef* adc_bus,uint32_t adc_mode,FunctionalState adcscanmode,FunctionalState adcConvMode,uint32_t adc_extern,uint32_t adc_dataaign,int adc_channel)
{
ADC_InitTypeDef ADC_InitStructure;
RCC_APB2PeriphClockCmd(Periph, ENABLE ); //
ADC_DeInit(adc_bus); //
ADC_InitStructure.ADC_Mode = adc_mode; //
ADC_InitStructure.ADC_ScanConvMode = adcscanmode; //
ADC_InitStructure.ADC_ContinuousConvMode = adcConvMode; //
ADC_InitStructure.ADC_ExternalTrigConv = adc_extern; //
ADC_InitStructure.ADC_DataAlign = adc_dataaign; //
ADC_InitStructure.ADC_NbrOfChannel = adc_channel; //
ADC_Init(adc_bus, &ADC_InitStructure); //
ADC_Cmd(adc_bus, ENABLE); //
ADC_ResetCalibration(adc_bus); //
while(ADC_GetResetCalibrationStatus(adc_bus)); //
ADC_StartCalibration(adc_bus); //
while(ADC_GetCalibrationStatus(adc_bus)); //
// ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}
void adc_init(void)
{
gpio_register_input(RCC_APB2Periph_GPIOA,GPIOA,GPIO_Pin_4,GPIO_Mode_AIN); adc_setting(RCC_APB2Periph_ADC1,ADC1,ADC_Mode_Independent,DISABLE,DISABLE,ADC_ExternalTrigConv_None,ADC_DataAlign_Right,1);
}
u16 get_adc(u8 ch,ADC_TypeDef* adc_bus)
{
ADC_RegularChannelConfig(adc_bus, ch, 1, ADC_SampleTime_239Cycles5 );
ADC_SoftwareStartConvCmd(adc_bus, ENABLE);
while(!ADC_GetFlagStatus(adc_bus, ADC_FLAG_EOC ));
return ADC_GetConversionValue(adc_bus);
}
u16 Get_Adc_Average(u8 ch)
{
u32 temp_val=0;
u8 t;
for(t=0;t<10;t++)
{
temp_val+=get_adc(ch,ADC1);
systick_ms(5);
}
return temp_val/10;
}