• 大向
    了解作者
  • C51
    开发工具
  • 85KB
    文件大小
  • rar
    文件格式
  • 2
    收藏次数
  • 10 积分
    下载积分
  • 87
    下载次数
  • 2017-12-01 16:13
    上传日期
INA219电流传感器驱动程序,C51单片机可用,
INA219驱动程序.rar
  • 程序100ms采样间隔
  • main.plg
    225B
  • STC8.H
    18.5KB
  • main.LST
    11.9KB
  • INA219_DRV.h
    429B
  • main_uvopt.bak
    58.1KB
  • IIC.LST
    3.7KB
  • main.hex
    13.3KB
  • main_uvproj.bak
    13.2KB
  • main.uvopt
    58.1KB
  • main.lnp
    102B
  • IIC.c
    1.3KB
  • INA219_DRV.LST
    5.1KB
  • common.LST
    921B
  • main.c
    5.6KB
  • main.OBJ
    31.7KB
  • STARTUP.LST
    13.7KB
  • common.OBJ
    19.5KB
  • main.uvproj
    13.6KB
  • main.M51
    31KB
  • IIC.OBJ
    19.7KB
  • main
    93.2KB
  • IIC.h
    331B
  • STARTUP.A51
    6.2KB
  • INA219_DRV.OBJ
    21.6KB
  • STARTUP.OBJ
    749B
  • common.h
    726B
  • main.h
    1.7KB
  • common.c
    93B
  • INA219_DRV.c
    2.1KB
