STM32+ADS1115使用说明文档

这篇具有很好参考价值的文章主要介绍了STM32+ADS1115使用说明文档。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.ADS1115简介

 2.引脚功能

3.功能介绍

3.1 噪声表现

3.2 Multiplexer 复用器

 3.3量程与分辨率

 3.4 采样速率与转换时间

3.5数字比较器(在本次实验不使用)

3.6 操作模式

3.6.1 单次转换

3.6.2 连续转换

4. ADS1115 的IIC

4.1 IIC地址的选择

 4.2 接收模式

4.3 发送模式

4.4 写入和读取寄存器

4.5 数据格式

5.寄存器

5.1 地址指针寄存器(只写)

 5.2 转换寄存器(P[1:0] = 0x00) [reset = 0x0000] (只读)

5.3配置寄存器(P[1:0] = 0x01) [reset = 8583h]

5.4Lo_thresh (P[1:0] = 2H) [reset = 8000h]      Hi_thresh (P[1:0] = 3H) [reset = 7FFFh]寄存器

 6.代码实现

1.ADS1115简介

ADS1115是德州仪器推出的具有IIC接口的16位ADC转换器,超小型X2QFN或VSSOP 封装,低功耗(20uA),宽电压输入2.0V-5.5V,可编程数据转换速率8SPS-860SPS,四个单端输入或两个差分输入。可应用于,电池电压电流检测,低速便携式仪表以及温度测量系统中。

STM32+ADS1115使用说明文档

STM32+ADS1115使用说明文档 

STM32+ADS1115使用说明文档 

 STM32+ADS1115使用说明文档

 2.引脚功能

STM32+ADS1115使用说明文档

 

3.功能介绍

3.1 噪声表现

STM32+ADS1115使用说明文档

 注:采样速率不宜过高,由表格看出当采样速率大于128SPS时,分辨率在不同量程下均有所下降

3.2 Multiplexer 复用器

ADS1115包含一个输入多路器,四个单电压输入或者两个差分输入。AIN0和AIN1可以与AIN3进行差分测量,多路复用器由配置寄存器中的位MUX [2:0]配置。 测量单端信号时,ADC的负输入通过多路器内的开关内部连接到GND。

STM32+ADS1115使用说明文档

 3.3量程与分辨率

STM32+ADS1115使用说明文档

 3.4 采样速率与转换时间

 采样速率可以由配置寄存器中的DR[2:0]位来控制,AD转换可以在一个周期内完成,因此转换时间为1/DR。

3.5数字比较器(在本次实验不使用)

       ADS1115具有可编程的数字比较器,可以在ALERT/RD引脚上发出警报。Config寄存器中的COMP_MODE位将比较器配置为传统比较器或窗口比较器。 在传统的比较器模式下,当转换数据超过高阈值寄存器(Hi_thresh)中设置的限制时,ALERT / RDY引脚将置为有效(默认为低电平有效)。 然后,仅当转换数据降至低阈值寄存器(Lo_thresh)中设置的限制以下时,比较器才会置为无效。 在窗口比较器模式下,当转换数据超过Hi_thresh寄存器或低于Lo_thresh寄存器值时,ALERT / RDY引脚将置为有效。

       在窗口模式或传统比较器模式下,均可将比较器配置为在被配置寄存器中的COMP_LAT位置位后锁存。即使输入信号未超出阈值寄存器的范围,此设置也将保留断言。只能通过发出SMBus警报响应或读取转换寄存器来清除此锁存的断言。可以通过Config寄存器中的COMP_POL位将ALERT / RDY引脚配置为高电平有效或低电平有效。
       两种比较器模式只有在一定数量的连续读数超过阈值寄存器中设置的阈值(Hi_thresh和Lo_thresh)之后,比较器也可以配置为激活ALERT / RDY引脚。 Config寄存器中的COMP_QUE [1:0]位将比较器配置为在激活ALERT / RDY引脚之前等待超过阈值的一,二或四个读数。 COMP_QUE [1:0]位还可以禁用比较器功能,并将ALERT / RDY引脚置于高电平状态

