adc采样的值跳动_嵌入式er必知:模数采样知多少(最全总结)
啥是ADC
在现代电子工业技术中,模数转换器(ADC, A/D,或A-to-D)是一种将模拟信号转换成数字信号的系统。ADC还可以提供隔离的测量,例如将输入模拟电压或电流转换为表示电压或电流大小的数字的电子设备。通常情况下,数字输出是一个与输入成比例的二进制补码,但也有其他的可能性。举些栗子:- KTV中麦克风将你唱歌的声音转成数字音频信号,经由信号处理,功放再播放出来
- 数码相机将物体表面反射的光线转换为数字信号,从而成像
- 疫情期间必用物资额温枪,将人体红外辐射经由光电转换成电压,最终转换为数字信号进行温度显示
- .......举不胜举。
ADC将连续时间和连续幅度的模拟信号转换为离散时间和离散幅度的数字信号。转换涉及输入的量化,因此必然会引入少量的误差或噪声。此外,ADC不会连续执行转换,而是定期进行转换,对输入进行采样,从而限制了输入信号的允许带宽。ADC的性能主要由其带宽和信噪比(SNR)来表征。
- ADC带宽 (Band width):ADC的带宽主要由其采样率来表征。
- ADC的SNR:SNR(signal noise ratio)是指信噪比,受许多因素影响,包括分辨率,线性度和准确性(量化级别与真实模拟信号的匹配程度),混叠和抖动。ADC的SNR通常以其有效位数( effective number of bits:ENOB),它返回的每个度量的位数平均来表示,而不是噪声。理想的ADC的ENOB等于其分辨率。
故,选择ADC以匹配待数字化信号的带宽和所需的SNR。如果ADC的采样率大于信号带宽的两倍,那么根据Nyquist–Shannon采样定理,就可以实现完美的重构。量化误差的存在甚至限制了理想ADC的SNR。但是,如果ADC的SNR超过输入信号的SNR,则其影响可能会被忽略,从而导致模拟输入信号的本质上是完美的数字表示。整这么多文字还是不直观易懂,到底啥是ADC,来个会动的图吧:

须理解的指标
分辨率
ADC看成一个黑匣子,基本的有一个模拟输入及其等效数字输出。下图 所示示例为一个N位ADC。N通常是6到24之间的任何值,常见的是8、10、12或16位。参考电压可能为单端电压,也可能为一个~,是一个正负电压参考源。
这便是分辨率的概念。模数转换器的分辨率表示在模拟值范围内它可以产生的离散值的数量。该分辨率决定了量化误差的大小,因此决定了不使用过采样的理想ADC的最大平均信噪比。举个栗子,如果给定ADC的最大输入值为5.0V,而ADC为10位类型,则每一位表示。这个ADC的分辨率,或者说量化步长,是4.89 mV。这是它的绝对理论分辨率。在这种特殊情况下,信号的分辨率不能高于。这个极限称为量化误差,所有的ADC,即使是完美的ADC,都有一定程度的量化误差,具体取决于ADC的分辨率。分辨率的数学定义为:其中及为ADC的参考电压,M为ADC的量化位数。可见M越大,Q数值越小,分辨率越高。
这个公式简单解读:就是将参考电压按照进行等分,比如10位ADC,就是将参考电压等分成1024份,输入电压与参考电压之比乘以1024,即为ADC的值。故
量化误差
量化误差是由理想ADC中的量化过程产生的。由于ADC的模拟输入电压与输出数字化值之间的存在舍入误差。 在理想的ADC中,量化误差均匀地分布在和之间,并且信号具有覆盖所有量化水平的均匀分布,因此信号量化噪声比SQNR(Signal-to-quantization-noise ratio)定义为:其中,M为ADC的位数,M位数越大或越高,SQNR也越大。精度
量化误差和非线性是模数转换器所固有的误差指标。用最低有效位(LSB)的单位进行度量。比如一个10位ADC,LSB为。非线性度
实际使用的ADC除了上面说的量化误差外,还具有更多的误差源:- 差分非线性误差DNL(Differential Non-Linearity):当ADC输出在应该改变的时候没有改变,就会出现DNL误差。例如,假设给定输入的当前输出代码是01101100,并且输入值增加了半步量化。代码应该是01101100 + 1位,或者01101101。当输入电压低于当前输入电压时,也会发生相反的情况。此时由于种种原因,这种情况可能不会发生。在本例中,ADC的误差为±1位DNL。
- 积分非线性误差INL(Integral Non-Linearity):如果量化水平在整个输入范围内分布不均匀,就会出现INL误差。例如,某ADC具有12位(4096个计数)分辨率和4.096V的参考电压。每个比特数正好表示输入电压变化的1.000mV,因此,输入电压为4096 mV,输出电压为1111 1111 1111,即0xFFF。对于某些adc,输入4095mV,甚至4094mV,仍然会得到0xFFF的数字输出。实际情况是,在整个输入范围内,1位的值发生了非常微小的变化,比如1.001mV或0.999mV。积累的误差会导致一个或两个比特精度的全量程误差。