内容介绍
#include"main.h" /*******SOC模块************** ADC起始误差校正 基准电压校正 电流时刻都有可能出现正负值 低电压禁止存储, 无电流禁止存储 SOC通信一次,存储一次? */ void main(void) /*main***************/ { sysinit(); Current_adjust = (float)3000/(float)3712; //计算电流校准系数 //Current_adjust = (float)55000000/(float)3712; //计算电流校准系数 Full_Range_Current = Limit_ADC * Current_adjust; //得出最大电流量程 Battery_Capacity_10_SEC = 0; while(1) { if(Uart3_RX_OK) //如果串口数据接收完成 { uchar i; U3_RX_Datas_Proc(); //处理串口1收到的数据 for(i=0; i<Uart3_DATA_Length; i++) //清空接收缓存 { Uart3_RX_Data_Buf[i] = 0; } Uart3_RX_OK = 0; } if(Read_CurrentADC_OK) //电流数据读取完成 { Read_CurrentADC_OK = 0; //清除标志 Current = Current_ADC * Current_adjust; //根据修正值得出 当前的 实际电流值 Battery_Capacity = Battery_Capacity_10_SEC/360; //转换成实际的AH容量 U3_printf("I=%lld,SOC=%lld,over=%d,",Current,Battery_Capacity,(uint)OverLoad_Flag); //输出电流, 是否过载的标志 //控制充放指示灯,和过载标志*************************************************** //------------- if(Current_ADC > 5) {LED_G = 0;LED_Y = 1;} //放电,绿灯 else if(Current_ADC < -5) {LED_G = 1;LED_Y = 0;} //充电,红灯 else {LED_G = 1;LED_Y = 1;} //无电流,不亮灯 //----------------- if(Current_ADC > 0) //电流为正值情况下,量程过载判断 { if(Current_ADC > Limit_ADC) { //ADC值超过限制 OverLoad_Flag = 1;}//做量程过载标志 else { OverLoad_Flag = 0;} //未过载 } else //负值情况下,量程过载判断 { if(Current_ADC < (0-Limit_ADC)) { //ADC值超过限制 OverLoad_Flag = 1;}//做过载标志 else { OverLoad_Flag = 0;} //未过载 } } } } void sysinit(void) /*系统初始化********************/ { delay_X(10000); P_SW2 = 0X80; //允许访问XSFR XOSCCR = 0xc0; //启动外部晶振 while(!(XOSCCR & 1)); //等待时钟稳定 CLKDIV = 0x00; //时钟不分频 CKSEL = 0x01; //选择外部晶振 P_SW2 = 0X00; //恢复访问SFR U3_Init(); IE2 bit3_set_1;//串口3中断打开 Timer0Init(); ET0 = 1; //定时器 EA = 1; delay_X(10000); //INA219_WriteReg(0x00, 0x07F9);//重新设置,并触发转换 //INA219_Init(); //i = INA219_GetBusVolt(); //i = INA219_GetPower(); //取这两个值只是为了编译器没有警告,SOC模块并没有使用这个功能 } void Timer0_ISR() interrupt 1 /*T0中断函数,******************/ { T_100ms = !T_100ms; //每次中断50毫秒,标志反转一次为100毫秒 if(T_100ms) //如果到达100毫秒 { Current_ADC = INA219_GetCurrent_ADC(); //每个LSB为10uV INA219_WriteReg(0x00, 0x07F9);//重新设置,并触发转换 Read_CurrentADC_OK = 1;//电流数据读取完成 Temp_Current_ADC = Temp_Current_ADC + Current_ADC;//累加,用于求平均值 Smaple_Counts++; if(Smaple_Counts >= 100) //到达100次。每次100毫秒,100次10秒, { Smaple_Counts = 0; Current_10_Sec_Mean = (Temp_Current_ADC/100)*Current_adjust; //取得10秒内的平均值,平均的ADC值,乘以电流校准系数 Battery_Capacity_10_SEC = Battery_Capacity_10_SEC - Current_10_Sec_Mean; //进行容量统计 Temp_Current_ADC = 0; } } T_50ms++; if(T_50ms >= 20) //50毫秒中断计数 { T_50ms = 0; Second++; //秒变量增加 if(Second > 20) Enable_Set_Flag = 0; //上电超过10秒后清除允许设定的标志,秒从0-59循环不会影响程序目的 if(Second == 60) //60的约数最多 { Second = 0; } } } void Timer0Init(void) /*T0初始化,50毫秒@11.0592MHz****/ { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0x00; //设置定时初值 TH0 = 0x4C; //设置定时初值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 } void U3_RX_Datas_Proc(void) /*处理串口1收到的数据****/ { if((Uart3_RX_Data_Buf[0] == 'o') && (Uart3_RX_Data_Buf[1] == 'k')) { //LED1 = 0; delay_X(65000); //LED1 = 1; } } void U3_Init(void) //*U3初始化,115200bps@11.0592MHz { S3CON = 0x10; //8位数据,可变波特率 S3CON |= 0x40; //串口3选择定时器3为波特率发生器 T4T3M |= 0x02; //定时器3时钟为Fosc,即1T T3L = 0xE8; //设定定时初值 T3H = 0xFF; //设定定时初值 T4T3M |= 0x08; //启动定时器3 } void U3_SendData(uchar dat) /*U1发送一个字节*******************************/ { Uart3_busy = 1; S3BUF = dat; while(Uart3_busy); } void U3_SendString(uchar *s) /*U1发送一帧,采样总线*/ { U3_SendData(0xff);//帧开始 while(*s) //检测字符串结束标志, { U3_SendData(*s++);//发送字符串 } U3_SendData(0x00);//帧结束 } void U3_ISR() interrupt 17 //*U3中断函数,***** { if(S3CON & S3RI) //收到一个字节 { S3CON &= ~S3RI; //清除S2RI位 if(S3BUF == 0xFF) //接收帧开始 { Uart3_DATA_Sort = 0; //装载变量清零 } else if(S3BUF == 0x00) //接收帧结束 { Uart3_RX_OK = 1; // 做标记,主程序中判断1进行处理 } else { Uart3_RX_Data_Buf[Uart3_DATA_Sort] = S3BUF; //数据装入接收缓存 Uart3_DATA_Sort ++; //增加排序标志 if(Uart3_DATA_Sort >= Uart3_DATA_Length) //超出字节长度限制 { Uart3_DATA_Sort = Uart3_DATA_Length-1; //限制最大值防止溢出 } } } if(S3CON & S3TI) //发送完一个字节 { S3CON &= ~S3TI; // 清S2TI位 Uart3_busy = 0; } } void U3_printf(uchar *fmt,...) //*U1变量转字符,****** { /* %s %d %f %u %c %3.2f %% 用法举例: int a= 100; uint b =256; OLED_printf(0,2,8,"a=%d,b=%u,",a,b); */ va_list ap; uchar xdata string[200];//访问内部拓展RAM,非访问外部RAM,不能超过内部拓展RAM大小(此处为1024) va_start(ap,fmt); vsprintf(string,fmt,ap);//此处也可以使用sprintf函数,用法差不多,稍加修改即可,此处略去 U3_SendString(string); va_end(ap); }
评论
    相关推荐
    • 压力传感器资料包(更新0302).zip
      压力传感器使用说明以及源代码,经测试可以直接使用
    • 支架附送程序.rar
      对压力传感器的介绍和对数据的读取,处理,程序设计部分,可用作制作台称,用来获取质量。
    • pi_ina219:此Python库支持使用I2C总线的带有Raspberry Pi的Texas Instruments的INA
      Raspberry Pi Python库,用于使用INA219的电压和电流传感器 该Python库支持Python 2和3上的Texas Instruments的电压,电流和功率监控器传感器。该库的目的是使使用该传感器的相当复杂的功能变得容易。 该库当前仅...
    • 智能汽车智能充电桩,EV充电-电路方案
      还安装了电流和电压传感器INA219,以便测量充电功率输出。此传感器测量的性能数据可在安装在插座中的ESP8266控制器的网站上查看。由于在前端运行的AJAX Js脚本,值每秒更新一次。 也可以使用按钮手动打开和关闭电源...
    • Arduino-Adafruit_INA219.zip
      Arduino-Adafruit_INA219.zip,INA219电流传感器ADA219库,Arduino是一家开源软硬件公司和制造商社区。Arduino始于21世纪初,深受电子制造商的欢迎,Arduino通过开源系统提供了很多灵活性。
    • Adafruit_CircuitPython_INA219:INA219电流传感器的电路python驱动程序
      pip3 install adafruit-circuitpython-ina219 要在系统范围内安装(在某些情况下可能需要安装): sudo pip3 install adafruit-circuitpython-ina219 要在当前项目中的虚拟环境中安装,请执行以下操作: mkdir ...
    • 功率计:具有Web界面和SD卡支持的ESP32功率计
      它是基于德州仪器和以及功能强大的的电流/电压传感器。 它可以同时测量电压,电流和功率。 B)特征 1.强制门户网站 当ESP32启动时,它充当wifi接入点并在address meter.local或192.168.43.1上提供俘虏的门户网站...
    • 隔离式电流分流和电压测量参考设计-电路方案
      特性使用新型 AMC130x 加强版隔离式 Delta-Sigma 调制器对三相电机电流和电压进行隔离式分流反馈测量 采用新型 C2000:trade_mark: F2837xD 双核 Delfino:trade_mark: 微控制器的集成式 Sinc3 数字滤波器 校准准确度...
    • 压力传感器资料包.zip
      压力传感器资料使用,包含传感器介绍等内容,帮助使用
    • Proteus7.12.rar
      Proteus7.12完美破解版.rar电路仿真软件很好用可以仿真单片数字模拟电路