3.6 操作模式

ADS1115由两种模式,连续转换和单次转换,配置寄存器中的MODE位选择相应的工作模式。

3.6.1 单次转换

当配置寄存器中的MODE 位设置为1时,ADS1115进入掉电状态,并以单次转换模式工作,首次上电时,此状态时ADS的默认状态。尽管进入了掉电模式,但设备仍会响应命令。 ADS1115保持此掉电状态,直到将1写入配置寄存器中的操作状态(OS)位。当OS位有效时,器件将在大约25μs的时间内上电,将OS位复位为0,并开始单次转换。当转换的数据准备好后,设备会再次掉电。正在进行的转换时将1写入OS位无效。要切换到连续转换模式,请将0写入MODE中的MODE位。

3.6.2 连续转换

在连续转换模式(MODE位设置为0)下,ADS1115连续执行转换。转换完成后,ADS1115将结果放入转换寄存器,并立即开始另一次转换。配置新的设置时,当前正在进行的转换将使用先前的设置完成转换。此后,将开始使用新的设置进行连续转换。要切换到单次转换模式,请向配置寄存器的MODE位写入1或复位设备。

4. ADS1115 的IIC

4.1 IIC地址的选择

        ADS1115具有一个地址引脚ADDR,用于设置器件的I2C地址。 该引脚可以是连接到GND,VDD,SDA或SCL,因此可以通过一对IIC引脚选择四个不同的地址。
       一般我们将地址位接GND,1001000,最后一位是确定IIC的写/读状态,写的时候是1,读的时候是0.所以slave address读写地址是0x90/0x91(10010000/10010001)

STM32+ADS1115使用说明文档

 4.2 接收模式

           ADS1115在从机接收模式下,主机发送到从机的第一个字节由7位设备地址组成,其次是低的R / W位。 主机发送的下一个字节是地址指针寄存器, ADS1115收到地址指针寄存器字节, 接下来的两个字节被写入地址由寄存器地址指针位P [1:0]给出。最后ADS1115返回字节。 数据寄存器字节为首先发送最高有效字节,然后发送最低有效字节。

4.3 发送模式

        在从机发送模式下,主机发送的第一个字节是7位从机地址,后跟高R / W位。 该字节将从机设置为发送模式, 从机发送的字节是数据寄存器的最高有效字节,由数据寄存器地址指针位P [1:0]指示, 然后,其余的最低有效字节由从机发送。

4.4 写入和读取寄存器

         要从ADS1115访问特定的寄存器,主机必须首先写一个适当的值到地址指针寄存器中的地址指针位P [1:0]。在从机地址字节,低R / W位和成功的从机确认之后,直接写入地址指针寄存器。写入地址指针寄存器后,从机应答,而主机发出STOP或重复的START条件。从ADS1115读取时,写入位P [1:0]的前一个值确定要读取的寄存器。要更改读取哪个寄存器,必须将新值写入P [1:0]。要将新值写入P [1:0],主机发出R / W位为低的从机地址字节,后跟地址指针寄存器字节。主机不必发送其他数据,并且可以发出STOP条件。如果需要重复读取同一寄存器,则无需连续发送地址指针寄存器,因为ADS1115会存储P [1:0]的值,直到被写操作修改为止。


STM32+ADS1115使用说明文档

 读时序操作步骤:
   1.发送写地址给ADS1115(0x90);
   2.向地址指针寄存器写数据,后两位有效,只能写0x00,0x01,0x02,0x03;
   3.发送读地址给ADS1115(0x91);
   4.读取ADS1115的数据(两个字节,MSB先行);

STM32+ADS1115使用说明文档

写时序操作步骤:
   1.发送写地址给ADS1115(0x90);
   2.向地址指针寄存器写数据,后两位有效,只能写0x00,0x01,0x02,0x03;
   3.发送数据给ADS1115(高位在前)

4.5 数据格式

       ADS1115以二进制补码格式提供16位数据。 正满量程(+ FS)输入时,输出的AD值代码为7FFFh,负满量程(-FS)输入时,输出的AD值代码为8000h。这些代码的输出为了提示超量程的提示。