应用实施策略:将上述k/b,利用两个点进行校准,将校准数据k/b存储在非易失存储器中。补充说一下:工程实践中需要校准的原因还因为选取的外围电阻、电容器件都有误差,所以这也是另一个需要标定的重要原因。
采样率
模拟信号在时间上是连续的,因此有必要将其转换为数字序列,这是数字信号处理的基础。因此,需要定义从模拟信号中采样数字序列的速率。该速率称为转换器的采样率或采样频率。可以采样连续变化的带限信号,然后可以通过重构滤波器从离散时间值中再现原始信号。奈奎斯特-香农采样定理表明,只有当采样率高于信号最高频率的两倍时,才可以忠实再现原始信号。个人在使用时,一般会选4倍以上。由于实际的ADC不能进行瞬时转换,因此在转换器执行转换期间(称为转换时间)输入值必须保持恒定。一个被称为采样保持电路——在大多数情况下,它使用一个电容来存储输入端的模拟电压,并使用一个电子开关或栅极来断开电容与输入端的连接。许多ADC集成电路包括内部的采样保持电路模块。图中的T为采样周期,其倒数就是采样频率。
混叠
ADC通过在不连续时间间隔(离散的含义)内对输入值进行采样来工作。假设以高于奈奎斯特速率的频率对输入进行采样(定义为有用信号频率的两倍),则可以重构信号中的所有频率。如果对高于奈奎斯特速率一半的频率进行采样,则会将它们错误地检测为较低频率,这一过程称为混叠。之所以会出现混淆,是因为每个周期对函数进行两次或两次以下的瞬时采样会导致丢失周期,从而出现频率错误地降低的情况。例如,以1.5 kHz采样的2 kHz正弦波将重构为500 Hz正弦波。

过采样
为了经济起见,通常以所需的最小速率对信号进行采样,结果是引入的量化误差是白噪声在转换器整个通带上的扩散。如果以远高于奈奎斯特速率的速率采样信号,然后进行数字滤波以将其限制为信号带宽,则会产生以下优点:- 过采样可以更轻松地实现模拟抗混叠滤波器
- 降低的噪声,尤其是在过采样之外还采用噪声整形处理后。


ADC类型
积分型ADC
优点:缺点:
- 积分型ADC分辨率高,位数可做到12位甚至更高
- 线性度非常好。本质上,输入端与一个集成的参考电压相比较来决定输出端,所以线性度将取决于比较器的精度。
- 电路实现拓扑简单,用于实现这些设备的元件相对较少,因此电路相对简单且生产成本较低。
- 主要缺点是转换速度慢。N位ADC,输出可能需要长达2个N的时钟周期来转换单个采样点
- 转换原理都是基于对电压积分并将积分后电压与另一电压比较以控制计数,计数输出即为ADC输出。积分对象要么是基于参考电压,要么是基于参考电压和输入电压。
- 主要用于传感器应用和诸如电压表和电流表等设备,在这些设备中,精度比速度更重要。换句话说积分型ADC采样速度比较低,但精度非常高
- 积分型ADC有不同的种类,常见的有单、双斜率积分等。增加一个“斜率”,以牺牲转换时间为代价而增加精度。
单斜率积分ADC

双斜率积分ADC


Sigma-Delta Σ-∆ ADC

