ADC0809
先选择通道,然后通道输入模拟量电压到比较器的一端,DAC通过改变的SAR编码从而用加权电阻网络生成不同的电压,在比较器的另一端,两者对比相同的时候即得到对应的SAR数字量(对比方法:二分法),然后输出给8位锁存缓冲器
Vref+ 和- 是参考电压,对应数字量对应的是3.3V还是5V由这个决定
128 64 32 。。。 每一位都是二进制的位权,判断过程就等于对二进制从高位到低位判断是0还是1的过程 (逐次逼近)
单通道单次转换
void AD_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_ADCCLKConfig(RCC_PCLK2_Div6); // 分频72/6=12M 这里最大是14M GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //ADC模拟输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); // ADC1,指定通道,1(规则组的16个序列的1),_55 数值越小越快,越大越稳定 ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //工作模式选择 独立还是双ADC模式 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; //数据对齐, ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发源选择EXTI_11_15 ,这里使用内部软件触发 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;// 连续转换模式 ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描转换模式 (对应4种模式) ADC_InitStructure.ADC_NbrOfChannel = 1;// 通道数目 (一般用在扫描模式下,非扫描的话只有第一个序列有效) ADC_Init(ADC1, &ADC_InitStructure); ADC_Cmd(ADC1, ENABLE); //中断和模拟看门狗 TODU ADC_ResetCalibration(ADC1); //对ADC进行校准 ADC_CR2 位3 先有软件置1,校准后硬件自动置0 while (ADC_GetResetCalibrationStatus(ADC1) == SET); //查看硬件是否置0 ADC_StartCalibration(ADC1); //启动校准 while (ADC_GetCalibrationStatus(ADC1) == SET); } uint16_t AD_GetValue(void) { ADC_SoftwareStartConvCmd(ADC1, ENABLE); // 软件触发转换 while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET); //等待转换完成(规则组和注入组共用转换完成标志位) return ADC_GetConversionValue(ADC1);//返回数字量 读取ADC DR寄存器,自动清除EOC标志位 }View Code
可以采用均值滤波的方式平滑采样,使用施密特触发器的原理稳定控制开灯关灯
一般模式,打开一个通道,ADC转换,输出,关闭通道
注入通道:可以直接搬运4份ADC数据到寄存器,可同时显示(菜单,一次性上4份菜)
规则通道:16选1,对应的寄存只能存一份数据,要想显示多路,可配合DMA数据转运,一个接一个排队展示(菜单,一次只能上1份【避免数据覆盖】,被拿走后上下一份)
转换信号:
1软件触发,区分为规则组触发源和注入组触发源
每隔1ms转换一次,可使用定时器来申请中断来转换(消耗资源);
2硬件触发
一般可以用定时器的更新事件选择为TRGO输出,在ADC那里选择触发信号为对应的TRGO,这样通过硬件触发ADC(无需中断)
也可以选择外部中断引脚来触发中断
模拟看门狗可用来监测
C8T6,ADC引脚ADC12_IN0-9 ,ADC1和ADC2公用引脚,ADC1和ADC2可以同时采样双ADC模式,交叉模式,增加采样率
转换模式
单次转换非扫描: 一次一个通道,一次转换一个。 触发一次,转换一次。
连续转换非扫描:一次一个通道,连续转换。触发一次,连续转换不停,需要值直接读寄存器就行
单次转换扫描模式:一次触发,对多个通道依次转换,每个通道只转换一次
连续转换扫描模式:一次触发,对多个通道依次转换,每个通道连续转换
ADC采样电压保持,采样事件长,避免毛刺,稳定;采样时间短,频率快
ADC校准,固定流程,在初始化函数后增加一些代码就行
传感器使用分压原理
标签:触发,转换,InitStructure,ADC,ADC1,GPIO From: https://www.cnblogs.com/liujinmeng/p/17652675.html