【电机控制器】PY32F00BF15U6TR——ADC

【电机控制器】PY32F00BF15U6TR——ADC @TOC 前言 使用工具: 1.STLINK仿真器 提示:以下是本篇文章正文内容,下面案例可供参考 一、接线 VCC——3.3 GND——GND SWDIO——SWDIO SWCLK——SWCLK 二、芯片手册 三、原理图 四、代码 1.读取ADC值——PA7,ADC通道4 void Bsp_ADC_TempSensor_Init(void) { ADC_ChannelConfTypeDef sConfig; /* 使能 ADC 时钟 */ __HAL_RCC_ADC_CLK_ENABLE(); hadc.Instance = ADC1; /* 配置ADC时钟分频 */ hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV32; /* 配置采样为12位 */ hadc.Init.Resolution = ADC_RESOLUTION_12B; /* 数据右对齐 */ hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; /* 顺序扫描模式 */ hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; /* 单次转换 */ hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; /* 单次转换 */ hadc.Init.LowPowerAutoWait = DISABLE; /* 禁用自动延迟转换 */ hadc.Init.ContinuousConvMode = DISABLE; /* 禁用连续转换模式 */ hadc.Init.DiscontinuousConvMode = DISABLE; /* 禁用不连续模式 */ hadc.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_TRGO; /* 外部触发转换 */ hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; /* 上升沿触发 */ hadc.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; /* 在溢出的情况下,DR寄存器被最后一次转换结果覆盖 */ hadc.Init.SamplingTimeCommon = ADC_SAMPLETIME_41CYCLES_5; /* 通道采样时间为41.5 ADC时钟周期 */ HAL_ADC_Init(&hadc); sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; sConfig.Channel = ADC_CHANNEL_4; HAL_ADC_ConfigChannel(&hadc, &sConfig); HAL_ADCEx_Calibration_Start(&hadc); } 2.读取ADC内部温度 这里手册错了,实测结果应该是ADC通道8 void Bsp_ADC_TempSensor_Init(void) { ADC_ChannelConfTypeDef sConfig; /* ADC1 */ AdcHandle.Instance = ADC1; /* 配置ADC时钟分频 */ AdcHandle.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV32; /* 12-bit 分辨率 */ AdcHandle.Init.Resolution = ADC_RESOLUTION_12B; /* 转换数据的右对齐 */ AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT; /* 配置扫描模式 */ AdcHandle.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; /* 转换完成标志 */ AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV; /* 自动延迟转换功能禁用 */ AdcHandle.Init.LowPowerAutoWait = DISABLE; /* 连续转换模式禁用 */ AdcHandle.Init.ContinuousConvMode = DISABLE; /* 禁用连续转换模式 */ AdcHandle.Init.DiscontinuousConvMode = DISABLE; /* 软件触发 */ AdcHandle.Init.ExternalTrigConv = ADC_SOFTWARE_START; /* 选择软件触发,该参数无需配置 */ AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; /* 在溢出的情况下,DR寄存器被最后一次转换结果覆盖 */ AdcHandle.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; /* 通道采样时间为41.5 ADC时钟周期 */ AdcHandle.Init.SamplingTimeCommon = ADC_SAMPLETIME_41CYCLES_5; /* ADC 初始化 */ HAL_ADC_Init(&AdcHandle); /* 设置ADC通道顺序等级 */ sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; /* ADC通道选择 */ sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; /* 配置ADC通道 */ HAL_ADC_ConfigChannel(&AdcHandle, &sConfig); /* ADC calibration */ HAL_ADCEx_Calibration_Start(&AdcHandle); } 五、实验 1.读取ADC值 电源电压供给PA7,2.9V,ADC读取2.91V 2.读取ADC内部温度 六、参考资料 PY32F002BF15U6TR芯片手册 总结 本文仅仅简单介绍了【电机控制器】PY32F00BF15U6TR——ADC,评论区欢迎讨论。

Mar 28, 2025 - 04:15
 0
【电机控制器】PY32F00BF15U6TR——ADC

【电机控制器】PY32F00BF15U6TR——ADC

@TOC

前言

使用工具:
1.STLINK仿真器

提示:以下是本篇文章正文内容,下面案例可供参考

一、接线

VCC——3.3
GND——GND
SWDIO——SWDIO
SWCLK——SWCLK

二、芯片手册

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

三、原理图

在这里插入图片描述

四、代码

1.读取ADC值——PA7,ADC通道4

