0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第十四章 ADC(下篇)

W55MH32 来源:W55MH32 作者:W55MH32 2025-05-29 17:48 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

单芯片解决方案,开启全新体验——W55MH32 高性能以太网单片机

W55MH32是WIZnet重磅推出的高性能以太网单片机,它为用户带来前所未有的集成化体验。这颗芯片将强大的组件集于一身,具体来说,一颗W55MH32内置高性能Arm® Cortex-M3核心,其主频最高可达216MHz;配备1024KB FLASH与96KB SRAM,满足存储与数据处理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP协议栈、内置MAC以及PHY,拥有独立的32KB以太网收发缓存,可供8个独立硬件socket使用。如此配置,真正实现了All-in-One解决方案,为开发者提供极大便利。

在封装规格上,W55MH32 提供了两种选择:QFN68和QFN100。

W55MH32Q采用QFN68封装版本,尺寸为8x8mm,它拥有36个GPIO、3个ADC、12通道DMA、17个定时器、2个I2C、3个串口、2个SPI接口(其中1个带I2S接口复用)、1个CAN以及1个USB2.0。在保持与同系列其他版本一致的核心性能基础上,仅减少了部分GPIO以及SDIO接口,其他参数保持一致,性价比优势显著,尤其适合网关模组等对空间布局要求较高的场景。紧凑的尺寸和精简化外设配置,使其能够在有限空间内实现高效的网络连接与数据交互,成为物联网网关、边缘计算节点等紧凑型设备的理想选择。 同系列还有QFN100封装的W55MH32L版本,该版本拥有更丰富的外设资源,适用于需要多接口扩展的复杂工控场景,软件使用方法一致。更多信息和资料请进入http://www.w5500.com/网站或者私信获取。

此外,本W55MH32支持硬件加密算法单元,WIZnet还推出TOE+SSL应用,涵盖TCP SSL、HTTP SSL以及MQTT SSL等,为网络通信安全再添保障。

为助力开发者快速上手与深入开发,基于W55MH32Q这颗芯片,WIZnet精心打造了配套开发板。开发板集成WIZ-Link芯片,借助一根USB C口数据线,就能轻松实现调试、下载以及串口打印日志等功能。开发板将所有外设全部引出,拓展功能也大幅提升,便于开发者全面评估芯片性能。

若您想获取芯片和开发板的更多详细信息,包括产品特性、技术参数以及价格等,欢迎访问官方网页:http://www.w5500.com/,我们期待与您共同探索W55MH32的无限可能。

wKgZO2gbOfaAVPzkACJSygzv-rI600.png

第十四章 ADC(下篇)

1 例程设计

1.1 ADC_Double例程

这是一个基于 W55MH32 的 ADC(模拟 - 数字转换器)双模式测试例程。它的主要功能是配置串口、ADC 和 DMA,并且通过 ADC1 和 ADC2 同时对模拟信号进行采样,最后把采样结果通过串口打印出来。下面是对这个例程的设计分析:

1.系统初始化

⚪配置系统时钟、延时函数、串口、ADC 和 DMA。

⚪打印系统时钟频率信息。

2.ADC 双模式采样

⚪ADC1 和 ADC2 工作于规则同步模式,同时对通道 0 和通道 1 进行采样。

⚪转换结果通过 DMA 传输到内存缓冲区。

void ADC_Configuration(void)
{
    ADC_InitTypeDef  ADC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2, ENABLE);

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    RCC_ADCCLKConfig(RCC_PCLK2_Div8);
    ADC_DeInit(ADC1);
    ADC_DeInit(ADC2);

    // 配置为规则同步模式
    ADC_InitStructure.ADC_Mode               = ADC_Mode_RegSimult; 
    ADC_InitStructure.ADC_ScanConvMode       = DISABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;
    ADC_InitStructure.ADC_ExternalTrigConv   = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign          = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel       = 1;
    ADC_Init(ADC1, &ADC_InitStructure);
    ADC_Init(ADC2, &ADC_InitStructure);

    /* channel configuration */
    ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5);
    ADC_RegularChannelConfig(ADC2, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5);

    /* module enablement */
    ADC_Cmd(ADC1, ENABLE);
    ADC_Cmd(ADC2, ENABLE);

    /* adc calibration */
    ADC_ResetCalibration(ADC1);
    while (ADC_GetResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while (ADC_GetCalibrationStatus(ADC1));
    ADC_ResetCalibration(ADC2);
    while (ADC_GetResetCalibrationStatus(ADC2));
    ADC_StartCalibration(ADC2);
    while (ADC_GetCalibrationStatus(ADC2));

    DMA_Configuration();
}

