单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 543|回复: 25
收起左侧

纯电动汽车动力电池过充保护系统设计单片机代码+Proteus仿真

[复制链接]
linixg 发表于 2019-3-9 19:50 | 显示全部楼层 |阅读模式
基于单片机的纯电动汽车动力电池过充保护系统设计与仿真,分享给大家,需要交流请加Q 1583-38 29 43 交流!
改变可变电阻RV1 向下模拟充电压变小,向上移模拟充电电压变大,当充电压大于24V时,认为过充电此时单片机切断充电回路,同时报警液晶屏显示充电电压,当过充时,液晶屏显示过充报警中。。。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png 0.png

单片机源程序如下:
  1. #include<reg52.h>
  2. #include <intrins.h>
  3. #include <math.h>    //Keil library
  4. #include <stdio.h>       //Keil library
  5. #include "1602.h"
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. uchar code word1[]={"  a product of  "};
  9. uchar code word2[]={"UNITED ELECTRONS"};
  10. uchar code word3[]={" Welcome........"};
  11. /***************位声明**************/
  12. sbit dacs=P3^4;
  13. sbit dawr=P3^3;
  14. //ADC0832的引脚
  15. sbit ADCS =P3^5;  //ADC0832 chip seclect
  16. sbit ADDI =P3^7;  //ADC0832 k in
  17. sbit ADDO =P3^7;  //ADC0832 k out
  18. sbit ADCLK =P3^6;  //ADC0832 clock signal
  19. sbit led =P3^2;  //ADC0832 clock signal
  20. sbit adwr=P2^6;
  21. sbit out=P2^7;
  22. sbit beep=P1^0;//按键
  23. bit set_flag,disp_flag,bj_flag;
  24. uint ad_data;
  25. /***********函数声明*******************/
  26. void delay(unsigned int Delay);        
  27. uchar Adc0832(unsigned char channel);
  28. void inittime0();
  29. void delay(uint z)                              //z为毫秒?
  30. {
  31. int a,b;
  32. for(a=z;a>0;a--)
  33. for(b=120;b>0;b--);
  34. }
  35. void Alarm1(uchar t)                  //报警子程序
  36. {
  37.          uchar i,j;
  38.         for(i=0;i<200;i++)
  39.         {
  40.                  beep = ~beep;
  41.                 for(j=0;j<t;j++);
  42.         }
  43. }
  44. /************
  45. 读ADC0832函数
  46. ************/

  47. //采集并返回
  48. uchar Adc0832(unsigned char channel)     //AD转换,返回结果
  49. {
  50.     uchar i=0;
  51.     uchar j;
  52.     uint dat=0;
  53.     uchar ndat=0;

  54.     if(channel==0)channel=2;
  55.     if(channel==1)channel=3;
  56.     ADDI=1;
  57.     _nop_();
  58.     _nop_();
  59.     ADCS=0;//拉低CS端
  60.     _nop_();
  61.     _nop_();
  62.     ADCLK=1;//拉高CLK端
  63.     _nop_();
  64.     _nop_();
  65.     ADCLK=0;//拉低CLK端,形成下降沿1
  66.     _nop_();
  67.     _nop_();
  68.     ADCLK=1;//拉高CLK端
  69.     ADDI=channel&0x1;
  70.     _nop_();
  71.     _nop_();
  72.     ADCLK=0;//拉低CLK端,形成下降沿2
  73.     _nop_();
  74.     _nop_();
  75.     ADCLK=1;//拉高CLK端
  76.     ADDI=(channel>>1)&0x1;
  77.     _nop_();
  78.     _nop_();
  79.     ADCLK=0;//拉低CLK端,形成下降沿3
  80.     ADDI=1;//控制命令结束
  81.     _nop_();
  82.     _nop_();
  83.     dat=0;
  84.     for(i=0;i<8;i++)
  85.     {
  86.         dat|=ADDO;//收数据
  87.         ADCLK=1;
  88.         _nop_();
  89.         _nop_();
  90.         ADCLK=0;//形成一次时钟脉冲
  91.         _nop_();
  92.         _nop_();
  93.         dat<<=1;
  94.         if(i==7)dat|=ADDO;
  95.     }  
  96.     for(i=0;i<8;i++)
  97.     {
  98.         j=0;
  99.         j=j|ADDO;//收数据
  100.         ADCLK=1;
  101.         _nop_();
  102.         _nop_();
  103.         ADCLK=0;//形成一次时钟脉冲
  104.         _nop_();
  105.         _nop_();
  106.         j=j<<7;
  107.         ndat=ndat|j;
  108.         if(i<7)ndat>>=1;
  109.     }
  110.     ADCS=1;//拉低CS端
  111.     ADCLK=0;//拉低CLK端
  112.     ADDO=1;//拉高数据端,回到初始状态
  113.     dat<<=8;
  114.     dat|=ndat;
  115.     return(dat);            //return ad k
  116. }
  117. void InitTimer0(void)//50ms
  118. {
  119.     TMOD = 0x01;
  120.     TH0 = 0x3C;
  121.     TL0 = 0x0B0;
  122.     EA = 1;
  123.     ET0 = 1;
  124.     TR0 = 1;
  125. }
  126. void Timer0Interrupt(void) interrupt 1
  127. {
  128.     TH0 = 0x3C;
  129.     TL0 = 0x0B0;
  130.           disp_flag=1;
  131.     //add your code here!
  132. }
  133. /*******************************************/
  134. void main()                                                 //主函数
  135. {
  136.         uchar temp1;
  137.   InitTimer0();
  138.   LCD_Initial();    //液晶初始化
  139.         led=0;
  140.         out=0;
  141.   GotoXY(0,0);
  142. Print_slow(word1);
  143. GotoXY(0,1);
  144. Print_slow(word2);
  145. LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  146.   GotoXY(0,0);
  147.   Print_slow(word3);
  148. LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
  149. GotoXY(0,0);                                       //选择温度显示位置
  150. Print(" CHONGDIAN VOL:  ");                     //
  151. GotoXY(0,1);                                       //选择温度显示位置
  152. Print(" cd_vol:      V  ");                     //         
  153. while(1)
  154.   {                                                                        
  155.                         
  156.                         if(disp_flag&&!bj_flag)
  157.                         {
  158.                                 disp_flag=0;
  159.                                         temp1=Adc0832(0)*100/255;
  160. //                                 ad_data =(uint)temp1;   //采样值存储单元初始化为0        DAC();
  161. //                                 ad_data=234;
  162.                                 GotoXY(10,1);                                       //选择温度显示位置
  163.                                 Print_s(temp1/1000+0x30);                     //        
  164.                                 //Print_s(word3[8]);                      //
  165.                                 Print_s(temp1/100%10+0x30);                     //        
  166.                                 Print_s(temp1/10%10+0x30);                     //        
  167.                                 Print_s(temp1%10+0x30);
  168.                         }
  169.                 if(temp1>24&&!bj_flag)  //若第二路一氧化碳检测值大于上限值
  170.          {
  171.                  bj_flag=1;
  172.      GotoXY(0,0);                  
  173.      Print("GUOCHONG BAOJIN...");                     //                          
  174.          }        
  175. //   else if(temp1<=24&&bj_flag)        
  176. //         {
  177. //                  bj_flag=0;
  178. //      GotoXY(0,0);                 
  179. //      Print(" CHONGDIAN VOL:  ");                     //                  
  180. //         }               
  181.          if(bj_flag)
  182.          {
  183.              Alarm1(60); //报警
  184.             out=1;
  185. }
  186.          else
  187.          {
  188.                  beep=1;        
  189.                  out=0;
  190.             }

  191.         }

  192. }