STM32+ADS1115使用说明文档

 STM32+ADS1115使用说明文档

 

5.寄存器

ADS1115具有四个寄存器,可通过I2C接口使用AddressPointerRegister进行访问寄存器。 ConversionRegister包含上一次转换的结果。 ConfigRegister用于更改ADS1115工作模式并查询设备状态。 其他两个寄存器Lothresh和Hithresh,设置用于比较器功能的阈值。

5.1 地址指针寄存器(只写)

STM32+ADS1115使用说明文档

 5.2 转换寄存器(P[1:0] = 0x00) [reset = 0x0000] (只读)

        16位转换寄存器包含二进制二进制补码格式的最后一次转换结果。 上电后,转换寄存器清除为0,并保持0直到第一次转换完成。

STM32+ADS1115使用说明文档

 

5.3配置寄存器(P[1:0] = 0x01) [reset = 8583h]

      16位配置寄存器用于控制工作模式,输入选择,数据速率,满量程范围和比较器模式。

STM32+ADS1115使用说明文档

 STM32+ADS1115使用说明文档

STM32+ADS1115使用说明文档 

STM32+ADS1115使用说明文档 

 

5.4Lo_thresh (P[1:0] = 2H) [reset = 8000h]       Hi_thresh (P[1:0] = 3H) [reset = 7FFFh]寄存器

比较器使用的上下阈值以二进制补码格式存储在两个16位寄存器。 比较器为数字比较器。 因此,只要更改PGA设置,就必须更新这两个寄存器中的值(使能比较器前提下)。 通过将Hi_thresh寄存器MSB设置为1并将Lo_thresh寄存器MSB设置为0,要使用ALERT / RDY引脚的比较器功能,Hi_thresh寄存器值必须始终大于 Lo_thresh寄存器值。


STM32+ADS1115使用说明文档

 STM32+ADS1115使用说明文档文章来源地址https://www.toymoban.com/news/detail-485627.html

 6.代码实现

//i2c_ads1115.h
#ifndef __IIC_ADS1115_H
#define __IIC_ADS1115_H

#include "i2c.h"

#define ADS1115_WRITE_ADDRESS        0x90
#define ADS1115_READ_ADDRESS         0x91
//以下两个预处理作为配置寄存器预处理要更改其配在这里更改
//也可以添加新的预处理对不同通道的采集或者选取不同的采样速率等
#define CONFIG_REG_H     ADS1115_REG_CONFIG_OS_START|\
                         ADS1115_REG_CONFIG_MUX_Diff_01|\
                         ADS1115_REG_CONFIG_PGA_4|\
                         ADS1115_REG_CONFIG_MODE_SINGLE
#define CONFIG_REG_L    ADS1115_REG_CONFIG_DR_128|\
                        ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL|\
                        ADS1115_REG_CONFIG_COMP_POL_LOW|\
                        ADS1115_REG_CONFIG_COMP_LAT_NONLATCH|\
                        ADS1115_REG_CONFIG_COMP_QUE_DIS


/***************/
//配置寄存器说明