3.数据处理与输出

⚪DMA 传输完成后触发中断,将 ADC 数字值转换为电压值并通过串口打印。

void DMA1_Channel1_IRQHandler(void)
{
    if (DMA_GetITStatus(DMA1_IT_TC1) != RESET)
    {
        DMA_ClearITPendingBit(DMA1_IT_TC1);
        DMA_ClearFlag(DMA1_FLAG_TC1);

        // 数据处理与输出
        printf("ADC1 Code Value = %d ,voltage value = %2.4fn", DAM_ADC_Value[0] & 0xFFFF,
               (float)VREF * (DAM_ADC_Value[0] & 0xFFFF) / 4095 / 1000);
        printf("ADC2 Code Value = %d ,voltage value = %2.4fn", (DAM_ADC_Value[0] >> 16) & 0xFFFF,
               (float)VREF * ((DAM_ADC_Value[0] >> 16) & 0xFFFF) / 4095 / 1000);
    }
}

1.2 ADC_Single例程

该例程是一个基于 W55MH32 微控制器的 ADC 单通道采样程序,主要功能是周期性采集模拟输入信号并通过串口输出 ADC 值及其对应的电压。以下是详细的工作流程总结:

1.时钟配置

⚪获取系统各时钟频率(SYSCLK/HCLK/PCLK/ADCCLK),并通过串口打印。

2.UART 配置

⚪初始化 USART1 为 115200 波特率,用于串口输出数据。

3.ADC 配置

⚪使能 ADC1 时钟,配置 PA6 为模拟输入模式。

⚪ADC 工作在独立模式,禁用连续转换,启用扫描模式(单通道时仅触发一次转换)。

⚪执行 ADC 校准以确保精度。

void ADC_Configuration(void)
{
    uint32_t         i;
    ADC_InitTypeDef  ADC_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能 ADC1 和 GPIOA 时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE);

    // 配置 PA6 为模拟输入模式
    GPIO_InitStructure.GPIO_Pin   = ADC_TEST_CHANNEL_PIN; // PA6
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // ADC 时钟配置(PCLK2 的 1/8)
    RCC_ADCCLKConfig(RCC_PCLK2_Div8);
    ADC_DeInit(ADC1); // 复位 ADC1

    // ADC 初始化配置
    ADC_InitStructure.ADC_Mode               = ADC_Mode_Independent; // 独立模式
    ADC_InitStructure.ADC_ScanConvMode       = ENABLE;               // 启用扫描模式(单通道时仅转换一次)
    ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;              // 禁用连续转换,需软件触发
    ADC_InitStructure.ADC_ExternalTrigConv   = ADC_ExternalTrigConv_None; // 软件触发
    ADC_InitStructure.ADC_DataAlign          = ADC_DataAlign_Right;  // 右对齐
    ADC_InitStructure.ADC_NbrOfChannel       = CONV_CHANNEL_NUM;     // 通道数(1)
    ADC_Init(ADC1, &ADC_InitStructure);

    // 配置 ADC 通道(通道 6,采样时间 239.5 周期)
    for (i = 0; i < CONV_CHANNEL_NUM; i++)
    {
        ADC_RegularChannelConfig(ADC1, ADC_CovChannel[i], i + 1, ADC_SampleTIME[i]);
    }

    // 启动 ADC 转换并使能 ADC
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);
    ADC_Cmd(ADC1, ENABLE);

    // ADC 校准
    ADC_ResetCalibration(ADC1);
    while (ADC_GetResetCalibrationStatus(ADC1));
    ADC_StartCalibration(ADC1);
    while (ADC_GetCalibrationStatus(ADC1));

    // 配置 DMA 传输
    DMA_Configuration();
}

4.DMA 配置

⚪设置 DMA1 通道 1 为循环模式,将 ADC 数据寄存器(ADC1->DR)的数据传输到内存数组DAM_ADC_Value。

⚪使能 DMA 传输完成中断(TC 中断),触发数据处理。

1.3 ADC_VrefintTemper例程

该例程是一个基于 W55MH32 的 ADC 多通道采样程序,主要用于同时采集内部温度传感器和 VREFINT(内部参考电压)的模拟信号,并通过串口输出测量结果。以下是其主要工作流程如下:

1.系统初始化

a.UART 配置:初始化 USART1 为 115200 波特率,用于串口输出。