Σ-∆ ADC 对所处理信号进行过采样(这个概念见模数采样知多少),并对待处理信号进行低通滤波。通常,在过滤器之后使用Flash ADC转换的比特数小于所需的比特数。所产生的信号连同由FLASH离散电平产生的误差,被反馈回并从输入中做差然后输入到滤波器。这个负反馈的可对噪声形成抑制作用,使它不出现在期望的信号频率。ADC之后的数字滤波器(利用抽取滤波器)可降低采样率,滤除不想要的噪声信号并提高输出分辨率(故称为sigma-delta调制,也称为delta-sigma调制)。
Flash ADC也称直接比较型
FLASH ADC的原理可能是最容易理解的。下图是一个两位ADC的示意图,由许多比较器组成,每个比较器都被提供了比上一个基准值高一个位值的基准电压。因此,对于一个8位ADC,需要256个这样的比较器。对于10位,则需要1024。
二分法在硬件中体现
实际应用中,还有一个变种比较常用,半 FLASH ADC。它使用两步的过程来减少实际转换链中所需的转换器数量:- 首先,将输入信号与恰好位于半的电平集进行比较。如果它更低,那么最高有效的位MSB,被设置为0,输入被馈送到一个比较器链与参考电压设置为,以转换得到其余的位。
- 如果输入信号高于,则将MSB设置为1,从输入信号中减去。比较器链再次用于获取剩余的位。所以,本质上,半步FLASH ADC,以牺牲一个额外的比较,来节省一半比较器。这种思路还可以继续推演扩展,比如4分 FLASH ADC等等。
逐次逼近寄存器SAR
逐次逼近寄存器(Successive Approximation Register):逐次逼近ADC使用比较器逐次缩小包含输入电压的范围。在每个连续的步骤中,转换器将输入电压与内部数字与模拟转换器的输出进行比较,后者可能表示所选电压范围的中点。在这个过程的每一步,近似都被存储在一个逐次逼近寄存器(SAR)中。例如,假设输入电压为6.3 V,初始范围为0到16v。对于第一步,输入6.3 V与8v (0-16V范围的中点)进行比较。比较器报告输入电压小于8v,因此SAR被更新为将范围缩小到0 - 8v。第二步,将输入电压与4v (0 - 8v的中点)进行比较,比较器报告输入电压高于4v,因此更新SAR以反映输入电压在4 - 8v范围内。第三步,输入电压与6v比较(4v与8v的一半);比较器报告输入电压大于6伏,搜索范围变为6 - 8伏。继续这些步骤,直到达到预期的解决方案为止。其拓扑结构如下,

Pipelined ADC
流水线ADC(也称为子例程量化器)使用两个或多个流水线。首先,进行粗略的转换。第二步,用数模转换器(DAC)确定输入信号的差异。然后将这个差异转换为更细的值,并在最后一步中合并结果。这可以被认为是后续逼近ADC的一种改进,其中反馈参考信号由整个范围的比特(例如,4比特)的中间转换组成,而不仅仅是下一个最重要的比特。结合逐次逼近法和flash adc的优点,该类型具有速度快、分辨率高、模具尺寸小等优点。
先描述一下坑
本文来解析一个盆友在使用STM32采集电池电压踩过的坑。以STM32F4 的ADC属于逐次逼近SAR 型ADC为例进行分析,参考STM32F405xx Datasheet,对于如何编写ADC程序就不做描述了。

采集电池电压,利用两个电阻将电池电压分压,然后送入单片机,当电阻如上分别取4M欧/1M欧时,ADC采集到的ADC值与万用表测得的ADC输入端相差很大,取30K欧以及10k欧时,则相差变小。盆友咨询我这是为什么?我给出了建议,先卖个关子,先来看看应用最为广泛的STM32单片机的一些特性。
STM32 ADC:
STM32 12位ADC是逐次逼近型的模数转换器。它有多达19个多路复用通道,允许它测量来自16个外部源、2个内部源和VBAT通道的信号。通道的A/D转换可以在单次、连续、扫描或间断模式下进行。ADC的结果存储在左对齐或右对齐的16位数据寄存器中。模拟看门狗功能允许应用程序检测输入电压是否超过用户定义的、更高或更低的阈值。主要功能,具体操作,怎么编程这些细节,有大量的资料就不罗嗦了,主要来看看电气特性。电气特性

- ADC 可支持采样频率受供电电压影响,供电电压高,可支持采样频率范围更高
- 可支持输入电压范围须在参考电压范围内
- 外部输入阻阻抗最大为
- 开关切换阻抗 最大为
- 内部采样保持电容 为4pF

