stm32控制半导体制冷器实现饮水机保温制冷功能

半导体致冷器件是由半导体所组成的一种冷却装置,随着近代的半导体发展才有实际的应用,也就是致冷器的发明。其工作原理是由直流电源提供电子流所需的能量,通上电源后,电子负极(-)出发,首先经过P型半导体,于此吸热量,到了N型半导体,又将热量放出,每经过一个NP模块,就有热量由一边被送到令外一边造成温差而形成冷热端。冷热端分别由两片陶瓷片所构成,冷端要接热源,也就是欲冷却之。在以往致冷器是运用在CPU的,是利用冷端面来冷却CPU,而热端面散出的热量则必需靠风扇来排出。致冷器也应用于做成车用冷/热保温箱,冷的方面可以冷饮机,热的方面可以保温热的东西。

半导体制冷片的工作原理是基于帕尔帖原理,该效应是在1834年由J.A.C帕尔帖首先发现的,即利用当两种不同的导体A和B组成的电路且通有直流电时,在接头处除焦耳热以外还会释放出某种其它的热量,而另一个接头处则吸收热量,且帕尔帖效应所引起的这种现象是可逆的,改变电流方向时,放热和吸热的接头也随之改变,吸收和放出的热量与电流强度I成正比,且与两种导体的性质及热端的温度有关

设计要求使用一块制冷片实现制冷和保温,也就是要设计可以正向反向输出的电源,使用温度传感器采集温度,当接近设定温度时,逐步减小驱动电流,直到达到平衡为止。项目中使用两片IR2101S驱动NMOS实现H桥驱动电路,使用定时器PWM控制输出电流,驱动电路原理图如下。

主控采用STM32.关键程序如下

void TIM_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef	TIM_TimeBaseInitStruct;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
	
	NVIC_InitTypeDef NVIC_InitStructure;
	
	// ¿ªÆô¶¨Ê±Æ÷ʱÖÓ,¼´ÄÚ²¿Ê±ÖÓCK_INT=72M
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_TIM1, ENABLE);
	
   // Êä³ö±È½ÏͨµÀ1 GPIO ³õʼ»¯
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8 | GPIO_Pin_9  ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
		
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_13 | GPIO_Pin_14 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_SetBits(GPIOB, GPIO_Pin_13);
	GPIO_ResetBits(GPIOB, GPIO_Pin_14);
	
	TIM_DeInit(TIM1);        //½«ÍâÉèTIM1¼Ä´æÆ÷ÖØÉèΪȱʡֵ  
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1 ;    //ÉèÖÃÁËʱÖÓ·Ö¸î(Tck_tim) 
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up ;   //Ñ¡ÔñÁ˼ÆÊýÆ÷ģʽ(TIMÏòÉϼÆÊýģʽ)  
	TIM_TimeBaseInitStruct.TIM_Period = 6005 ;       //É趨¼ÆÊýÆ÷×Ô¶¯ÖØ×°Öµ,È¡Öµ·¶Î§0x0000~0xFFFF   
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71 ;    //ÉèÖÃÓÃÀ´×÷ΪTIM3ʱÖÓƵÂʳýÊýµÄÔ¤·ÖƵֵΪ(79+1),È¡Öµ·¶Î§0x0000~0xFFFF 
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseInitStruct ) ;       
	
	/* ¶¨Ê±Æ÷Êä³öͨµÀ1ģʽÅäÖà */

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;/* ģʽÅäÖãºPWMģʽ1 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	 /* Êä³ö״̬ÉèÖãºÊ¹ÄÜÊä³ö */
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; /* »¥²¹Í¨µÀÊä³ö״̬ÉèÖãºÊ¹ÄÜÊä³ö */
  TIM_OCInitStructure.TIM_Pulse = 3000;/* ÉèÖÃÌø±äÖµ£¬µ±¼ÆÊýÆ÷¼ÆÊýµ½Õâ¸öֵʱ£¬µçƽ·¢ÉúÌø±ä */
  
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/* µ±¶¨Ê±Æ÷¼ÆÊýֵСÓÚCCR1_ValʱΪ¸ßµçƽ */
  TIM_OCInitStructure.TIM_OCNPolarity= TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCNIdleState_Reset;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
  
  TIM_OC1Init(TIM1, &TIM_OCInitStructure);
  
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;/* ģʽÅäÖãºPWMģʽ1 */
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;	 /* Êä³ö״̬ÉèÖãºÊ¹ÄÜÊä³ö */
  TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; /* »¥²¹Í¨µÀÊä³ö״̬ÉèÖãºÊ¹ÄÜÊä³ö */
  TIM_OCInitStructure.TIM_Pulse = 3000;/* ÉèÖÃÌø±äÖµ£¬µ±¼ÆÊýÆ÷¼ÆÊýµ½Õâ¸öֵʱ£¬µçƽ·¢ÉúÌø±ä */
	
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;/* µ±¶¨Ê±Æ÷¼ÆÊýֵСÓÚCCR1_ValʱΪ¸ßµçƽ */
  TIM_OCInitStructure.TIM_OCNPolarity= TIM_OCPolarity_High;
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCNIdleState_Reset;
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
	
	TIM_OC2Init(TIM1, &TIM_OCInitStructure);


  /* Automatic Output enable, Break, dead time and lock configuration*/
  TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
  TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
  TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
  TIM_BDTRInitStructure.TIM_DeadTime = 5;
  TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
  TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;
  TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
  TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
  
  TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
  TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);

	
  TIM_ARRPreloadConfig(TIM1, ENABLE);/* ʹÄܶ¨Ê±Æ÷ÖØÔؼĴæÆ÷ARR */
  TIM_Cmd(TIM1, ENABLE);/* ʹÄܶ¨Ê±Æ÷ */
  TIM_CtrlPWMOutputs(TIM1, ENABLE); /* TIMÖ÷Êä³öʹÄÜ */
  
  TIM_CCxCmd(TIM1,TIM_Channel_1,TIM_CCx_Enable);
  TIM_CCxNCmd(TIM1,TIM_Channel_1,TIM_CCxN_Enable);
  TIM_CCxCmd(TIM1,TIM_Channel_2,TIM_CCx_Enable);
  TIM_CCxNCmd(TIM1,TIM_Channel_2,TIM_CCxN_Enable);

}