b.ADC 配置:使能 ADC1 时钟,配置为独立模式,启用扫描模式(多通道依次转换)。

⚪配置通道 16(温度传感器)和通道 17(VREFINT),采样时间 239.5 周期。

⚪校准 ADC 并使能内部温度传感器和 VREFINT。

ADC_InitStructure.ADC_ScanConvMode = ENABLE; // 启用扫描模式,多通道依次转换
ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 禁用连续转换,需软件触发
ADC_TempSensorVrefintCmd(ENABLE); // 使能内部温度传感器和VREFINT

c.DMA 配置:设置 DMA1 通道 1 为循环模式,将 ADC 数据寄存器(ADC1->DR)的数据传输到内存数组DAM_ADC_Value。

⚪使能 DMA 传输完成中断(TC 中断)。

2.主循环逻辑

a.每秒调用ADC_SoftwareStartConvCmd(ADC1, ENABLE)触发 ADC 转换。

b.延时 1 秒后重复触发,实现周期性采样。

3.数据处理与输出

void DMA1_Channel1_IRQHandler(void)
{
    if (DMA_GetITStatus(DMA1_IT_TC1) != RESET) // 检查传输完成中断
    {
        DMA_ClearITPendingBit(DMA1_IT_TC1); // 清除中断标志
        DMA_ClearFlag(DMA1_FLAG_TC1);

        // 计算温度传感器和VREFINT的电压值(VREF=3.3V,ADC精度12位)
        float tempVoltage = (float)VREF * DAM_ADC_Value[0] / 4095 / 1000; // 温度传感器电压
        float vrefintVoltage = (float)VREF * DAM_ADC_Value[1] / 4095 / 1000; // VREFINT电压

        // 串口输出结果
        printf("Temperature Sensor AD Value: %d, Voltage: %.4f Vt", DAM_ADC_Value[0], tempVoltage);
        printf("VREFINT AD Value: %d, Voltage: %.4f Vn", DAM_ADC_Value[1], vrefintVoltage);
    }
}

a.DMA 中断处理:当 DMA 传输完成时,触发DMA1_Channel1_IRQHandler。

b.电压计算:根据公式电压 = VREF × ADC值 / 4095 / 1000 计算实际电压值(VREF=3.3V)。

c.串口打印:输出温度传感器和 VREFINT 的 ADC 值及电压值。

2 下载验证

2.1 ADC_Double例程

程序运行时,ADC1和ADC2以规则同步模式周期性采样两个模拟通道(PA0和PA1),转换结果通过DMA传输至内存。每次DMA传输完成后触发中断,在中断中计算并通过串口打印ADC1和ADC2的原始数值(12位)及对应的电压值(单位:V),显示间隔由主循环中的1秒延时控制。系统启动时会输出各时钟频率参数,随后每秒更新一次ADC数据。

wKgZO2gu9ZWAGGPDAACnMA80Ewo107.png

2.2 ADC_Single例程

程序运行时,系统首先输出各时钟频率参数,随后每秒触发一次ADC1通道6(PA6)的模拟信号采样。ADC转换结果通过DMA自动传输至内存,每次DMA传输完成后触发中断,在中断服务函数中计算并通过串口打印ADC原始值(12位)及对应的电压值(单位:V)。系统以1秒为间隔循环触发采样,实现周期性数据更新,最终在串口终端每秒显示一次ADC数据。

wKgZPGgu9ZWASvWRAACCK8LLy50261.png

2.3 ADC_VrefintTemper例程

程序运行时,系统首先输出各时钟频率参数,随后每秒触发一次ADC1通道16(内部温度传感器)和通道17(VREFINT)的模拟信号采样。ADC转换结果通过DMA自动传输至内存,每次DMA传输完成后触发中断,在中断服务函数中计算并通过串口打印两个通道的ADC原始值(12位)及对应的电压值(单位:V)。系统以1秒为间隔循环触发采样,实现周期性数据更新,最终在串口终端每秒显示一次内部温度传感器和VREFINT的测量结果。

wKgZO2gu9ZWAGGPDAACnMA80Ewo107.png

WIZnet 是一家无晶圆厂半导体公司,成立于 1998 年。产品包括互联网处理器 iMCU™,它采用 TOE(TCP/IP 卸载引擎)技术,基于独特的专利全硬连线 TCP/IP。iMCU™ 面向各种应用中的嵌入式互联网设备。