ADC精度vs.负注入电流:应该避免在任何模拟输入引脚上注入负电流,因为这会显著降低在另一个模拟输入上执行转换的精度。建议在模拟引脚上增加一个肖特基二极管(引脚接地),这可能会注入负电流。

Page 136 图例(上图中标识解释):
- 见表68
- 实际转移曲线的示例。
- 理想转移曲线
- 终点相关线
- ET =未调整总误差:实际和理想传递曲线之间的最大偏差。EO =偏移误差:第一个实际过渡与第一个理想过渡之间的偏差。EG =增益误差:最后一个理想过渡与最后一个实际过渡之间的偏差。ED =微分线性误差:实际步长与理想步长之间的最大偏差。EL =积分线性误差:任何实际过渡和终点相关线之间的最大偏差。

寄生电容表示PCB的电容(取决于焊接和PCB布局质量)加上焊盘电容(大约5 pF)。寄生电容值高会降低转换精度。为了解决这个问题,应该减少fADC。
回到坑里
将盆友的电路等效绘制一下,忽略ADC采样通道内部ESD保护二极管,以及等效电流源,如下图:
跳出坑里
怎么办呢?我觉得这样应该可以:
总结一下
在单片机、DSP信号处理系统中,我们免不了要对物理信号进行采样,需要运用到模数转换器件,模数转换器万万千,那么要用好ADC器件,或者使用单片机、DSP内置ADC,了解这些技术指标以及其描述的真实含义,是非常必要的。熟悉各类ADC的意义,因为如前文所说,嵌入式设备免不了需要采集物理世界的模拟信号。信号各具特点,有的频率高,有的噪声多,有的需要精度高但速度可能不要很快等等。这里整理几种常见ADC(当然还有其他种类比如电荷平衡原理ADC、分时ADC、FM ADC、时间拉伸ADC、增量编码ADC、Wilkinson ADC等等)的原理及特点,了解各类ADC的基本特点,有助于进行器件选型、系统设计。对于单片机ADC的使用,个人总结了这几点:- 将输入短路,可测量热噪声。实际应用时,将输入端短路,采集一定数量的样本,由于热噪声符合高斯分布,可计算出其期望、方差,接入真实信号可以利用统计规律进行相应的噪声滤波处理。
- 量化噪声,可以通过输入一定幅度及频率的正弦波,进行度量系统的量化噪声。
- 设计ADC采样电路时,需要注意阅读芯片手册的电气特性参数,这个对于设计一个稳定的模数采集系统至关重要。
-END-
推荐阅读
【01】单片机软件模拟SPI接口【02】不用买开发板, 使用 SkyEye 模拟 ARM Linux【03】加深理解SPI总线协议,单片机软件模拟SPI接口【04】牛人在Ubuntu上模拟ARM开发环境【05】单片机软件模拟SPI接口—加深理解SPI总线协议免责声明:整理文章为传播相关技术,版权归原作者所有,如有侵权,请联系删除
相关文章:

Swift泛型
泛型是为Swift编程灵活性的一种语法,在函数、枚举、结构体、类中都得到充分的应用,它的引入可以起到占位符的作用,当类型暂时不确定的,只有等到调用函数时才能确定具体类型的时候可以引入泛型。 泛型函数 定义 fun 函数名<T,S&…

