当前位置: 首页 > news >正文

大庆网站建设公司北京购物网站建设公司

大庆网站建设公司,北京购物网站建设公司,wordpress index of,有了域名之后怎么做自己的网站文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”#xff1a;输入模块#xff08;GPIO、温度、V_REFINT#xff09;1.4.2 信号 “调度站”#xff1a;多路开关1.4.3 信号 “加工厂”#xff1a;ADC 转换器#xff08;规则组 注入… 文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”输入模块GPIO、温度、V_REFINT1.4.2 信号 “调度站”多路开关1.4.3 信号 “加工厂”ADC 转换器规则组 注入组1.4.4信号 “暂存柜”AD 数据寄存器1.4.5 信号 “监督员”模拟看门狗1.4.6信号 “报警器”中断输出控制 NVIC1.4.7 系统 “动力源”触发控制 RCC1.4.8系统 “总开关”开关控制 1.5输入通道1.6转换模式1.7触发控制1.8数据对齐1.9转换时间1.10校准1.11硬件电路 二、AD单通道2.1接线图2.2代码2.3ADC 相关 API 函数1. 时钟配置函数2. GPIO 配置函数3. ADC 配置函数4. ADC 控制函数5. 状态和数据读取函数 2.4工作现象 三、AD多通道3.1接线图3.2代码3.3AD单通道未提及的关键 API1. ADC 通道配置函数2. 采样时间说明3. ADC 状态标志位 3.4工作现象1. **光敏传感器AO 接 ADC 通道如 PA0**2. **声音传感器AO 接 ADC 通道如 PA1**3. **红外避障传感器AO 接 ADC 通道如 PA2**4. **电位器中间引脚接 ADC 通道如 PA3** 一、ADC 1.1简介 1. 2逐次逼近型ADC 1.3ADC框图 1.4ADC基本结构 以下用更通俗的 “信号 journey旅程” 逻辑拆解各模块咋连接、咋配合干活 1.4.1 信号 “上车点”输入模块GPIO、温度、V_REFINT GPIO16 路像 16 个 “小天线”能接外部五花八门的模拟信号比如传感器电压、旋钮调节的电平 是最常用的信号入口。温度传感器专门测温度把温度变化转成电压信号相当于 “温度→电信号” 翻译器。V_REFINT内部精准参考电压像 “标准尺”给 ADC 转换当基准比如转换时拿信号和它比确定数字值 。 这些信号要先 “排队上车”统一交给 多路开关下面讲它的作用 。 1.4.2 信号 “调度站”多路开关 作用当 “交通调度员”决定让哪路信号进 ADC 转换器。逻辑比如同时有 GPIO、温度传感器的信号它选 1 路规则组模式或几路注入组模式 送往后边的 ADC 转换器。 1.4.3 信号 “加工厂”ADC 转换器规则组 注入组 规则组最多 16 路常规 “生产线”按预设顺序、节奏转换信号比如循环采集 16 路 GPIO 适合普通、批量的转换需求。注入组最多 4 路“加急生产线”优先级更高遇到紧急信号比如关键传感器超阈值 能插队先转换灵活处理特殊需求。 不管规则组还是注入组干的事一样把模拟信号连续电压 切成数字信号0 和 1 组成的编码 。 1.4.4信号 “暂存柜”AD 数据寄存器 转换完的数字信号得找地方 “临时存一下” 规则组结果存在 “规则结果 ×1” 里1 组数据对应 1 个寄存器 。注入组结果存在 “注入结果 ×4” 里最多存 4 组方便快速连续处理 。 就像工厂生产完零件先放仓库等 CPU 来 “取货” 处理。 1.4.5 信号 “监督员”模拟看门狗 作用当 “质量检测员”盯着转换后的数字信号看是否超出你设定的范围比如温度不能太高 / 太低 。触发一旦超范围立马发信号相当于 “报警” 告诉系统 “这信号有问题” 1.4.6信号 “报警器”中断输出控制 NVIC 中断输出控制收到模拟看门狗的 “报警” 后整理信号决定咋通知系统。NVIC嵌套向量中断控制器系统的 “总调度台”收到中断信号后暂停当前任务优先处理 “信号异常” 事件比如触发紧急程序、记录日志 。 1.4.7 系统 “动力源”触发控制 RCC RCC时钟控制器给 ADC 整个系统提供 “心跳”时钟信号 所有模块得跟着时钟节奏干活否则会乱套。触发控制决定啥时候启动 ADC 转换像 “开关”可以软件手动触发程序里写代码启动 也能硬件触发比如定时器定时启动 发的信号叫 “START”。 1.4.8系统 “总开关”开关控制 简单粗暴控制 ADC 模块整体 “开 / 关”。不用 ADC 时关掉省点电要用时打开干活。 1.5输入通道 1.6转换模式 1.7触发控制 1.8数据对齐 1.9转换时间 1.10校准 1.11硬件电路 二、AD单通道 2.1接线图 2.2代码 main.c #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include AD.huint16_t ADValue; //定义AD值变量 float Voltage; //定义电压变量int main(void) {/*模块初始化*/OLED_Init(); //OLED初始化AD_Init(); //AD初始化/*显示静态字符串*/OLED_ShowString(1, 1, ADValue:);OLED_ShowString(2, 1, Voltage:0.00V);while (1){ADValue AD_GetValue(); //获取AD转换的值Voltage (float)ADValue / 4095 * 3.3; //将AD值线性变换到0~3.3的范围表示电压OLED_ShowNum(1, 9, ADValue, 4); //显示AD值OLED_ShowNum(2, 9, Voltage, 1); //显示电压值的整数部分OLED_ShowNum(2, 11, (uint16_t)(Voltage * 100) % 100, 2); //显示电压值的小数部分Delay_ms(100); //延时100ms手动增加一些转换的间隔时间} } AD.c #include stm32f10x.h // Device header/*** 函 数AD初始化* 参 数无* 返 回 值无*/ void AD_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //开启ADC1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*设置ADC时钟*/RCC_ADCCLKConfig(RCC_PCLK2_Div6); //选择时钟6分频ADCCLK 72MHz / 6 12MHz/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA0引脚初始化为模拟输入/*规则组通道配置*/ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //规则组序列1的位置配置为通道0/*ADC初始化*/ADC_InitTypeDef ADC_InitStructure; //定义结构体变量ADC_InitStructure.ADC_Mode ADC_Mode_Independent; //模式选择独立模式即单独使用ADC1ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; //数据对齐选择右对齐ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; //外部触发使用软件触发不需要外部触发ADC_InitStructure.ADC_ContinuousConvMode DISABLE; //连续转换失能每转换一次规则组序列后停止ADC_InitStructure.ADC_ScanConvMode DISABLE; //扫描模式失能只转换规则组的序列1这一个位置ADC_InitStructure.ADC_NbrOfChannel 1; //通道数为1仅在扫描模式下才需要指定大于1的数在非扫描模式下只能是1ADC_Init(ADC1, ADC_InitStructure); //将结构体变量交给ADC_Init配置ADC1/*ADC使能*/ADC_Cmd(ADC1, ENABLE); //使能ADC1ADC开始运行/*ADC校准*/ADC_ResetCalibration(ADC1); //固定流程内部有电路会自动执行校准while (ADC_GetResetCalibrationStatus(ADC1) SET);ADC_StartCalibration(ADC1);while (ADC_GetCalibrationStatus(ADC1) SET); }/*** 函 数获取AD转换的值* 参 数无* 返 回 值AD转换的值范围0~4095*/ uint16_t AD_GetValue(void) {ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件触发AD转换一次while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) RESET); //等待EOC标志位即等待AD转换结束return ADC_GetConversionValue(ADC1); //读数据寄存器得到AD转换的结果 } 2.3ADC 相关 API 函数 1. 时钟配置函数 c 运行 void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);功能启用或禁用 APB2 总线上的外设时钟如 ADC1、GPIOA。 参数 RCC_APB2Periph外设选择如RCC_APB2Periph_ADC1、RCC_APB2Periph_GPIOA。NewStateENABLE或DISABLE。 c 运行 void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);功能配置 ADC 时钟分频ADC 时钟必须 ≤ 14MHz。 参数 RCC_PCLK2分频选项如RCC_PCLK2_Div6表示 72MHz/612MHz。 2. GPIO 配置函数 c 运行 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);功能初始化 GPIO 引脚。 参数 GPIOxGPIO 端口如GPIOA。GPIO_InitStructGPIO 配置结构体模式、引脚、速度。 3. ADC 配置函数 c 运行 void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);功能配置规则组通道的转换顺序和采样时间。 参数 ADCxADC 外设如ADC1。ADC_Channel通道号如ADC_Channel_0对应 PA0。Rank序列位置1~16。ADC_SampleTime采样周期如ADC_SampleTime_55Cycles5。 c 运行 void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);功能初始化 ADC 参数。 参数 ADCxADC 外设。ADC_InitStructADC 配置结构体模式、对齐方式、触发方式等。 4. ADC 控制函数 c 运行 void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);功能启用或禁用 ADC。 参数 ADCxADC 外设。NewStateENABLE或DISABLE。 c 运行 void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);功能软件触发 ADC 转换。 参数 ADCxADC 外设。NewStateENABLE触发一次转换。 c 运行 void ADC_ResetCalibration(ADC_TypeDef* ADCx); FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx); void ADC_StartCalibration(ADC_TypeDef* ADCx); FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);功能ADC 校准流程复位校准、获取复位状态、开始校准、获取校准状态。 5. 状态和数据读取函数 c 运行 FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);功能检查 ADC 标志位状态如转换完成标志ADC_FLAG_EOC。 参数 ADCxADC 外设。ADC_FLAG标志位类型。 c 运行 uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);功能获取 ADC 转换结果0~409512 位分辨率。 参数 ADCxADC 外设。 AD.h #ifndef __AD_H #define __AD_Hvoid AD_Init(void); uint16_t AD_GetValue(void);#endif 2.4工作现象 初始化阶段 调用AD_Init()后ADC1 时钟开启GPIOA 引脚配置为模拟输入模式规则组通道 0PA0完成配置ADC 进入就绪状态。校准过程中ADC_ResetCalibration和ADC_StartCalibration会触发内部校准电路工作校准完成后标志位自动清除。 转换阶段 调用AD_GetValue()时软件触发转换ADC_SoftwareStartConvCmdADC_FLAG_EOC标志位在转换完成后置 1返回值在 0~4095 范围内对应输入电压 0~3.3V。若输入电压稳定如接固定电阻分压多次读取的 ADC 值波动较小通常≤±3LSB。 数据对应关系 三、AD多通道 3.1接线图 3.2代码 main.c #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include AD.huint16_t AD0, AD1, AD2, AD3; //定义AD值变量int main(void) {/*模块初始化*/OLED_Init(); //OLED初始化AD_Init(); //AD初始化/*显示静态字符串*/OLED_ShowString(1, 1, AD0:);OLED_ShowString(2, 1, AD1:);OLED_ShowString(3, 1, AD2:);OLED_ShowString(4, 1, AD3:);while (1){AD0 AD_GetValue(ADC_Channel_0); //单次启动ADC转换通道0AD1 AD_GetValue(ADC_Channel_1); //单次启动ADC转换通道1AD2 AD_GetValue(ADC_Channel_2); //单次启动ADC转换通道2AD3 AD_GetValue(ADC_Channel_3); //单次启动ADC转换通道3OLED_ShowNum(1, 5, AD0, 4); //显示通道0的转换结果AD0OLED_ShowNum(2, 5, AD1, 4); //显示通道1的转换结果AD1OLED_ShowNum(3, 5, AD2, 4); //显示通道2的转换结果AD2OLED_ShowNum(4, 5, AD3, 4); //显示通道3的转换结果AD3Delay_ms(100); //延时100ms手动增加一些转换的间隔时间} } AD.c #include stm32f10x.h // Device header/*** 函 数AD初始化* 参 数无* 返 回 值无*/ void AD_Init(void) {/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); //开启ADC1的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*设置ADC时钟*/RCC_ADCCLKConfig(RCC_PCLK2_Div6); //选择时钟6分频ADCCLK 72MHz / 6 12MHz/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA0、PA1、PA2和PA3引脚初始化为模拟输入/*不在此处配置规则组序列而是在每次AD转换前配置这样可以灵活更改AD转换的通道*//*ADC初始化*/ADC_InitTypeDef ADC_InitStructure; //定义结构体变量ADC_InitStructure.ADC_Mode ADC_Mode_Independent; //模式选择独立模式即单独使用ADC1ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; //数据对齐选择右对齐ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; //外部触发使用软件触发不需要外部触发ADC_InitStructure.ADC_ContinuousConvMode DISABLE; //连续转换失能每转换一次规则组序列后停止ADC_InitStructure.ADC_ScanConvMode DISABLE; //扫描模式失能只转换规则组的序列1这一个位置ADC_InitStructure.ADC_NbrOfChannel 1; //通道数为1仅在扫描模式下才需要指定大于1的数在非扫描模式下只能是1ADC_Init(ADC1, ADC_InitStructure); //将结构体变量交给ADC_Init配置ADC1/*ADC使能*/ADC_Cmd(ADC1, ENABLE); //使能ADC1ADC开始运行/*ADC校准*/ADC_ResetCalibration(ADC1); //固定流程内部有电路会自动执行校准while (ADC_GetResetCalibrationStatus(ADC1) SET);ADC_StartCalibration(ADC1);while (ADC_GetCalibrationStatus(ADC1) SET); }/*** 函 数获取AD转换的值* 参 数ADC_Channel 指定AD转换的通道范围ADC_Channel_x其中x可以是0/1/2/3* 返 回 值AD转换的值范围0~4095*/ uint16_t AD_GetValue(uint8_t ADC_Channel) {ADC_RegularChannelConfig(ADC1, ADC_Channel, 1, ADC_SampleTime_55Cycles5); //在每次转换前根据函数形参灵活更改规则组的通道1ADC_SoftwareStartConvCmd(ADC1, ENABLE); //软件触发AD转换一次while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) RESET); //等待EOC标志位即等待AD转换结束return ADC_GetConversionValue(ADC1); //读数据寄存器得到AD转换的结果 } AD.h #ifndef __AD_H #define __AD_Hvoid AD_Init(void); uint16_t AD_GetValue(uint8_t ADC_Channel);#endif 3.3AD单通道未提及的关键 API 除了之前提到的 ADC API这段代码还涉及以下未详细说明的函数 1. ADC 通道配置函数 c 运行 void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);功能配置规则组序列中的通道及其采样时间。 参数 ADC_Channel通道号如ADC_Channel_0~ADC_Channel_17。Rank序列位置1~16单通道模式下固定为 1。ADC_SampleTime采样周期如ADC_SampleTime_55Cycles5。 2. 采样时间说明 ADC 采样时间影响转换精度和速度可选值包括 c 运行 ADC_SampleTime_1Cycles5 // 1.5个ADC时钟周期最快 ADC_SampleTime_7Cycles5 // 7.5个周期 ADC_SampleTime_13Cycles5 // 13.5个周期 ADC_SampleTime_28Cycles5 // 28.5个周期 ADC_SampleTime_41Cycles5 // 41.5个周期 ADC_SampleTime_55Cycles5 // 55.5个周期 ADC_SampleTime_71Cycles5 // 71.5个周期 ADC_SampleTime_239Cycles5 // 239.5个周期最慢抗干扰最强3. ADC 状态标志位 c 运行 FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);常用标志位 ADC_FLAG_EOC规则组转换完成标志代码中使用。ADC_FLAG_AWD模拟看门狗触发标志需额外配置。ADC_FLAG_OVR数据溢出标志连续转换模式下可能出现。 3.4工作现象 初始化后ADC1 和 GPIOA 时钟开启PA0~PA3 配置为模拟输入模式ADC 处于就绪状态但未开始转换需调用AD_GetValue()触发。 动态通道选择每次调用AD_GetValue(channel)时会临时配置规则组序列 1 为指定通道如ADC_Channel_2对应 PA2然后触发单次转换。 转换结果 返回值范围为 0~4095对应输入电压 0~3.3V假设 VREF 为 3.3V。例如 输入 1.65V → 返回值约为 20481.65V/3.3V × 4095 ≈ 2048。输入悬空无信号→ 返回随机值受噪声影响。 1. 光敏传感器AO 接 ADC 通道如 PA0 现象 光照越强如手电筒照射ADC 值 越大对应电压越高假设传感器输出与光照正相关光照越弱手遮挡ADC 值 越小OLED / 串口数据同步变化。 原理光敏电阻阻值随光照变化转换为电压信号被 ADC 采集。 2. 声音传感器AO 接 ADC 通道如 PA1 现象 安静时ADC 值 稳定在低范围背景噪声小拍手 / 说话时ADC 值 瞬间跳升声音越强跳升幅度越大数据波动明显。 原理咪头采集声波转换为电压波动ADC 捕捉瞬时变化。 3. 红外避障传感器AO 接 ADC 通道如 PA2 现象 无遮挡时ADC 值 接近最大值红外反射强输出电压高手靠近遮挡时ADC 值 骤降反射弱电压低响应迅速。 原理红外发射 接收距离 / 遮挡影响反射强度转换为电压变化。 4. 电位器中间引脚接 ADC 通道如 PA3 现象 顺时针旋转ADC 值 从 0→4095 线性递增或递减取决于接线方向逆时针旋转ADC 值 反向递减 / 递增变化平滑无跳变。 原理电位器分压输出电压与旋转角度线性相关。
http://www.zqtcl.cn/news/936665/

