北京航空航天大学毕业设计(论文)
第37页
附录B 主要实验程序 主程序部分:
int main(void) {
RCC_Configuration(); GPIO_Configuration(); ADC1_Configuration(); DMA_Configuration(); TIM2_Configuration(); BI_PWM_Configuration(); Single_PWM_Configuration(); Single_PWM_Run(); NVIC_Configuration(); Delay_us(50000); while (1) { } }
调节占空比程序:
Adjust(void) {
P_NewValue=AD_ConvertValue[0]*AD_ConvertValue[1]; P_OldValue=AD_HistoryValue[0]*AD_HistoryValue[1]; PDiff=P_NewValue-P_OldValue; VDiff=AD_ConvertValue[0]-AD_HistoryValue[0]; DutyChange=(s16)(PDiff/VDiff/10); capture = TIM_GetCapture1(TIM1); DUTY=capture+DutyChange-25; if(DUTY>680) {
DUTY=680; BI_PWM_Update(DUTY,pwmmode);
}
else if(DUTY<0)
{
DUTY=0; BI_PWM_Update(DUTY,pwmmode); } else }
BI_PWM_Update(DUTY,pwmmode);
北京航空航天大学毕业设计(论文)
控制条件:
第38页
if(AD_ConvertValue[0]>(AD_ConvertValue[3]+300)&&AD_ConvertValue[0]>1300&&(!AD_First)) buckrun();
else if(AD_ConvertValue[0]<(AD_ConvertValue[3]+50)||AD_ConvertValue[0]<1200) buckstop();
else if((AD_ConvertValue[1]>500)||(AD_ConvertValue[2]>500)) buckstop();
//蓄电池电流过大时,断开光电池输入防反。 else buckrun();
充电电路开启和关闭程序: void buckrun(void)
{
BI_PWM_Update(DUTY,pwmmode); BI_PWM_Run(); Delay_us(10);
GPIO_ResetBits(GPIOB,GPIO_Pin_1); GPIO_SetBits(GPIOB,GPIO_Pin_4); }
void buckstop(void) {
GPIO_SetBits(GPIOB,GPIO_Pin_1); BI_PWM_Stop();
GPIO_ResetBits(GPIOB,GPIO_Pin_4); }
过程选择程序:
if(charge_state==DISABLE)//此处有问题。逻辑顺序有点乱 {
if(AD_ConvertValue[3] charge_state=ENABLE; promote_state=ENABLE; target_value=floating1; } else if(AD_ConvertValue[3] charge_state=ENABLE; promote_state=ENABLE; target_value=floating2; } else { 北京航空航天大学毕业设计(论文) charge_state=DISABLE; promote_state=DISABLE; target_value=boost; } } 第39页 TIM2中断响应程序: void TIM2_IRQHandler(void) { if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); ADC_SoftwareStartConvCmd(ADC1, ENABLE); } if(tim2_state==ENABLE) { Cminute--; if(!Cminute) { Cminute=6000; Chour--; } if((!Cminute)&&(!Chour)) { Chour=120; tim2_state=DISABLE; charge_state=DISABLE; } } }