02、在层级未知情况下通过递归查找子物体
1、在在层级未知情况下通过递归查找子物体 ,这个主要是用于UI的的层级查找中 2、代码: 1 using System.Collections;2 using System.Collections.Generic;3 using UnityEngine;4 5 public class EnemyManager : MonoBehaviour6 {7 8 private GameOb…

CentOS装机必备-基本设置以及缺失文件
SecureCRT中注意不要使用以Ascii方式上传文件,只有在需要的地方才使用。主要是虚拟机中安装CentOS每次总会做一些设置,记录下来方便以后。 纯粹基本设置,比如本地SecureCRT可以连接虚拟机中的CentOS。 复杂的非基本设置见:Linux …

unity替换mesh测试
直接替换SkinnedMeshRender的Mesh,实现所谓断肢效果(不过最近发现,绑定多mesh似乎更好实现这样的效果。有时间准备写一篇): 只要不改变两个Mesh原始文件的层级,就不会出现权重的错乱问题。 权重映射的测试:http://www.…

matlab中patch命令_matlab 放大平移图形是超出边界问题的处理
matlab提供的图形放大和平移函数zoom和pan可以通过鼠标来控制图形,非常方便,在工具条toolbar上也有对应的按钮。但是在放大或平移自己画的数据图是,有时会出现部分图形超出了坐标系的边界的问题,非常奇怪。经分析和试验࿰…

关于虚拟化技术软硬件兼容问题的探讨
VMware十几年前就已经出现,个人最早使用VMware的时间似乎是2001年或者2002年,当时可以在个人电脑上通过VMware虚拟多套系统,用于学习研究(做实验往往会破坏系统,当时VMware在一些场景下还是比较流行的)。由…

自己开发操作系统
算是《30天自制操作系统》的读书笔记吧,但是我觉得原书不少地方啰嗦,某些做法值得商榷 http://product.china-pub.com/36828381.二进制编译器 首先下载Bzl1621.lzh,这个可以把二进制数编辑的软件。 BZ启动画面打开img文件2.使用虚拟机加载IMG…

广东科技学院专插本c语言考卷_广东科技学院第二届红色文化节之红色影视经典配音大赛决赛...
红色经典影视配音大赛追忆革命岁月,传承红色文化,激扬青春生命,传承红色精神,为了让广大师生感受到红色影视经典的魅力和配音的乐趣,加深对红色文化的理解,提高师生们的爱国情怀。2020年12月16日19…

Social regularizations
trust-aware :如何从隐式信任中导出显示信任。链接预测就是搞这一方面的么? 和类似谱聚类的拉普拉斯矩阵结合在一起,没怎么看。

阿里P7架构师的成长之路
前言 系统架构师是近几年来在国内外迅速成长并发展良好的一个职位,它的重要性及给互联网行业所带来的影响是不言而喻的。很多程序员把成为一名优秀的架构师作为自己职业生涯奋斗的目标,但很多人努力却用不对地方,前段时间我与在阿里的P7架构师…

cad的文字嵌入线条_带你玩转CAD!
CAD画图已经成为化工人的必备技能。什么,这么多CAD必备技巧你居然还不知道?我该拿什么拯救你,我最最最最最最亲爱的旁友!!!下面给大家整理了50个相见恨晚的CAD技巧,带你玩转CAD!&…

BZOJ1315 : Ural1557Network Attack
找到一棵dfs搜索树,给每条非树边一个随机非0权值,每条树边为所有经过它的树边的权值的异或。 那么有2种情况是合法的: 1.一条边权值为0,一条边权值非0。 2.两条边异或和为0。 排序后统计即可,时间复杂度$O(m\log m)$。…

android原生跳转到外网
2019独角兽企业重金招聘Python工程师标准>>> super.onCreate(savedInstanceState); setContentView(R.layout.main); Intent intent new Intent(); intent.setAction("android.intent.action.VIEW"); Uri uri Uri.parse("…

linux上使用strace查看C语言级别的php源码【一种方法】
如果你希望看到C语言级别的php代码就需要使用strace 这个默认是安装了的,如果没有安装可以 #yum install strace查看httpd进程 #ps auxw | grep httpd有多个,必须停止apache [rootlocalhost usr]# /usr/local/webserver/apache2/bin/apachectl stop启动…

iphone8p百度云认证_探秘百度数据工厂Pingo的多存储后端数据联合查询技术
作者介绍:张志宏,2013年加入百度大数据部,曾作为核心成员参与百度大数据平台的搭建。目前是百度数据工厂Pingo核心团队的技术负责人。Pingo是来自百度的离线大数据集成开发平台,使用Spark作为计算引擎,深度整合了资源调…

JavaScript文件中调用AngularJS内部方法或改变$scope变量
需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定; 首先获取AngularJS application: 方法一:通过controller来获取app var appElement document.querySelector([ng-controllermainCon…

web类协议脚本-飞机订票系统示例
以下是LR自带的飞机订票系统的Demo,希望能帮助大家。 Action() {int iRand;int iTmp;char *strTmpA;char *strTmpB;char *strTmpC;char *position;if ((strTmpA (char *)malloc(100 * sizeof(char))) NULL) { lr_output_message ("Insufficient memory avail…

ACCEPT()和ACCEPT4()
ACCEPT章节:Linux 程序员手册 (2) 更新:2010-09-10到 易美翻译 翻译名字accept - 通过套接口接受一个连接 概要 #include Esys/types.h> /* 参看 “注意小节” */ #include Esys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen…

没有提示_华为手机发出莫名的提示音,打开什么也没有?原来是它们在作怪
不知道你们有没有遇到过这样的情况,在使用手机的过程中会出现一个非常奇怪的现象:当你听到手机发出声音,打开手机却发现什么通知也没有?这一度让我感到很困扰,本着“打破砂锅问到底”的精神,终于让我找到了…

近段时间佛我就偶尔无
jo建瓯市金佛玩手机欧力紧凑度 我株型紧凑我阿九倨傲四局李嘉诚转载于:https://juejin.im/post/5b8e5263e51d4538e2278c9b

php内核探索方法与资源
PHP内核探索 TIPI深入理解PHP内核 风雪之隅PHP源码分析 《php扩展开发及内核应用》 百度XLQ Gods blog codinglabsPHP内核探索:从SAPI接口开始PHP内核探索:一次请求的开始与结束PHP内核探索:一次请求生命周期PHP内核探索:单进程SA…

feign调用走不走网关全局拦截_feign服务端出异常客户端处理的方法
在使用feign进行远程方法调用时,如果远程服务端方法出现异常,客户端有时需要捕获,并且把异常信息返回给前端,而如果在开启熔断之后,这个异常会被消化,所以说,如果希望拿到服务端异常,…

配置Cesium编译环境
1、安装node.js https://nodejs.org/en/ 2、配置node.js 在node.js安装目录下新建node_global、node_cache两个文件夹,并把node_global添加到环境变量 eg.D:\app\nodejs npm config set prefix D:\app\nodejs\node_global npm config set cache D:\app\nodejs\node_…

迷你世界电锯机器人_迷你世界:三分钟制作超简单飞翔石像机器人报道!
更多游戏资讯,请点击上方蓝字查询!哈喽,大家好,还记得我之前分享的超简单的石像机器人吗?不记得了吗?我再帮助大家回忆回忆,之前研游酱分享的石像机器人总共是分两篇文章,一个是不会…

J2EE 第二阶段项目之编写代码(四)
我的任务就是项目统计。 1 效益统计 1 教育效益统计表 (教育效益统计表,增,改,查看,查) 2 农牧林效益统计表 (农牧林效益统计表,增,改,查看,查) 3…

PHP安装扩展mcrypt以及相关依赖项 【PHP安装PECL扩展的方法】
一:Mcrypt简介 Mcrypt是PHP的一个扩展,完成了常用加密算法的封装。其实该扩展是对mcrypt标准类库的封装,mcrypt完成了相当多的常用加密算法,如DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128, TWOFISH, TEA…

Javascript到PHP加密通讯的简单实现
互联网上大多数网站,用户的数据都是以明文形式直接提交到后端CGI,服务器之间的访问也大都是明文传输,这样可被一些别有用心之人通过一些手段监听到。对安全性要求较高的网站,比如银行和大型企业等都会使用HTTPS对通讯过程进行加密…

MYSQL添加新用户 MYSQL为用户创建数据库 MYSQL为新用户分配权限
2019独角兽企业重金招聘Python工程师标准>>> 1.新建用户 //登录MYSQL >mysql -u root -p >密码 //创建用户 mysql> insert into mysql.user(Host,User,Password) values(‘localhost’,jeecn’,pa…

uml具有多种视图_UML建模与架构文档化
UML(统一建模语言) 是用元模型描述的,元模型是4层元模型体系结构模式中的一层。此模式的其他层次分别是元-元模型层、模型层和用户对象层。在原模型层,UML元模型 又被分解为三个子逻辑包:基础包(核心、扩展机制和数据模型)、行为元素包(描述模…

insert into与insert ignore以及replace into的区别
insert ignore表示,如果表中已经存在相同的记录,则忽略当前新数据; INSERT INTO有无数据都插入,如果主键则不插入; REPLACE INTO 如果是主键插入则会替换以前的数据; 例 1.insert语句一次可以插入多组值,每组值用一对…