相关文章:

  • 山西孝义网站开发平面设计类网站有哪些
  • 手机版怎么做微电影网站青岛网站设计定制
  • 部队织梦网站模板免费下载红河网站建设代理
  • 网站开发学院网页制作模板html图片
  • 企业门户网站模板html上线网站备案和实名认证
  • 抖音代运营内容seo职业规划
  • dedecms网站制作教程做网站买好域名怎么办
  • 网站建立于网页设计ai网站设计
  • 青海省建设工程造价网站电商设计网站培训
  • 软件开发过程的阶段划分优化手机访问网站速度
  • 知名网站建设公司做分销网站好吗
  • 服务器php网站打不开潍坊网站模板在哪
  • 网站管理员要干些什么开发公司专票
  • 陕西省建设银行网站6网站都有什么类型的
  • 哪里有做网站设计全国室内设计学校
  • 简单的网站php开发教程账户竞价托管哪里好
  • dede网站搬家教程浙江省住房和城乡建设部网站
  • 网站分页符怎么做做网站是什么意思
  • 影视网站开发工程师店铺装修
  • ip138查询网站网址域名ip网站外包制作
  • 网站建设需求怎么写网站seo快速排名优化
  • 网站后台文章添加成功 不显示注册安全工程师是干什么的
  • 网页制作网站建设百度网站推广费用多少钱
  • 长沙网站建设软件wordpress加菜单
  • 网站建设教育板块wordpress $pagenow
  • 岳阳手机网站建设自己可以给公司做网站吗
  • 旅游网站建设目的关于建设网站的需求分析
  • 手机可以建立网站吗自己造网站
  • 厦门建网站哪家好手机编程网站
  • 网站搭建后台奥门网站建设