本帖最后由 merryearnest 于 2013-3-21 23:26 编辑
第三篇 主控——基于Atmega16A的单片机
一、太阳能主控板功能描述
1、实时监测整个太阳能系统的参数:太阳能电池板输出电压和电流、负载端口电压和电流、充电模块电压和电流、蓄电池电压和电流,使用PA0~PA7引脚配置为采样端口。
2、控制:根据系统实时参数,作出各种控制决策(修订中),但预留出PB0~PB5引脚作为控制接口。
3、人机信息交互界面:LCD1602和串口无线通信(待开发,初步意向是使用蓝牙通讯,除了可以在PC上监控,还能使用智能手机APP程序监控)。LCD1602使用PC0~PC7作为数据端口,PD6、PD7作为控制端口。
4、集成电源,可以直接从主电路中取电。由于负载不大使用78M05芯片变换即可。
5、模块化插接件,使用P20针插口进行联结。
二、电路原理图和PCB
图一、主控电路原理图
图二、主控PCB板
三、完成后的实物
图三、主控正面
图四、主控背面
图五、拆掉1602液晶后的正面图
图六、通过P20接口联结到主电路板
四、已实现功能
1、实时监控系统的电参数
图七、液晶显示第一页说明
LCD1602液晶显示第一页数据解释:第一行“S:”是solar的缩写,代表太阳能,依次显示的数据是太阳能电池板的输出电压、输出电流、输出功率,比如此刻太阳能电池板输出电压为12.6V,电流为1.96A,功率为24.7W;第二行“B”是Battery的缩写,代表电池,依次显示的数据是电池电压、系统负载输出电流、电池电流,这一行要注意正负号含义,此刻电池电压12.5V,系统外接负载输出电流2.63A(负号代表输出),电池输出电流0.66A(原因是太阳能电能不足,只提供了部分能量还有部分由电池提供)。
图八、液晶显示第二页说明
LCD1602液晶显示第二页数据解释:第一行是累计工作时间,此刻工作了7小时1分中;第二行是太阳能电池板累计发出电能,此刻累计发电95.6瓦时(注意,瓦时与我们日常用电计量单位度也成为千瓦时,相差1000倍哦!)由于要累计,故使用Atemga16A片内EEPROM,掉电不丢失,每10分钟才写入一次(EEPROM写入寿命毕竟有限),但是统计还是实时的每秒累计一次。
五、设计中的体会和小结
1、AVR ATmega16A_TQFP封装的底部可以不用焊接到板上(技术说明上要接地,当时不接地设计还蛮犹豫,最后证明没问题)。
2、熔丝设置必须千万个小心,如果你没有插入晶振,确不小心选择了外部晶振模式,那么马上恭喜你,下一刻起你的AVR单片机将不能与ISP通讯了(单片机假死),解决方法就是插入正确晶振才能恢复ISP通讯,还有一次我不小心选择外部RC振荡器,最后只好去查资料,选择合适的电容和电阻构成振荡器才能恢复。再次提醒各位,设置错了晶振等于无法通讯,所以设置熔丝位时要仔细。
图九、PC外部振荡器
3、我设计的LCD1602数据接口是PC0~PC7口,比较特殊(市面上开发的多为PB0~PB7)。当初第一版时LCD1602怎么也无法显示,我换了2个新片子都不行,当我绝望时,借来调试神器——示波器,终于发现问题,原来PC口中有几个引脚没有输出,原因是要和JTAG通讯的,影响了LCD1602的通讯,再去查资料,最后解决的方法是关闭熔丝位中“使能JTAG接口”。
4、另外要注意的数据写到了EEPROM中,如果要重新刷程序,熔丝位中“执行芯片擦除时,保留EEPROM内容”要选上,不然累计的数据就被清零了。
5、ATmega16A芯片确实简单,板子焊接调试方法就
①焊接ATmega16A芯片,检查电源和地是否短路;
②焊接ISP座子,好了此刻你就可以开始下载程序了(需要的外围电路真是太少了,晶振、电源都不用);
③焊接LCD1602接口,开始调试显示功能(再提醒关闭熔丝位JTAG口);
④焊接78M05电源电路,可以使用 P1口独立供电试验是否正常;
⑤焊接AD采样及主控接口,注意接到主电路板时一定要把正负方向选择好,不然你懂得,呵呵。
6、AD采样中分辨率问题:设定Ver=2.56V
电压范围和电流取样电阻决定量程,精度和取样电阻决定测量精度。举例,我设计的电流取样电阻为50mΩ,采样方式为差分10倍放大,那么测量的电流范围0.256/0.05=5.1A,电流测量精度(50*1)(mV)/0.5(mV)=100格,即0.01A。