ADC模数转换器概念函数及应用

ADC模数转换器概念函数及应用

文章目录

  • ADC模数转换器概念函数及应用
    • 1.ADC简介
    • 2.逐次逼近型ADC
      • 2.1逐次逼近型ADC
      • 2.2stm32逐次逼近型
      • 2.3ADC基本结构
      • 2.4十六个通道
    • 3.规则组的4种转换模式
      • 3.1单次转换,非扫描模式
      • 3.2连续转换,非扫描模式
      • 3.3单次转换,扫描模式
      • 3.4连续转换,扫描模式
    • 4.触发控制
    • 5.数据对齐
    • 6.转换时间
    • 7.校准(了解)
    • 8.硬件电路
    • 9.相关函数说明
      • RCC的函数
      • ADC的函数
      • 控制校准的函数
      • 软件触发的函数
      • 获取标志位状态
      • 配置间断模式
      • ADC规则组通道配置
      • ADC获取转换值
      • ADC注入组的配置(了解)
      • 模拟看门狗的配置
      • ADC温度传感器,内部电压控制
      • 标志位相关
    • 9.实操图
    • 10.AD单通道
      • 10.1接线图
      • 10.2代码编写
        • 10.2.1主程序main.c
        • 10.2.2函数定义AD.c
        • 10.2.3函数声明AD.h
    • 11.AD多通道
      • 11.1接线图
      • 11.2代码编写
        • 11.2.1主程序main.c
        • 11.2.2函数定义AD.c
        • 11.2.3函数声明AD.h
    • n.实现步骤
      • n.1ADC配置的步骤
      • n.2校准的4个步骤
    • n.实现步骤
      • n.1ADC配置的步骤
      • n.2校准的4个步骤

1.ADC简介

  • ADC(Analog-Digital Converter)模拟-数字转换器
  • ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
  • 12位逐次逼近型ADC,1us转换时间
  • 输入电压范围:0~3.3V,转换结果范围:0~4095
  • 18个输入通道,可测量16个外部和2个内部信号源(16个外部就是16个GPIO口,2个内部信号源是内部温度传感器内部参考电压)
  • 规则组(常规使用)和注入组(用于突发事件)两个转换单元
  • 模拟看门狗自动监测输入电压范围
  • STM32F103C8T6 ADC资源:ADC1、ADC2,10个外部输入通道

STM32主要是数字电路,数字电路只有高低电平,没有几v电压的概念

2.逐次逼近型ADC

2.1逐次逼近型ADC

逐次逼近型

2.2stm32逐次逼近型

stm32逐次逼近型

2.3ADC基本结构

ADC基本结构

2.4十六个通道

通道ADC1ADC2ADC3
通道0PA0PA0PA0
通道1PA1PA1PA1
通道2PA2PA2PA2
通道3PA3PA3PA3
通道4PA4PA4PF6
通道5PA5PA5PF7
通道6PA6PA6PF8
通道7PA7PA7PF9
通道8PB0PB0PF10
通道9PB1PB1
通道10PC0PC0PC0
通道11PC1PC1PC1
通道12PC2PC2PC2
通道13PC3PC3PC3
通道14PC4PC4
通道15PC5PC5
通道16温度传感器
通道17内部参考电压

3.规则组的4种转换模式

EOC在规则或注入通道组结束时设置,由软件清除或由读取ADC_DR时清除

3.1单次转换,非扫描模式

单次,非扫描

3.2连续转换,非扫描模式

连续,非扫描

3.3单次转换,扫描模式

单次,扫描

3.4连续转换,扫描模式

连续扫描

4.触发控制

触发控制

5.数据对齐

  • 数据右对齐

右对齐

  • 数据左对齐

左对齐

左对齐的作用:如果不想要右对齐那么高的分辨率,0~4095数太大了,可以选择左对齐将数据的高8位取出来,舍弃后面4位的精度,将12位的ADC退化为8位的ADC

