图1 系统原理框图硬件设计
硬件系统包括串行通信电路、充电和放电控制电路、继电器驱动电路等模块。
通信电路
单片机通过串口与上位机通信。Mega16L端口为TTL电平,而上位机串口为RS232C标准接口。因此,在上位机与单片机通信时需要进行电平转换。本设计采用MAX232完成TTL电平与RS232接口电平之间的转换。
充电和放电控制电路
单片机收到上位机的充、放电控制命令后,通过SPI口将控制信号发送给TLV5638。TLV5638将收到的数字信号转换成模拟信号,并送入信号调整电路。模拟控制信号经调整后送入充电或放电电源的PI控制器,对充电和放电电流进行控制。单片机通过CD4053选择控制信号的输出通道,使该控制器可同时对2块蓄电池进行充电和放电。该部分电路原理图如图2所示。
D/A变换
本设计使用双通道l2位电压输出型高速DA转换器TLV5638完成数模转换。设计中,将Mega16作为主机,通过SPI口直接与TLV5638的串行接口相连。因为Mega16的SPI口为4线串口,所以连接时单片机SPI口的PB6(MISO)悬空。
串行通信时,CS引脚出现下降沿时通信开始,数据在SCLK的下降沿逐位移入TLV5638的内部寄存器。最先移入的是数据的最高位。当16位数据全部移入或CS引脚变高时,TLV5638移位寄存器中的数据被存入相应的锁存器,锁存器的选择由数据中的控制字确定。因此,当Mega16需要向TLV5638发送数据时,PB7先从高电平跳到低电平,然后通过SPI口连续进行两次写操作,向TLV5638发送个字节数据。两次写操作完成后,在SCLK的第16个上升沿,相应锁存器的内容自动更新。
应用中,TLV5638工作于慢速正常模式,采用2.048V内部参考电压。更新TLV5638某一路DAC数据时,必须保证另外一路数据不变。
Mega16的SPI口可采用4种不同的数据传输格式工作,传输格式由SPI控制寄存器中的CPOL位和CPHA位控制。应用中,考虑到TLV5638的使用要求,令CPHA=0,CPOL=1(传输开始时采样SCK下降沿,结束时采样SCK上升沿)。
图2 D/A变换与通道选择
信号通道选择
Mega16通过PD4和PD5以及外围逻辑电路控制信号的输出通道。逻辑电路包括1片7404和2片CD4053。以TLV5638的OUTA输出信号为例。模拟控制信号从TLV5638输出,经滤波后送入CD4053的X通道和Y通道。单片机PD4一方面直接与CD4053控制端A相连,另外还通过反相器7404与CD4053控制端B相连。这样就保证A端和B端的控制信号反相,使任意时刻X、Y通道中只有一个可以输出有效控制信号,从而保证该路充电和放电不发生冲突。应用中没有使用CD4053的Z通道,应将其与控制端C及使能端一起接地。
继电器驱动电路
放电后期,需要将电池中的剩余容量完全放出,最终使单体电池电压下降到0V。设计中,利用继电器将放电电阻并联于单体电池两极,从而达到释放电池剩余容量的目的。继电器由8D锁存器74LS573和达林顿管阵列ULN2801驱动。单片机PA0~PA7输出控制信号,PD2、3、7和PC6、7输出5片74LS573所需的锁存使能信号。控制信号由74LS573锁存,然后通过ULN2801驱动继电器工作,将放电电阻并联在单格电池两端,从而完成单格电池剩余容量放电。继电器驱动电路原理图如图3所示。图中只包含1片74LS573,其它4片控制方法类似。
图3 继电器驱动电路原理图
软件设计
软件采用主从结构。单片机收到上位机指令后,根据通信协议提取出命令字和数据,然后根据命令字完成相应的控制。软件基于模块化设计思想,主要包括:主程序模块,通信程序模块,D/A转换与通道选择模块,继电器组控制模块等。
主程序模块
主程序模块完成单片机初始化,等待并处理中断等工作,流程图如图4(a)所示。
图4程序流程图
通信程序模块
单片机与上位机间采用RS232串口通信。单片机采用中断方式接收上位机发出的命令,并根据接收到的数据内容向上位机发送应答信息。当命令的起始标志和结束标志都正确时,单片机向上位机发送ASCII字符‘Y’表示接收成功,然后处理收到的命令;否则,向上位机发送ASCII字符‘N’,表示发送不成功,要求上位机重新发送命令。
上位机向单片机发送的命令符合以下格式:命令以帧为单位,每帧包含7个字节。每帧包含的命令字规定了单片机的控制方式。每帧中的数据字则以ASCII码的形式确定了充、放电电流的大小和继电器的代号。通信模块流程图如图4(b)所示。
当上位机需要控制充、放电电流时,单片机采用查询方式,通过SPI口向TLV5638发送命令和数据,然后通过控制CD4053确定模拟控制信号输出通道。因为Mega16L的SPI口字宽为8位,因此必须连续进行两次写操作才能完成对TLV5638的编程。
单片机收到上位机命令后,先将数据写到PA口,然后向相应锁存使能位写‘0’,将数据锁存入74LS573中,完成对继电器的控制。
上一篇:基于宏定义的超强avr io口操作
下一篇:AVR单片机读卡器程序设计
推荐阅读最新更新时间:2024-03-16 15:17