根据设定温度值与采集温度值调节输出PWM占空比

if(SetTemperature>Temperature)
    	{
			if(((SetTemperature-Temperature)*1200)>6000)TIM_SetCompare1(TIM1,6000);
			else TIM_SetCompare1(TIM1,(SetTemperature-Temperature)*1200); 
			TIM_SetCompare2(TIM1,0); 
			TIM_CCxCmd(TIM1,TIM_Channel_1,TIM_CCx_Enable);
			TIM_CCxCmd(TIM1,TIM_Channel_2,TIM_CCx_Disable);
			GPIO_SetBits(GPIOB, GPIO_Pin_14);
			GPIO_ResetBits(GPIOB, GPIO_Pin_13);
		}
		if(SetTemperature<Temperature)
		{
			if(((Temperature-SetTemperature)*1200)>6000)TIM_SetCompare2(TIM1,6000);
			else	TIM_SetCompare2(TIM1,(Temperature-SetTemperature)*1200); 	
			TIM_SetCompare1(TIM1,0); 			
			TIM_CCxCmd(TIM1,TIM_Channel_1,TIM_CCx_Disable);
			TIM_CCxCmd(TIM1,TIM_Channel_2,TIM_CCx_Enable);
			GPIO_SetBits(GPIOB, GPIO_Pin_13);
			GPIO_ResetBits(GPIOB, GPIO_Pin_14);
		}

 

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
摘要:设计了一种以单片HⅣ447为核心,半导体制冷片为发热制冷体的智能恒温控制系统.通过H桥驱动电路控制半导体制冷片进行加热或制冷实现了自动恒温控制关键词:HT46R47半导体制冷片;恒温控制系统:H桥驱动电路   随着人们生活水平的提高,智能化的液体加热制冷类家电越来越多地出现在人们的日常生活中,这些产品大多采用发热管或PC热敏电阻进行加热,仅仅具有加热功能;而使用半导体制冷片可以具备加热和制冷双重功能,但缺陷是传统的半导体制冷片的方向控制大多使用继电来完成,继电属于械式开关,当频繁导通或关断时不仅会发岀噪音,而且还会降低其使用寿命.因此,有必要探索一种高效、静噪、安全的半导体制冷控制方法   本系统采用直流的半导体制冷片作为核心加热制冷元件.半导体制冷片是利用物理现象中的帕尔贴效应,靠电子空穴在运动中直接传递能量来实现的.当直流电通过两种不同半导体材料串联成的电偶时,在电偶的两端即可分别吸收热量和放出热量,所以将半导体制冷片的一面贴合在要加热或制冷的液体一侧,通过控制半导体制冷片的电压方向就可以达到加热或制冷的日的.半导体制冷技术的优点是结构简单,体积小;无制冷工质,无振动,噪声小,寿命长,维修方便;启动快,控制灵活H桥驱动电路常用于直流电的方向控制,本系统将H桥驱动电路引入对半导体制冷片进行控制如图2所示,当控制信号PC1为高电平,PTC2为低电平时,左侧臂两个8550三极管Q1和Q2导通,由于上、下两个MOS管分别为P沟道和N沟道MOS管,所以任何时刻只能有1个导通,而此时上面的P管,即Q5导通;而另外一臂上,两个三极管Q3和Q4都没有导通,此时下面的N沟道MOs管Q8导通,于是在半导体制冷片两端形成12V电压差,制冷片开始加热(或制冷).同理,当PTCI为低电平,PC2为高电平时,此时半导体制冷片电压翻转,原来加热(或制冷)的一面开始制冷(或加热).

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值