6.转换时间

  • AD转换的步骤:采样,保持,量化,编码

  • STM32 ADC的总转换时间为:

    TCONV = 采样时间 + 12.5个ADC周期

  • 例如:当ADCCLK=14MHz,采样时间为1.5个ADC周期

    TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs

量化:ADC逐次比较的过程,位数越多时间越长,

采样时间:采样保持花费的时间,采样时间越长,越能避免一些毛刺信号的干扰

12.5个ADC周期:量化编码花费的时间,因为是12位的ADC,所以需要花费12个周期

ADC周期:就是从RCC分频过来的ADCCLK

14MHz:最大,最快的转换速度

7.校准(了解)

固定过程,了解即可

  • ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差
  • 建议在每次上电后执行一次校准
  • 启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期

8.硬件电路

硬件电路

9.相关函数说明

RCC的函数

void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);
  1. void RCC_ADCCLKConfig(uint32_t RCC_PCLK2);配置ADCCLK预分频器,可以对APB2的72MHz时钟选择2、4、6、8分频,输入到ADCCLK

ADC的函数

void ADC_DeInit(ADC_TypeDef* ADCx);
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);
void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);
  1. void ADC_DeInit(ADC_TypeDef* ADCx);恢复缺省配置
  2. void **ADC_Init (ADC_TypeDef ADCx, ADC_InitTypeDef ADC_InitStruct);初始化
  3. void ADC_StructInit(ADC_InitTypeDef* ADC_InitStruct);结构体初始化
  4. void ADC_Cmd(ADC_TypeDef* ADCx, FunctionalState NewState);给ADC上电的,就是开关控制
  5. void ADC_DMACmd(ADC_TypeDef* ADCx, FunctionalState NewState);用于开启DMA输出信号,使用DMA转运数据,就得调用这个函数
  6. void ADC_ITConfig(ADC_TypeDef* ADCx, uint16_t ADC_IT, FunctionalState NewState);中断输出控制,控制某个中断是否能通往NVIC

控制校准的函数

void ADC_ResetCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);
void ADC_StartCalibration(ADC_TypeDef* ADCx);
FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);
  1. void ADC_ResetCalibration(ADC_TypeDef* ADCx);复位校准
  2. FlagStatus ADC_GetResetCalibrationStatus(ADC_TypeDef* ADCx);获取复位校准状态
  3. void ADC_StartCalibration(ADC_TypeDef* ADCx);开始校准
  4. FlagStatus ADC_GetCalibrationStatus(ADC_TypeDef* ADCx);获取开始校准状态

在ADC初始化后依次调用即可

软件触发的函数

void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);//一般不会用到
  1. void ADC_SoftwareStartConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);用于软件触发的函数,设置SWSTART为1
  2. FlagStatus ADC_GetSoftwareStartConvStatus(ADC_TypeDef* ADCx);返回SWSTART的状态,与转换是否结束无关

获取标志位状态

FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
  1. FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);参数给EOC的标志位判断EOC标志位是不是置1

如何判断转换是否结束:

调用ADC_GetFlagStatus函数获取标志位状态,判断EOC标志位是不是置1了,如果转换结束,EOC标志位置1,然后调用这个函数判断标志位

配置间断模式

void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);
void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
  1. void ADC_DiscModeChannelCountConfig(ADC_TypeDef* ADCx, uint8_t Number);每隔几个通道间断一次
  2. void ADC_DiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);是不是启用间断模式

ADC规则组通道配置

void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
  1. void ADC_RegularChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);给序列的每个位置填写指定通道,参数1ADCx,参数2ADC_Channel你想指定的通道,参数三Rank:序列几的位置(规则器中的序列),参数四SampleTime指定通道的采样时间(数值小的转换快,数值大的稳定)
void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
  1. void ADC_ExternalTrigConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);ADC外部触发转换控制,就是是否允许外部触发转换

ADC获取转换值

uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);
uint32_t ADC_GetDualModeConversionValue(void);
  1. uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx);就是获取AD转换的数据寄存器,读取转换结果就使用该函数
  2. uint32_t ADC_GetDualModeConversionValue(void);ADC获取双模式转换值,双ADC模式读取转换结果的函数

以上所有函数都是对ADC基本功能和规则组的配置

ADC注入组的配置(了解)

void ADC_AutoInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_InjectedDiscModeCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_ExternalTrigInjectedConvConfig(ADC_TypeDef* ADCx, uint32_t ADC_ExternalTrigInjecConv);
void ADC_ExternalTrigInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
void ADC_SoftwareStartInjectedConvCmd(ADC_TypeDef* ADCx, FunctionalState NewState);
FlagStatus ADC_GetSoftwareStartInjectedConvCmdStatus(ADC_TypeDef* ADCx);
void ADC_InjectedChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel, uint8_t Rank, uint8_t ADC_SampleTime);
void ADC_InjectedSequencerLengthConfig(ADC_TypeDef* ADCx, uint8_t Length);
void ADC_SetInjectedOffset(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel, uint16_t Offset);
uint16_t ADC_GetInjectedConversionValue(ADC_TypeDef* ADCx, uint8_t ADC_InjectedChannel);

模拟看门狗的配置

void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);
void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold);
void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);
  1. void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx, uint32_t ADC_AnalogWatchdog);是否启动模拟看门狗
  2. void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx, uint16_t HighThreshold, uint16_t LowThreshold);配置高低阈值
  3. voidADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx, uint8_t ADC_Channel);配置看门的通道

ADC温度传感器,内部电压控制

void ADC_TempSensorVrefintCmd(FunctionalState NewState);
  1. void ADC_TempSensorVrefintCmd(FunctionalState NewState);用于开启内部的两个通道的,不开启将读不到正确结果

标志位相关

FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);
ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);
void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);
  1. FlagStatus ADC_GetFlagStatus(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);获取标志位状态
  2. void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG);清楚标志位
  3. ITStatus ADC_GetITStatus(ADC_TypeDef* ADCx, uint16_t ADC_IT);获取中断状态
  4. void ADC_ClearITPendingBit(ADC_TypeDef* ADCx, uint16_t ADC_IT);清除中断挂起位

9.实操图

实操图

10.AD单通道

10.1接线图

单通道

根据引脚定义表,PA0到PB1这10个引脚是ADC的10个通道,其他的引脚不是ADC引脚,不能接模拟电压

10.2代码编写

