//第一组热电阻控制
if(rtdout1<tmin) //温度是否小于最小值
{
GPIO_ResetBits(GPIOD,GPIO_Pin_0); //关闭阀门1
GPIO_ResetBits(GPIOD,GPIO_Pin_1); //关闭阀门2
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,DISABLE); //时钟关闭
}
else
{
if(rtdout1>tmax) //温度是否大于最大值
{
GPIO_SetBits(GPIOD,GPIO_Pin_0); //开启阀门1
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //时钟开启
}
else
{
}
if(TIM_GetFlagStatus(TIM2,TIM_FLAG_Update)!=RESET&&rtdout1>tmax)
//判断定时1分钟是否溢出并且此时温度大于最大值
{
GPIO_SetBits(GPIOD,GPIO_Pin_1); //是的话开启阀门2
}
else
{
}
}
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_CounterMode=TIM_CounterMode_Up; //模式为向上计数
TIM_TimeBaseStructure.TIM_RepetitionCounter=60; //按照72MHZ计算 定时为1S 重复60次计数为1分钟
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //初始化时钟
TIM_ClearFlag(TIM2,TIM_FLAG_Update); //清除中断溢出标志
TIM_ARRPreloadConfig(TIM2,DISABLE); //禁止ARR预装载缓冲器
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //允许溢出
TIM_Cmd(TIM2,ENABLE); //允许计数
}
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //选择优先级组别
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel; //中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //0级抢占式优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //0级优先级响应
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中断
NVIC_Init(&NVIC_InitStructure);
}
这个是我写的温控逻辑与定时器中断设置 当温度小于tmin时阀门关闭 时钟关闭 当温度大于tmax时开启阀门1 时钟开启计数 当1分钟以后如果温度还大于tmax开阀门2
问题在于 我进行模拟实验的时候 温度大于tmax时候阀门1开启 1分钟以后阀门2不开启 不知道问题出在哪里 希望大虾和大神们帮助下!谢谢了!我估计是时钟问题!
|