定义变量时定义两个实数变量,tmax和tmin,目前分别赋值45和46,当温度高于tmax时,阀门1开启,当1分钟内温度还高于tmax时,阀门2开启。当温度低于tmin的时候阀门1,2同为关闭状态。 这个为要实现的逻辑!
ffice ffice" />//第一组热电阻控制
if(rtdout1<tmin)
{
GPIO_ResetBits(GPIOD,GPIO_Pin_0); //关闭阀门1
GPIO_ResetBits(GPIOD,GPIO_Pin_1); //关闭阀门2
}
if(rtdout1>tmax)
{
GPIO_SetBits(GPIOD,GPIO_Pin_0); //开启阀门1
TIM_Cmd(TIM2,ENABLE); //开启定时计数
if(TIM_GetFlagStatus(TIM2,TIM_FLAG_Update)!=RESET) //判断定时1分钟是否溢出
{
if(rtdout1>tmax) //溢出,再次判断是否温度大于最高值
{
GPIO_SetBits(GPIOD,GPIO_Pin_1); //开启阀门2
Timer_Configuration() //对于时钟初始化调用
}
else
{
GPIO_ResetBits(GPIOD,GPIO_Pin_1); //未溢出或者1分钟内温度低于tmax阀门2关闭
}
}
void Timer_Configuration(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period=1999; //周期1999
TIM_TimeBaseStructure.TIM_Prescaler=35999; //预分频 72MHZ/(35999+1)=2000HZ
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //72MHZ
TIM_TimeBaseStructure.TIM_RepetitionCounter=60 //由于周期*预分频得出1S中断,60次重复计数溢出,为1分钟
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //模式为向上计数
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //TIM2初始化
TIM_ClearFlag(TIM2,TIM_FLAG_Update); //清除中断溢出标志
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //允许溢出
TIM_Cmd(TIM2,ENABLE); //允许计数
}
控制段1是在整个While(1)循环内的一部分,整个逻辑在现实中的出现的问题是:但阀门开起后很多时候在数秒钟后就会达到降温目的,以你目前逻辑会造成过度散热,引起系统不稳定
这将如何解决 求助了!
|