10.2.1主程序main.c
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "KEY.h"
#include "OLED.h"
//#include "OLED_Font.h"
#include "AD.h"uint16_t AD_Value;
float Voltage;int main(void){OLED_Init();AD_Init();OLED_ShowString(1,1,"ADValue:");OLED_ShowString(2,1,"Voltage:0.00V");while(1){AD_Value = ADC_GetValue();Voltage = (float)AD_Value/4095*3.3;OLED_ShowNum(1,9,AD_Value,4);//ADC值为整数,直接除不准确,所以需要强制类型转换,虽然还是有偏差OLED_ShowNum(2,9,Voltage,1);//显示整数部分OLED_ShowNum(2,11,(uint16_t)(Voltage*100)%100,2);//显示小数部分Delay_ms(100);}
}
10.2.2函数定义AD.c
#include "stm32f10x.h"                  // Device headervoid AD_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启ADC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//配置ADCCLKRCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADCCLK=72MHz/6=12MHz//GPIO初始化GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//防止干扰模拟电压GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_Init(GPIOA, &GPIO_InitStructure);//配置规则组输入通道(ADC通道,通道,序列,采样时间参数)ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_55Cycles5);//这里的ADCCLK的采样时间就是55.5个ADCCLK周期//ADC初始化ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;//连续转换模式,选择连续或单次转换ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//数据对齐ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//外部触发转换选择,对应框图的左下角,None不使用外部触发,使用软件触发ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//模式选择:独立模式ADC_InitStructure.ADC_NbrOfChannel = 1;//通道数目,一共扫描几个通道ADC_InitStructure.ADC_ScanConvMode = DISABLE;//扫描转换模式ADC_Init(ADC1,&ADC_InitStructure);ADC_Cmd(ADC1,ENABLE);//校准ADC_ResetCalibration(ADC1);//复位校准while(ADC_GetResetCalibrationStatus(ADC1) == SET);//复位完成后系统会自动置为0ADC_StartCalibration(ADC1);//开始校准while(ADC_GetCalibrationStatus(ADC1)==SET);}//获取ADC值
uint16_t ADC_GetValue(void){ADC_SoftwareStartConvCmd(ADC1,ENABLE);//软件触发获取ADC值的函数//获取标志位状态while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);//等待时间:采样周期55.5,转换周期固定为12.5,55.5+12.5=68,76/6=12(6分频),(1/12)*68=5.6usreturn ADC_GetConversionValue(ADC1);
}

PCLK2就是APB2时钟的意思

AIN模式下,GPIO口是无效的,断开GPIO,防止GPIO口的输入输出对模拟电压造成干扰

10.2.3函数声明AD.h
#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t ADC_GetValue(void);#endif

11.AD多通道

11.1接线图

多通道

11.2代码编写

11.2.1主程序main.c
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "KEY.h"
#include "OLED.h"
//#include "OLED_Font.h"
#include "AD.h"uint8_t AD0;
uint8_t AD1;
uint8_t AD2;
uint8_t AD3;int main(void){OLED_Init();AD_Init();OLED_ShowString(1,1,"AD0:");OLED_ShowString(2,1,"AD1:");OLED_ShowString(3,1,"AD2:");OLED_ShowString(4,1,"AD3:");while(1){AD0 = ADC_GetValue(ADC_Channel_0);AD1 = ADC_GetValue(ADC_Channel_1);AD2 = ADC_GetValue(ADC_Channel_2);AD3 = ADC_GetValue(ADC_Channel_3);OLED_ShowNum(1,5,AD0,4);OLED_ShowNum(2,5,AD1,4);OLED_ShowNum(3,5,AD2,4);OLED_ShowNum(4,5,AD3,4);Delay_ms(100);}
}
11.2.2函数定义AD.c

主要是在获取AD值时对通道进行修改,实现动态单通道获取多个通道

#include "stm32f10x.h"                  // Device headervoid AD_Init(void){RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启ADC时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);//配置ADCCLKRCC_ADCCLKConfig(RCC_PCLK2_Div6);//ADCCLK=72MHz/6=12MHz//GPIO初始化GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_Init(GPIOA, &GPIO_InitStructure);//ADC初始化ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_ContinuousConvMode =ENABLE;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;ADC_InitStructure.ADC_NbrOfChannel = 1;ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_Init(ADC1,&ADC_InitStructure);ADC_Cmd(ADC1,ENABLE);//校准ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1) == SET);ADC_StartCalibration(ADC1);while(ADC_GetCalibrationStatus(ADC1)==SET);}//获取ADC值
uint16_t ADC_GetValue(uint8_t ADC_Channel){//每次都重新指定通道,来实现多通道ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_55Cycles5);//使用参数来修改通道ADC_SoftwareStartConvCmd(ADC1,ENABLE);//获取标志位状态while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);return ADC_GetConversionValue(ADC1);
}
11.2.3函数声明AD.h
#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t ADC_GetValue(uint8_t ADC_Channel);#endif

n.实现步骤

n.1ADC配置的步骤

  1. 开启RCC时钟,包括ADC和GPIO的时钟,另外。ADCCLK的分频器时钟
  2. 配置GPIO,把需要的GPIO配置成模拟输入的模式
  3. 选择规则组的输入通道
  4. 配置多路开关,把左边的通道接入右边的规则组列表里
  5. 配置ADC转换器
  6. 开关控制,调用ADC_Cmd函数,开启ADC

n.2校准的4个步骤

调用4个函数即可

  1. 复位校准
  2. 等待校准完成
  3. 开始校准
  4. 等待校准完成
    e(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);
    return ADC_GetConversionValue(ADC1);
    }