//config register
/*CRH[15:8](R/W)
   BIT      15      14      13      12      11      10      9       8
   NAME     OS      MUX2    MUX1    MUX0    PGA2    PGA1    PGA0    MODE
CRL[7:0] (R/W)
   BIT      7       6       5       4       3       2       1       0
   NAME    DR0     DR1     DR0   COM_MODE COM_POL COM_LAT COM_QUE1 COM_QUE0


   -----------------------------------------------------------------------------------
 * 15    | OS             |  运行状态会单词转换开始
 *       |                | 写时:
 *       |                | 0   : 无效
 *       |                | 1   : 开始单次转换处于掉电状态时
 *       |                | 读时:
 *       |                | 0   : 正在转换
 *       |                | 1   : 未执行转换
 * -----------------------------------------------------------------------------------
 * 14:12 | MUX [2:0]      | 输入复用多路配置
 *       |                | 000 : AINP = AIN0 and AINN = AIN1 (default)
 *       |                | 001 : AINP = AIN0 and AINN = AIN3
 *       |                | 010 : AINP = AIN1 and AINN = AIN3
 *       |                | 011 : AINP = AIN2 and AINN = AIN3
 *       |                | 100 : AINP = AIN0 and AINN = GND
 *       |                | 101 : AINP = AIN1 and AINN = GND
 *       |                | 110 : AINP = AIN2 and AINN = GND
 *       |                | 111 : AINP = AIN3 and AINN = GND
 * -----------------------------------------------------------------------------------
 * 11:9  | PGA [2:0]      | 可编程增益放大器配置(FSR  full scale range)
 *       |                | 000 : FSR = В±6.144 V
 *       |                | 001 : FSR = В±4.096 V
 *       |                | 010 : FSR = В±2.048 V (默认)
 *       |                | 011 : FSR = В±1.024 V
 *       |                | 100 : FSR = В±0.512 V
 *       |                | 101 : FSR = В±0.256 V
 *       |                | 110 : FSR = В±0.256 V
 *       |                | 111 : FSR = В±0.256 V
 * -----------------------------------------------------------------------------------
 * 8     | MODE           | 工作模式
 *       |                | 0   : 连续转换
 *       |                | 1   : 单词转换
 * -----------------------------------------------------------------------------------
 * 7:5   | DR [2:0]       | 采样频率
 *       |                | 000 : 8 SPS
 *       |                | 001 : 16 SPS
 *       |                | 010 : 32 SPS
 *       |                | 011 : 64 SPS
 *       |                | 100 : 128 SPS (默认)
 *       |                | 101 : 250 SPS
 *       |                | 110 : 475 SPS
 *       |                | 111 : 860 SPS
 * -----------------------------------------------------------------------------------
 * 4     | COMP_MODE      | 比较器模式
 *       |                | 0   : 传统比较器 (default)
 *       |                | 1   : 窗口比较器
 * -----------------------------------------------------------------------------------
 * 3     | COMP_POL       | Comparator polarity
 *       |                | 0   : 低电平有效 (default)
 *       |                | 1   : 高电平有效
 * -----------------------------------------------------------------------------------
 * 2     | COMP_LAT       | Latching comparator
 *       |                | 0   : 非锁存比较器. (default)
 *       |                | 1   : 锁存比较器.
 * -----------------------------------------------------------------------------------
 * 1:0   | COMP_QUE [1:0] | Comparator queue and disable
 *       |                | 00  : Assert after one conversion
 *       |                | 01  : Assert after two conversions
 *       |                | 10  : Assert after four conversions
 *       |                | 11  : 禁用比较器并将ALERT/RDY设置为高阻抗 (default)
 * -----------------------------------------------------------------------------------
*/



//地址指针寄存器

#define ADS1015_REG_POINTER_CONVERT     (0x00)
#define ADS1015_REG_POINTER_CONFIG      (0x01)
#define ADS1015_REG_POINTER_LOWTHRESH   (0x02)
#define ADS1015_REG_POINTER_HITHRESH    (0x03)
// 单次转换开始
#define ADS1115_REG_CONFIG_OS_START                     (0x1U << 7)//设备单词转换开启 高字节的最高位
#define ADS1115_REG_CONFIG_OS_NULL                      (0x0U << 7)
//输入引脚选择和输入方式选择
#define ADS1115_REG_CONFIG_MUX_Diff_01                  (0x0U << 4)  // 差分输入0引脚和1引脚
#define ADS1115_REG_CONFIG_MUX_Diff_03                  (0x1U << 4)  // 差分输入0引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_Diff_13                  (0x2U << 4)  // 差分输入1引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_Diff_23                  (0x3U << 4)  // 差分输入2引脚和3引脚
#define ADS1115_REG_CONFIG_MUX_SINGLE_0                 (0x4U << 4)  //单端输入 0
#define ADS1115_REG_CONFIG_MUX_SINGLE_1                 (0x5U << 4)  //单端输入 1
#define ADS1115_REG_CONFIG_MUX_SINGLE_2                 (0x6U << 4)  //单端输入 2
#define ADS1115_REG_CONFIG_MUX_SINGLE_3                 (0x7U << 4)  //单端输入 3

