刚过完年就做了一个产品,
TSW-02E数字式档位变送器,
与一般的方位变送器的唯一区别就是输入量,
一般档位变送器输入都是开入量,
而02E的输入是模拟量-电流。
具体要求:
1.输入4-20mA,4mA对应第1档,...20mA对应第17档;
2.输出BCD码空接点;
3.两位数码管显示档位;
4.要求档位精度3%。
硬件设计:
1.转换模块:将4-20mA电流量转换为1-5V电压量;
2.单片机:ATmega8,对1-5V电压量进行AD转换,输出BCD接点,输出档位显示;
3.电源:5V,供给单片机;24V,供给继电器及其转换模块。
单片机资源分配:
1.采用外部8M晶振,AD转换采用内部AVcc作为基准电压,AD采样时钟8M64分频;
2.PB0-PB4:BCD接点输出驱动;
3.PC0:AD转换电压模拟量输入;
4.PC4、PC5:数码管数位;
5.PD0-PD7:数码管数形。
软件设计:(比较简单的程序,故略)
调试中出现的问题:
1.AD转换中,刚开始使用外部5V作为基准电源,AD转换后数字量与计算出的数字量之间误差较大,误差约为50mV。后使用内部AVCC作为基准电源,发现内部AVCC作为基准电源进行AD转换后的数字量精度提高,误差仅为10mV,而且比较稳定;
2.档位临界点处数码管显示、继电器输出不稳定,出现抖动现象。程序中的算法出现问题,所有的程序都是针对理想状态进行编制的,忽略很多实际中存在的问题,比如转换模块本身的误差、AD采样的误差、档位计算中数制上的误差......。后在程序中加入宽度因子,进行消抖处理,无上述现象。
这次的产品软硬件相对来说都比较简单,但是在软件的编制过程中,发现很多问题,尤其是编程的风格及其技巧,风格还好,基本上都是模块化,但是每个模块中编程的技巧可就差得太远了,感觉就像小学生的水平,没有一点真正做程序的那种样子,完全是为了实现功能而拼凑的一堆代码。看来,还要好好学习才行啊!
文章评论(0条评论)
登录后参与讨论