#### 11.2.3函数声明AD.h```c
#ifndef __AD_H
#define __AD_Hvoid AD_Init(void);
uint16_t ADC_GetValue(uint8_t ADC_Channel);#endif

n.实现步骤

n.1ADC配置的步骤

  1. 开启RCC时钟,包括ADC和GPIO的时钟,另外。ADCCLK的分频器时钟
  2. 配置GPIO,把需要的GPIO配置成模拟输入的模式
  3. 选择规则组的输入通道
  4. 配置多路开关,把左边的通道接入右边的规则组列表里
  5. 配置ADC转换器
  6. 开关控制,调用ADC_Cmd函数,开启ADC

n.2校准的4个步骤

调用4个函数即可

  1. 复位校准
  2. 等待校准完成
  3. 开始校准
  4. 等待校准完

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek在FPGA/IC开发中的创新应用与未来潜力

随着人工智能技术的飞速发展,以DeepSeek为代表的大语言模型(LLM)正在逐步渗透到传统硬件开发领域。在FPGA(现场可编程门阵列)和IC(集成电路)开发这一技术密集型行业中,DeepSeek凭借其…

【Elasticsearch】nested聚合

在 Elasticsearch 中,嵌套聚合(nestedaggregation)的语法形式用于对嵌套字段(nestedfields)进行聚合操作。嵌套字段是 Elasticsearch 中的一种特殊字段类型,用于存储数组中的对象,这些对象需要独…

【Uniapp-Vue3】创建DB schema数据表结构

右键uniCloud文件下的database文件,点击“新建DB schema”,选择模板,修改文件名,点击“创建” 创建完成后会出现对应的文件,进入该文件进行配置 对文件中的必填选项,用户权限,字段进行配置 其…

BFS算法篇——广度优先搜索,探索未知的旅程(上)

文章目录 前言一、BFS的思路二、BFS的C语言实现1. 图的表示2. BFS的实现 三、代码解析四、输出结果五、总结 前言 广度优先搜索(BFS)是一种广泛应用于图论中的算法,常用于寻找最短路径、图的遍历等问题。与深度优先搜索(DFS&…

蓝耘智算平台使用DeepSeek教程

目录 一.平台架构与技术特点 二、DeepSeek R1模型介绍与优势 DeepSeek R1 模型简介 DeepSeek R1 模型优势 三.蓝耘智算平台使用DeepSeek教程 展望未来 耘元生代智算云是蓝耘科技推出的一款智算云平台有着以下特点: 一.平台架构与技术特点 基于 Kubernetes 原…

1Panel应用推荐:WordPress开源博客软件和内容管理系统

1Panel(github.com/1Panel-dev/1Panel)是一款现代化、开源的Linux服务器运维管理面板,它致力于通过开源的方式,帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用,1Panel特别开通应用商店&am…

基于STM32设计的仓库环境监测与预警系统

目录 项目开发背景设计实现的功能项目硬件模块组成设计思路系统功能总结使用的模块的技术详情介绍总结 1. 项目开发背景 随着工业化和现代化的进程,尤其是在制造业、食品业、医药业等行业,仓库环境的监控和管理成为了至关重要的一环。尤其是在存储易腐…

PbootCMS 修改跳转提示,修改笑脸时间

在使用时,每次都提示这个: 修改方法: 修改跳转时间:找到 handle.php 文件编辑 ,调整 setTimeout 函数的时间参数。 修改提示文字:编辑 handle.php 文件,修改提示文字的内容。 隐藏提示页面&am…

Elasticsearch:向量搜索的快速介绍

作者:来自 Elastic Valentin Crettaz 本文是三篇系列文章中的第一篇,将深入探讨向量搜索(也称为语义搜索)的复杂性,以及它在 Elasticsearch 中的实现方式。 本文是三篇系列文章中的第一篇,将深入探讨向量搜…

kaggle视频行为分析1st and Future - Player Contact Detection

这次比赛的目标是检测美式橄榄球NFL比赛中球员经历的外部接触。您将使用视频和球员追踪数据来识别发生接触的时刻,以帮助提高球员的安全。两种接触,一种是人与人的,另一种是人与地面,不包括脚底和地面的,跟我之前做的这…

Sentinel的安装和做限流的使用

一、安装 Release v1.8.3 alibaba/Sentinel GitHubA powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件) - Release v1.8.3 alibaba/Sentinelhttps://github.com/alibaba/Senti…

