做个小项目——温控仪

2019-04-14 18:45发布

实验室要做个小项目,简单的来说就是采集温度,然后根据采集的温度值进行一个闭环控制,最终输出结果控制继电器。 关键词:MAX6675,热电偶,IAR,mega128,Modbus MAX6675是一款专门用于K型热电偶的温度采集芯片,用起来很方便,具体用法看datasheet里的电路就可以。硬件做好以后,如果没有接入热电偶,读出来的温度值可能是0FFFH。在读取MAX6675的时候,一定要注意【在SCK的下降沿处采样】这一点,网上一些人的程序不能用。我这里用的是模拟SPI,在SCK下降沿处读数据。还有就是要注意,在CS是能后,第一个数据D15好像就出来了,所以如果温度值不对,试着右移一位看看。
IAR中使用printf函数,网上众说纷纭,到处改来改去到最后也不一定能用。我在IAR建立好工程后,直接参考这个帖子http://wenku.baidu.com/link?url=BTKMzkk06yAU4YkKBSHZdNYxfImx6RRCyMld3LXu4mQgmZEilGWoxhBE_hNKICAX13EtSotRQ7J-u0pYh0pDnMoVgEur2RQnzxBu00xu9za,参数都是建立工程时候默认的,不用改,直接把putchar函数写了可以用了。
热电偶分很多种,这里使用的是K型热电偶。K型热电偶只有两根线,分正负。具体他的冷端补偿是怎样的,看这里http://www.amobbs.com/forum.php?mod=viewthread&tid=4198515&highlight=MAX6675%2B%E8%A1%A5%E5%81%BF 感谢网友前辈们的资料,为开发节约了很多时间。
Modbus直接用了阿莫论坛里一个网友移植好的程序。地址是这里。http://www.amobbs.com/forum.php?mod=viewthread&tid=5544039&extra=这位网友的程序在串口模式下可以直接使用,没有任何问题。但我在设备上使用的是RS485接口,如果不加修改会报【bytes missing】的错误,对比了一下应该是丢了一个CRC校验的字节。这个问题可能是因为485模式下会对输入输出有使能端口。在写入UDR寄存器后,就立马执行了关闭IO,造成数据没有发出去。RS232工作在全双工下,两线制的RS485工作在半双工下。因此不能单纯的一直让收发的IO使能,在控制输入输出使能失能那里对IO的失能语句加延时或是寄存器上数据发完的判断。 设备要想跟大厂的PLC完成组态,似乎只能采用RTU模式。 除了Modbus程序,主函数循环以及其他中断程序中不可避免的要占用系统资源,这就涉及到了modbus的超时。上位机发去的讯息如果不能及时回复就会timeout error,此外,如果从站个数较多,也会带来超时的问题(http://www.dqjsw.com.cn/dianqi/xianchangzongxian/114223.html)。modbus中主站发送请求数据,从站回复即可。因此主站发出来的请求数据,从站接收到后不一定立马回复,在设置的超时范围内即可。但这肯定也会涉及到主站程序的配套
这个项目我在完成了原型设计之后由两个师弟分别负责了通道扩展和上位机设计。 这里就总结一下热电偶设计中的一些想法:如果只是简单应用,且不太考虑成本,可以直接采用MAX6675这类的专用芯片,但实际上这种方式的采集精度一般,同一个设备中每一路的MAX6675同样的环境下可能都存在误差。为了降低成本,并且提高采样精度,可以使用高精度AD+模拟开关的方式,多路热电偶的+/-两根线通过查分的方式连接到模拟开关上,然后再由模拟开关接到AD上,使用时通过程序控制通道切换。这里要注意的一点是,由于这类产品常用于工控中,因此要注意隔离。MCU与模拟开关、AD的通信尽量采用磁耦,光耦的话最好使用高速光耦,否则普通光耦速率太慢会给编程带来困扰。在AD+模拟开关的方案下,软件方面重点要完成一个模拟量采集拟合参数方程、冷端补偿方程等。这个东西实际上是一个数学性质的运算,可以直接使用或是参考别人的内容,这个内容可以参考这个链接。(http://www.amobbs.com/thread-4336361-1-1.html