//量程选择
#define ADS1115_REG_CONFIG_PGA_6                        (0x0U << 1) // +/- 6.1144
#define ADS1115_REG_CONFIG_PGA_4                        (0x1U << 1) // +/- 4.096
#define ADS1115_REG_CONFIG_PGA_2                        (0x2U << 1) // +/- 2.048
#define ADS1115_REG_CONFIG_PGA_1                        (0x3U << 1) // +/- 1.024
#define ADS1115_REG_CONFIG_PGA_05                       (0x4U << 1) // +/- 0.512
#define ADS1115_REG_CONFIG_PGA_02                       (0x5U << 1) // +/- 0.256

//运行方式

#define ADS1115_REG_CONFIG_MODE_SINGLE              (0x1U << 0)  //  单次
#define ADS1115_REG_CONFIG_MODE_CONTIN              (0x0U << 0)  //连续转换

//转换速率

#define ADS1115_REG_CONFIG_DR_8                     (0x0U << 5)
#define ADS1115_REG_CONFIG_DR_16                    (0x1U << 5)
#define ADS1115_REG_CONFIG_DR_32                    (0x2U << 5)
#define ADS1115_REG_CONFIG_DR_64                    (0x3U << 5)
#define ADS1115_REG_CONFIG_DR_128                   (0x4U << 5)
#define ADS1115_REG_CONFIG_DR_250                   (0x5U << 5)
#define ADS1115_REG_CONFIG_DR_475                   (0x6U << 5)
#define ADS1115_REG_CONFIG_DR_860                   (0x7U << 5)

//比较器模式
#define ADS1115_REG_CONFIG_COMP_MODE_TRADITIONAL    (0x0U << 4)//默认
#define ADS1115_REG_CONFIG_COMP_MODE_WINDOW         (0x1U << 4)


#define ADS1115_REG_CONFIG_COMP_POL_LOW         (0x0U << 3)//默认
#define ADS1115_REG_CONFIG_COMP_POL_HIG         (0x1U << 3)


#define ADS1115_REG_CONFIG_COMP_LAT_NONLATCH        (0x0U << 2)
#define ADS1115_REG_CONFIG_COMP_LAT_LATCH           (0x1U << 2)


#define ADS1115_REG_CONFIG_COMP_QUE_ONE         (0x0U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_TWO         (0x1U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_THR         (0x2U << 0)
#define ADS1115_REG_CONFIG_COMP_QUE_DIS         (0x3U << 0)

void ads1115_config_register(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL);
int16_t ads1115_read_data(I2C_HandleTypeDef ads1115_I2cHandle);
double ads1115_get_voltage_val(I2C_HandleTypeDef ads1115_I2cHandle,uint8_t pointADD,uint8_t configH,uint8_t configL);
#endif