“AI隐患识别系统,安全多了道“智能护盾”

家人们,在生活和工作里,咱们都知道安全那可是头等大事。不管是走在马路上,还是在工厂车间忙碌,又或是住在高楼大厦里,身边都可能藏着一些安全隐患。以前,发现这些隐患大多靠咱们的眼睛和经验,可…

基于DeepSeek API和VSCode的自动化网页生成流程

1.创建API key 访问官网DeepSeek ,点击API开放平台。 在开放平台界面左侧点击API keys,进入API keys管理界面,点击创建API key按钮创建API key,名称自定义。 2.下载并安装配置编辑器VSCode 官网Visual Studio Code - Code Editing…

SolidWorks教程P2.2【草图 | 第二节】——草图几何关系与编辑

草图几何关系包括:重合、中点、相切、平行、相等、共线、对称 草图编辑功能包括:裁剪实体、转换实体引用、等距实体 目录 1.草图几何关系 2.裁剪实体 3.转换实体引用 4.等距实体 补充知识:智能尺寸 1.草图几何关系 在之前的草图介绍里…

WARNING(ORCAP-1589): Net has two or more aliases - possible short?

参考链接:ORCAD报错ORCAP-1589-CSDN博客 现象: Capture CIS 使用PCB-DRC检查原理图,报错Net has two or more aliases - possible short? 错误原因: 一个网络有两个网络名称。 问题本质: 原理图管脚型号的设定问题…

nvm:node 版本管理器

一、先安装git Git 安装完成后执行 git --version查看版本号是否安装成功 二、安装nvm (参考链接:mac 安装nvm详细教程 - 简书) 官网(https://github.com/nvm-sh/nvm/blob/master/README.md)查看最新版本安装命令 …

动态规划——路径问题①

文章目录 62. 不同路径算法原理代码实现 63. 不同路径 II算法原理代码实现 LCR 166. 珠宝的最高价值算法原理代码实现 62. 不同路径 题目链接:62. 不同路径 算法原理 状态表示: dp[i,j]:以[i, j]位置为结尾,走到[i, j]位置有多少…

汽车智能座舱的技术演进与用户体验重构 —— 基于多模态交互与 AI 融合的范式创新

摘要: 汽车智能座舱作为人 - 车 - 环境交互的核心载体,正经历从功能驱动到体验驱动的范式变革。本文通过技术解构与用户行为分析,深入揭示智能座舱在异构计算、多模态感知、服务生态等维度的创新路径。研究表明,智能座舱的竞争焦…

SpringBoot3整合Swagger3时出现Type javax.servlet.http.HttpServletRequest not present错误

目录 错误详情 错误原因 解决方法 引入依赖 修改配置信息 创建文件 访问 错误详情 错误原因 SpringBoot3和Swagger3版本不匹配 解决方法 使用springdoc替代springfox&#xff0c;具体步骤如下&#xff1a; 引入依赖 在pom.xml文件中添加如下依赖&#xff1a; <…

ChatGPT提问技巧:行业热门应用提示词案例-文案写作

ChatGPT 作为强大的 AI 语言模型&#xff0c;已经成为文案写作的得力助手。但要让它写出真正符合你需求的文案&#xff0c;关键在于如何与它“沟通”&#xff0c;也就是如何设计提示词&#xff08;Prompt&#xff09;。以下是一些实用的提示词案例&#xff0c;帮助你解锁 ChatG…