本帖最后由 jinglixixi 于 2017-11-21 10:39 编辑
前面已经实现了温度的模拟测控,这次又购置了些器件,做了进一步的完善,主要体现在以下几个方面: 1.实现温度的双通道采集 为了满足环境温度检测与恒温控制的需要,在原设计的基础上又增添了一个温度温度传感器,并对显示界面进行了相应的修改,其变化如图5所示。 新增的温度传感器占用PC6,功能函数可通过复制的方法来实现,然后更改名称即可。 图5 双温度传感器检测
2.以固态继电器控制加热器 为了便于加热控制和增强控制器件的使用寿命,特购置了固态继电器来控制加热器,其连接方式如图6所示。经测试,使用GPIO口即可触发其工作,其输出端则可以直接接入~220V电路。固态继电器所占用的GPIO口为PC7。 图6固态继电器控制
3.加热器的选取 本来已购置了电加热管,收到后才发现其功率太大了,如图7所示,做实验实在是不安全,所以只好改用电烙铁为加热器,其线路如图8所示。 图7 电加热管
图8 以电烙铁为加热器
经实际检测,在不添加PID调节算法的情况下可达到+/-1.5度的控制要求,在设置上、下限后其控制效果如图9所示。其中X1为上限温度值,X2为下限温度值,temp为当前的控制温度,temp’为环境温度。由于没有配置保温箱的缘故,再停止加热后温度跌落的较快,故控制温度的上限偏差小,而控制温度的下限偏差稍大。如果时间允许,加入PID调节后精度会有一定提高,有望达到+/-0.5度的控制指标。 图9 温度控制效果 (注:左图的50.5度为控制温度的最高值,右图的47.1度为控制温度的最低值。)
4. 串行通讯功能 串行通讯功能是通过USB转TTL来实现的,它与MCU的引脚连接连接为: PA9 --USB_RXD PA10 --USB_TXD 具体连接如图10所示 图10 通过虚拟串口进行串行通讯
实现串行通讯的程序如下: Uart_Init();
While(1)
{
...
DS18B20_Convert();
tempL = DS18B20_Read_Byte(); // LSB
tempH = DS18B20_Read_Byte(); // MSB
j=tempH*16+tempL/16;
Uart_Put_Char(j/100+'0');
Uart_Put_Char(j%100/10+'0');
Uart_Put_Char(j%10+'0');
Uart_Put_Char('.');
Uart_Put_Char((tempL%16)*10/16+'0');
Uart_Put_Char(0x0d);
Uart_Put_Char(0x0a);
}
图11 串行通讯接收数据
图12 串行通讯控制发送参数 (A456设置上限温度为45.6度)
图13 串行通讯控制发送参数(B312设置下限温度为31.2度)
图14 串行通讯控制发送参数(C000启动加热器)
图15 串行通讯控制发送参数(D000关闭加热器)
至此,在下位机已实现了双字节数据的收发,已解决数据控制问题并添加了开关指令,实现了手工与通讯设置参数兼容及主动切换。由于LabVIEW的通讯驱动尚未搞定,因此暂时还没有绘制出温度曲线及进行上下限的设置处理。
|