void Bsp_ADC_TempSensor_Init(void)
{
    ADC_ChannelConfTypeDef        sConfig;

    /* 使能 ADC 时钟 */
    __HAL_RCC_ADC_CLK_ENABLE();                                                

    hadc.Instance = ADC1;
    /* 配置ADC时钟分频 */
    hadc.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV32;               
    /* 配置采样为12位 */
    hadc.Init.Resolution            = ADC_RESOLUTION_12B;                     
    /* 数据右对齐 */
    hadc.Init.DataAlign             = ADC_DATAALIGN_RIGHT;                     
    /* 顺序扫描模式 */
    hadc.Init.ScanConvMode          = ADC_SCAN_DIRECTION_FORWARD;              
    /* 单次转换 */
    hadc.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;                     
    /* 单次转换 */
    hadc.Init.LowPowerAutoWait      = DISABLE;                                 
    /* 禁用自动延迟转换 */
    hadc.Init.ContinuousConvMode    = DISABLE;                                 
    /* 禁用连续转换模式 */
    hadc.Init.DiscontinuousConvMode = DISABLE;                                 
    /* 禁用不连续模式 */
    hadc.Init.ExternalTrigConv      = ADC_EXTERNALTRIGCONV_T1_TRGO;            
    /* 外部触发转换 */
    hadc.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_RISING;         
    /* 上升沿触发 */
    hadc.Init.Overrun               = ADC_OVR_DATA_OVERWRITTEN;                
    /* 在溢出的情况下,DR寄存器被最后一次转换结果覆盖 */
    hadc.Init.SamplingTimeCommon    = ADC_SAMPLETIME_41CYCLES_5;               
    /* 通道采样时间为41.5 ADC时钟周期 */
    HAL_ADC_Init(&hadc);

    sConfig.Rank         = ADC_RANK_CHANNEL_NUMBER;                             
    sConfig.Channel      = ADC_CHANNEL_4;                                      
    HAL_ADC_ConfigChannel(&hadc, &sConfig);

    HAL_ADCEx_Calibration_Start(&hadc);
}

2.读取ADC内部温度

在这里插入图片描述
这里手册错了,实测结果应该是ADC通道8

void Bsp_ADC_TempSensor_Init(void)
{
    ADC_ChannelConfTypeDef        sConfig;

    /* ADC1 */
    AdcHandle.Instance = ADC1;     
    /* 配置ADC时钟分频 */
    AdcHandle.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV32;  
    /* 12-bit 分辨率 */
    AdcHandle.Init.Resolution            = ADC_RESOLUTION_12B;     
    /* 转换数据的右对齐 */    
    AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;   
    /* 配置扫描模式 */    
    AdcHandle.Init.ScanConvMode          = ADC_SCAN_DIRECTION_FORWARD;     
    /* 转换完成标志 */    
    AdcHandle.Init.EOCSelection          = ADC_EOC_SINGLE_CONV;                     
    /* 自动延迟转换功能禁用 */
    AdcHandle.Init.LowPowerAutoWait      = DISABLE;                    
    /* 连续转换模式禁用 */
    AdcHandle.Init.ContinuousConvMode    = DISABLE;
    /* 禁用连续转换模式 */    
    AdcHandle.Init.DiscontinuousConvMode = DISABLE;     
    /* 软件触发 */    
    AdcHandle.Init.ExternalTrigConv      = ADC_SOFTWARE_START;   
    /* 选择软件触发,该参数无需配置 */    
    AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;
    /* 在溢出的情况下,DR寄存器被最后一次转换结果覆盖 */    
    AdcHandle.Init.Overrun               = ADC_OVR_DATA_OVERWRITTEN;    
    /* 通道采样时间为41.5 ADC时钟周期 */    
    AdcHandle.Init.SamplingTimeCommon    = ADC_SAMPLETIME_41CYCLES_5;               
    /* ADC 初始化 */
    HAL_ADC_Init(&AdcHandle);
    /* 设置ADC通道顺序等级 */
    sConfig.Rank         = ADC_RANK_CHANNEL_NUMBER; 
    /* ADC通道选择 */    
    sConfig.Channel      = ADC_CHANNEL_TEMPSENSOR;                                  
    /* 配置ADC通道 */
    HAL_ADC_ConfigChannel(&AdcHandle, &sConfig);

    /* ADC calibration */
    HAL_ADCEx_Calibration_Start(&AdcHandle); 
}

五、实验

1.读取ADC值

电源电压供给PA7,2.9V,ADC读取2.91V
在这里插入图片描述

请添加图片描述

2.读取ADC内部温度

在这里插入图片描述

六、参考资料

PY32F002BF15U6TR芯片手册

总结

本文仅仅简单介绍了【电机控制器】PY32F00BF15U6TR——ADC,评论区欢迎讨论。