到了这里,关于STM32+ADS1115使用说明文档的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stlink下载调试器使用说明(STM32采用stlink下载程序)

    stlink能干什么?  最基本的功能:下载程序。  一般STM32支持ISP串口下载,也支持stlink、jlink等下载器下载 。 使用stlink、jlink下载要比串口方便很多,在keil里直接点击下载就行了,不需要去选择hex文件,速度上要快很多,主要一点,jlink、stlink能实现硬件仿真调试,程序出问

    2024年02月02日
    浏览(51)
  • 【物联网】stm32标准库开发常用函数的使用和代码说明

    用于控制端口的读写操作。 GPIO_Init:初始化GPIO端口。 GPIO_WritePin、GPIO_ReadPin:写入或读取指定GPIO引脚的状态。 GPIO_SetPin:设置指定GPIO引脚的状态为高电平。 GPIO_ResetPin:将指定GPIO引脚的状态复位为低电平。 用于管理中断相关操作。 NVIC_EnableIRQ:使能指定的中断。 NVIC_Disab

    2024年02月14日
    浏览(41)
  • STM32L0 ADC使用HAL库关于校准问题的说明

    最近是有一个产品用到了ADC,使用的是STM32L051 芯片,使用 STM32CubeMX 生成的代码,本来以为简简单单,但是在调用 HAL ADC校准函数的时候遇到一个问题有点疑问,度娘一下也没有找到解答,还是经过翻阅了一些资料才得到答案,特此来记录一下。 我是矜辰所致,全网同名,尽

    2024年02月02日
    浏览(52)
  • 《 STM32 ST-LINK Utility 》__代码下载工具下载、安装和使用说明(小白也能懂)

    目录 一、什么是STM32 ST-LINK Utility? 二、STM32 ST-LINK Utility有什么用? 三、官方途径下载软件! 四、我的资源 五、安装 六、怎么用? 1、比如我们经常使用的Keil是如何生成hex 2、读取STM32内部FLASH及芯片信息 3、打开hex程序 4、下载程序  (* ̄︶ ̄)创作不易!期待你们的 点赞、

    2024年02月06日
    浏览(52)
  • yueyin uart ip 使用说明文档

    本文用于讲解yueyin IP 的uart ip(串口/rs422/rs485/rs232)的功能,以及使用说明,方便使用者快速上手。 版本:V1.0.0 编制:月隐 yueyin_ip_uart是月隐编写的串口IP,实现串口的底层收发时序,可灵活设置奇偶校验位,数据位的位宽等参数,收发指示信号明显好用。 串口的协议为:

    2024年02月10日
    浏览(59)
  • 前端UNIAPP端webview嵌入H5使用说明文档

    一、关闭webView窗口 功能说明 关闭已经打开的Webview窗口,需先获取窗口对象或窗口id,并可指定关闭窗口的动画及动画持续时间。 参数说明 参数 是否必须 参数类型/固定值 说明 id_wvobj 是 String  要关闭Webview窗口id或窗口对象,若操作窗口对象已经关闭,则无任何效果。 使用

    2024年04月16日
    浏览(43)
  • SkeyeWebPlayer.js H5播放器使用文档说明

    SkeyeWebPlayer.js H5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)视频直播与视频点播等多种协议, 支持H.264、H.265、AAC等多种音视频编码格式,支持mse、wasm等多种解码方式,支持Windows、Android、iOS全平台终端的H5播放器。 功能说明 支持 m3u8/HLS 播放; 支持 HTTP-FLV/WS-FLV 播放

    2023年04月08日
    浏览(33)
  • typecho文档下的系统使用要求及文件结构说明

    typecho是基于GNU General Public License 2.0开源协议。 轻量高效 数据库仅仅 7 张数据表,加上不足 400KB 的代码,就实现了完整的插件与模板机制。超低的 CPU 和内存使用率,足以发挥主机的最高性能。 先进稳定 原生支持 Markdown 排版语法,易读更易写。支持 BAE/GAE/SAE 等各类云主机,

    2024年02月06日
    浏览(39)
  • 使用SSM框架基于SpringBoot的个人博客+源代码+文档说明

    点击这里下载源码 项目介绍 通过从零开始搭建整个项目,了解整个开发流程,如何设计,如何实现,一步步发现,一步步解决。系统的运用SpringBoot与它集成的各种框架,对于学习了SpringBoot却没有实际运用的人是一个很好的练手项目。 主要技术与框架 项目构建:Maven web框架

    2024年02月03日
    浏览(57)
  • 【Python使用】嘿马头条完整开发md笔记第1篇:课程简介,ToutiaoWeb虚拟机使用说明【附代码文档】

    嘿马头条项目从到完整开发笔记总结完整教程(附代码资料)主要内容讲述:课程简介,ToutiaoWeb虚拟机使用说明,Pycharm远程开发,产品与开发,数据库1 产品介绍,2 原型图与UI图,3 技术架构,4 开发。OSS对象存储,七牛云存储,CDN,缓存。缓存,缓存架构,缓存数据,缓存有效

    2024年03月13日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包