WIZnet 在全球拥有 70 多家分销商,在香港、韩国、美国设有办事处,提供技术支持和产品营销。

香港办事处管理的区域包括:澳大利亚、印度、土耳其、亚洲(韩国和日本除外)。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • adc
    adc
    +关注

    关注

    100

    文章

    7399

    浏览量

    553805
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    至芯科技之altera 系列FPGA教程 第十四篇 分配管脚

    至芯科技之altera 系列FPGA教程 第十四篇 分配管脚
    发表于 08-11 03:33

    视频详解:上海尤老师verilog入门到实战第十四

    上海尤老师verilog入门到实战第十四课——无线通信中的CIC插值滤波器; 百度云网盘链接后缀:/s/1i5Q9JDj, 加群讨论252520964,307510678
    发表于 10-09 11:10

    「正点原子Linux连载」第十四章蜂鸣器试验

    1)实验平台:正点原子Linux开发板2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南》关注官方微信号公众号,获取更多资料:正点原子第十四章蜂鸣器试验 前几章试验中的驱动LED灯亮灭属于
    发表于 12-21 12:05

    软件定义无线电手册,第十四

    软件定义无线电手册,第十四版。pentek公司出的资料。
    发表于 02-18 09:52

    第十四讲 555定时器

    第十四讲 555定时器 5.5.1 555定时器的电路结构及其功能 一、结构框图(图5.5.1 双极型)1.
    发表于 03-30 16:20 4409次阅读
    <b class='flag-5'>第十四</b>讲 555定时器

    模拟电路网络课件 第十四节:放大电路的频率响应

    模拟电路网络课件 第十四节:放大电路的频率响应 在实际应用中,电子电路所处理的信号,如语音信号、电视信号等都不是简单的单一频率信号,即是具有一
    发表于 09-17 10:16 4377次阅读
    模拟电路网络课件 <b class='flag-5'>第十四</b>节:放大电路的频率响应

    视频_高速放大器设计指南 第十四

    视频_高速放大器设计指南 第十四
    发表于 03-05 15:34 0次下载

    PinTech品致第十四届中国高校电力电子与电力传动学术年会

    PinTech品致探头邀您参加2020年10月30日至11月1日在成都金牛宾馆召开的第十四届中国高校电力电子与电力传动学术年会。
    的头像 发表于 10-28 14:36 2986次阅读

    易华录精彩亮相第十四届交博会探讨智慧交通新思路

    4月10日,第十四届中国道路交通安全产品博览会暨公安交警警用装备展(以下简称交博会)于厦门开幕。
    的头像 发表于 04-11 18:18 1408次阅读

    才茂亮相第十四届配电技术应用大会

    日前,第十四届配电技术应用大会在南京圆满落下帷幕。众多行业精英齐聚一堂,共谋现代智慧配电网的宏伟蓝图。
    的头像 发表于 08-23 09:16 1010次阅读

    【北京迅为】iTOP-i.MX6开发板使用手册第四部分固件编译第十四章非设备树Android4.4系统编译

    【北京迅为】iTOP-i.MX6开发板使用手册第四部分固件编译第十四章非设备树Android4.4系统编译
    的头像 发表于 09-12 15:43 1392次阅读
    【北京迅为】iTOP-i.MX6开发板使用手册第四部分固件编译<b class='flag-5'>第十四章</b>非设备树Android4.4系统编译

    第十四届芯原CEO论坛五大预测

    2025年1月19日,以“Chiplet的发展机遇”为主题的第十四届芯原CEO论坛在上海海鸥丽晶酒店举办。
    的头像 发表于 01-21 09:44 783次阅读

    千方科技亮相第十四届智能交通市场年会

    近日,在第十四届智能交通市场年会上,赛文网“中国智能交通最具影响力企业”评选结果揭晓。千方科技再次荣登城市智能交通、高速公路两大领域年度榜单,公司在数智交通领域的产品和服务持续得到行业的高度认可。
    的头像 发表于 03-07 13:03 745次阅读

    四维图新亮相第十四届智能交通市场年会

    3月5日-6日,由赛文交通网主办的第十四届(2025)智能交通市场年会在苏州举行,会上同期举行了第十四届智能交通最具影响力企业评选颁奖典礼。
    的头像 发表于 03-07 16:33 786次阅读

    慧尔视亮相第十四届智能交通市场年会

    2025年3月5-6日,由赛文交通网主办的第十四届(2025)智能交通市场年会在苏州成功召开。
    的头像 发表于 03-07 17:15 1112次阅读