复制代码

所有资料51hei提供下载:
基于单片机的纯电动汽车动力电池过充保护系统设计与仿真.rar (115.91 KB, 下载次数: 63)
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-10 22:14 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-12 21:38 | 显示全部楼层

欢迎下载分享!
回复

使用道具 举报

至尊丶軍魂 发表于 2019-3-13 11:57 | 显示全部楼层
试试,看着很厉害
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-13 21:16 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-14 20:59 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-15 20:38 | 显示全部楼层


欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-19 20:44 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

皮卡邱 发表于 2019-3-22 14:33 | 显示全部楼层
请问能在上实物测试吗?
回复

使用道具 举报

皮卡邱 发表于 2019-3-22 14:42 | 显示全部楼层
可否进行实物仿真?
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-22 21:08 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

chenxiaoya 发表于 2019-3-23 10:28 | 显示全部楼层
感谢真诚奉献
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-23 15:06 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-24 20:19 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

aking991 发表于 2019-3-25 09:00 | 显示全部楼层
用8位的0832作采集精度有点低吧,再说现在大多单片机都带ADC功能,而且是10位以上了,还用得着这个?不过设计思路还是值得参考的
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-26 20:02 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-3-30 15:27 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-4-1 21:48 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-4-2 20:14 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-4-6 16:43 | 显示全部楼层

欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-4-8 21:22 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

cowyefly 发表于 2019-4-9 09:18 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-4-9 21:30 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-4-10 20:48 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-4-14 21:27 | 显示全部楼层

欢迎下载分享!
回复

使用道具 举报

 楼主| linixg 发表于 2019-4-21 20:49 | 显示全部楼层
欢迎下载分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛5群 联系QQ:125739409;技术交流QQ群174280738

Powered by 单片机教程网

快速回复 返回顶部 返回列表