基于FPGA的自动采集控制系统
扫描二维码
随时随地手机看文章
随着当前工业控制自动化日益普及,对于工作环境中的温度控制也越来越重要。本设计即是针对某些需要持续恒温的特殊环境而设计的自动温度采集控制系统。该系统采用FPGA作为硬件核心部分,有效地利用FPGA在可编程门阵列方面的优点,最大限度的使硬件电路软件化,减少了可视硬件的规模,降低了硬件加工、布线以及元器件采购方面的成本与复杂性,从而降低了故障排查方面的繁杂性。使硬件电路简洁,降低了整体占用的空间。相对于其他的温度控制系统,具有小巧,维护维修方便的优点,大大的提高了可维护性,同时由于采用的元器件都比较常见,整体成本较低。因此很适用于一些小规模同时对温度精度要求不高的场合。
1 系统工作原理
通过传感器实现对外界环境温度的采集,并将采集到的温度信号传送给FPGA芯片,FPGA芯片能够自主地对采集的温度信号进行处理,并能通过LED 显示当前温度,同时自动将采集到的温度信号与预设的温度进行比较得出正确的比较结果,通过I/O端口输出控制外围设备对环境温度进行控制,从而达到实时温度控制的目的。本设计中主要有温度采集模块、FPGA芯片模块、LED数字显示模块三部分,系统原理框图如图1所示。
通过FPGA编程来实现对温度传感器的实时温度数据采集,并且实时地处理采集到的数据,将采集到的数据转换为BCD码通过8段LED数码管显示出此前的温度。与此同时,采集到的数据将会与存储在芯片里的温度预设值比较,并自动产生比较结果,控制外围设备对被测空间的温度实施调节控制,从而达到恒温的目的,温度传感器采集出的温度数据通过二进制数组片选选择数据通过LED显示,选择的数据再与标准温度进行比较,温度过高降温处理、温度过低则升温处理。
2 主要功能模块的实现
控制模块如图2所示,其中两个PNP三极管的作用是在P1输出控制信号时起到开关作用,根据图中的三极管接法,当输出控制信号为低电平时,三极管通导,此时P2继电器中有电流通过,使其3和6引脚接通。设计中由于采用的三极管对电流的要求较高,而又由于继电器内部可以认为相当于是一个电感,因此在继电器刚刚上电的时刻,三极管发射极和集电极电流将会很大,很容易将三极管烧毁,因此加装稳压二极管D2,使继电器上电工作的时刻,瞬间电流通过二极管回路而不是通过三极管,就可以有效保护三极管不被烧毁。
外部输出信号为低电平时,p2回路导通,引脚6与引脚3有电流,p3导通开始工作,当温度过低时,灯泡点亮;当温度过高时,风扇工作。从而实现对温度的实时控制。
3 软件设计及仿真结果
本设计中采用FPGA芯片作为核心控制部分。在本设计中软件模块主要包括温度传感器控制及数据接收模块,温度数据处理模块,温度显示模块。
3.1 温度数据处理模块
传感器数据处理模块tempture的顶层电路图如图3所示,它的作用主要是将12位二进制的温度信号转换为用BCD码表示的3位十进制数,输入的 12位温度信号中其中的高8位二进制代码转换为2组4位的BCD码,例如输入二进制码为“00010110”,代表十进制数为“22”,输出 BCD码为“00100010”对应的十进制数个位、十位均为“2”和“2”;然后将剩余的低4位二进制代码转换为4位BCD码,如输入二进制码为 “1110”,代表10进制数小数为“0.875”,若只取一位小数位,则取“8”,其BCD码可表示为“1000”。通过三个输出端口分别输出十位、个位和小数位。
对温度数据处理模块tempture-进行仿真测试。假定预设置输入温度二进制的代码为“000101111011”,则其对应十进制数应为:“23.6”。仿真结果如图4所示。
根据顶层原理图,a[3. . 0]输出为温度数值的十位数,b[3..0]输出为温度数值的个位数,c[3..0]输出为温度数值的小数位。则仿真图中,shi、fen、ge三位输出的数字分别为“2”、“3”、“6”,仿真结果与预测转换结果一致。
3.2 温度显示模块
设计采用了4个8段式的LED数码管可以动态显示温度的百位、十位、个位与分位。下图为温度显示模块的顶层电路,由图可知,模块由片选模块、译码转换模块与计数器三者组成。片选模块主要由一个二进制计数器和四选一电路组成。
当系统工作时,先将二进制计数器在clk控制下依次连续产生4个两位二进制数组,来控制片选模块选择性的输出shi[3..0]、 ge[3..0]、fen[3. . 0]、bai[3. . 0]四路输入信号中任意的一路。将选出的这一路输入信号交给译码转换模块,利用二进制计数器产生的连续二进制数组,可以控制译码器依次输出对应的4位二进制数组来依次点亮各个LED数码管。最后,可以在LED上显示出数字,读取结果。
对温度显示模块display进行软件仿真测试,设置输入shi[3..0]、fen[3..0]、ge[3..0]分别是“0100”、“0011”、“0010”,则其对应10进制数应为“43.2”。仿真结果如图6所示。
由仿真示意图可看出,片选信号由时钟信号控制循环变化,而对应输出的ledout端也依次输出shi,fen,ge,bai四个端口输入的数据,且输出的是8位LED数码管显示码,从图中可以读出,当片选信号为“0111”时,对应的输出信号ledout为“11000000”,即表示在数码管上的显示为 0,小数点不亮,表示百位为0;当片选信号为“1011”时,对应的输出信号ledout为“10011001”,在数码管上的显示为4,小数点不亮,表示十位为4;当片选信号为“1101”时,对应输出ledout为“10110000”,在数码管上的显示即为3,表示个位为3;当片选信号为 “1110”时,对应输出ledout为“00100100”,在数码管上的显示即为2,小数点点亮,表示小数位为2。动态扫描后可知,数码管上显示的内容即为“043.2”。与输入的数据相同,说明程序编写正确,系统运用良好。[!--empirenews.page--]
4 测试数据
由表1数据显示,LED数码管上显示的温度与实际测量的温度,从表中可以得出,两者近似相等,误差在0%~0.58%之间,是可以接受的误差范围。表2是指设定了所需温度,记录温度变化的过程与实现这一目标所需的时间。例如第一次中,我们设定的温度为20℃,开始LED上显示的温度值为17.5℃,最后经过自动控制系统温度升高到20.2℃,这一过程共用时30分钟。误差也是存在的,误差在1%左右,也是可以接受的范围。
5 结束语
从测试结果上看,设计的主要目的已经达到,系统运行可靠,精度也已达到设计要求。但设计中仍存在一定缺陷,主要缺陷在于本设计中所使用的预设温度是固化在程序中,一旦系统开始工作,就不能再更改预设的温度,因此本系统比较适用于不会经常变更设置温度的场合。