ImageVerifierCode 换一换
格式:DOCX , 页数:4 ,大小:14.68KB ,
资源ID:518541      下载积分:14 积分
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝扫码支付 微信扫码支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wnwk.com/docdown/518541.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(2023年AD转换器实验.docx)为本站会员(la****1)主动上传,蜗牛文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蜗牛文库(发送邮件至admin@wnwk.com或直接QQ联系客服),我们立即给予删除!

2023年AD转换器实验.docx

1、天道酬勤齐 鲁 理 工 学 院 实 验 报 告 课程名称:微型计算机控制技术 2023.11.05 地点:D203 班级:2023级机制3班 姓名:杨帆 学号:171031010304 实验工程名称:A/D 转换器实验 实验指导教师:赵保华 实验成绩评定:一、 实验目的 通过实验掌握 STM32 A/D 转换器的功能与作用。掌握 STM32A/D 转换器的配置与使用。二、 实验设备 硬件:信盈达STM32 实验平台,STlink 仿真器套件,PC 机,串口连接线;软件:KEIL for ARMMDK集成开发环境,串口调试助手,Windows 7/8/10/XP。三、 实验内容 利用 ADC 的

2、第 1 通道对信盈达Cotex-M3 实验平台上单圈电位器的电压值作 AD 转换,采用连续转换模式。ADC 转换的结果,通过串口发送到PC显示。四、 实验原理 五、 软件程序设计 1、程序完成以下工作:移植:1移植内核定时器实现精确延时。sys_tick.c sys_tick.h 配置ADC 配置 GPIO 口,将 PA1配置为 ADC 的第 1 采样通道;设置 ADC,将 ADC_IN1 设置为连续转换模式;配置串口及相关发送功能;利用串口发送 AD 转换结果。3. 观察实验结果 将VER+和VDDS,VERF和GND用跳线帽连起来,旋转电位器,即 AD 输入旋钮,可以看到串口输出数值不断变

3、化, 3.6.7 实验参考程序 main.c参考程序:#include “stm32f10x.h“ #include “stdio.h“ #include “uart.h“ #include “adc.h“ #include “sys_tick.h“ #include “NVIC.h“ int main(void) NVIC_Config(); /NVIC中断管理初始化 SysTickConfig(); /滴答时钟初始化,实现精确延时 UART1_Init(); /串口1初始化 Adc_Init(); /ADC初始化 while(1) Adc_test(); /ADC测试函数,打印滑动变阻器的

4、电压值 Delay_ms(2000);/精确延时2000ms adc.c参考程序:#include “stm32f10x.h“ #include “adc.h“ #include “sys_tick.h“ #include “stdio.h“ /adc的初始化 void Adc_Init(void) GPIO_InitTypeDef GPIO_InitStructure; ADC_InitTypeDef ADC_InitStructure; /开启GPIO口和ADC的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_

5、ADC1,ENABLE); /给ADC采样分频 72/8 = 9 RCC_ADCCLKConfig(RCC_PCLK2_Div8); /设置ADC输入管脚PA1 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模拟输入引脚 GPIO_Init(GPIOA,&GPIO_InitStructure); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;/ADC独立模式 ADC_InitStructure.ADC_Conti

6、nuousConvMode = DISABLE;/单次循环模式还是连续循环模式 DISABLE单次循环 ADC_InitStructure.ADC_ScanConvMode = DISABLE; /多通道还是单通道 DISABLE单通道 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;/有事件触发还是软件触发 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;/数据右对齐 - 低12位 ADC_InitStructure.ADC_NbrOfChanne

7、l = 1;/顺序转换的规那么组的通道数目 ADC_Init(ADC1,&ADC_InitStructure); /给相关存放器赋值 ADC_Cmd(ADC1,ENABLE); /开启ADC1 ADC_ResetCalibration(ADC1); /使用复位校准,就是初始化校准存放器 while(ADC_GetResetCalibrationStatus(ADC1) = SET); ADC_StartCalibration(ADC1); /A/D校准 while(ADC_GetCalibrationStatus(ADC1) = SET); /得到ADC值 void Get_adcvalue(

8、u8 channel,u16 xvalue) /设置指定ADC的规那么组通道,一个序列,采样时间 ADC_RegularChannelConfig(ADC1,channel,1,ADC_SampleTime_239Cycles5); /软件启动ADC转换 ADC_SoftwareStartConvCmd(ADC1,ENABLE); /等待ADC转换完成 while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC) != SET); xvalue = ADC_GetConversionValue(ADC1); /x 测试读取外部滑动变阻器的电压值 x/ void Adc_

9、test(void) u16 temp = 0; float ad_value; Get_adcvalue(1,&temp);/获取通道1的值 / printf(“%#xrn“,temp); ad_value = (3.3x(float)temp)/4096.0;/转换得到实际的电压值 printf(“%frn“,ad_value); Delay_ms(500); adc.h参考程序:#ifndef _ADC_H_ #define _ADC_H_ #include “stm32f10x.h“ void Adc_Init(void); void Get_adcvalue(u8 channel,u

10、16 xvalue); void Adc_test(void); #endif sys_tick.c参考程序 #include “stm32f10x.h“ /#include “core_cm3.h“ /#include “stdio.h“ /#include “stdlib.h“ /#include “uart.h“ /#include “adc.h“ #include “sys_tick.h“ /#include “NVIC.h“ /x static _INLINE uint32_t SysTick_Config(uint32_t ticks); /用来装载定时的时间值 void SysT

11、ick_CLKSourceConfig(uint32_t SysTick_CLKSource); /用来设置滴答时钟的时钟频率 目的:用滴答时钟形成一个1us的定时器;1us = Tx(1/f);T:要装载的数;f:滴答时钟运行的时钟频率;1s = 1000ms; 1ms = 1000us; 1s = 1000000us; 1M = 1000000; 1/1M = 1us; t= 1/72M = 1/72us 1us = 72 x t; SystemCoreClock/1000000 - 1us SystemCoreClock/100000 - 10us SystemCoreClock/100

12、00 - 100us SystemCoreClock/1000 - 1ms SysTick-CTRL |= SysTick_CTRL_ENABLE_Msk;/翻开滴答时钟 SysTick-CTRL &= SysTick_CTRL_ENABLE_Msk;/关闭滴答时钟 x/ /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 函数名:SysTickConfig 形参:无 返回值:无 函数功能:滴答时钟初始化 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ void SysTickC

13、onfig(void) /配置为72Mhz时钟 /t= 1/72M = 1/72us; / SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); if(SysTick_Config(SystemCoreClock/1000000) = 1)/赋初值 /72 while(1); /关闭滴答时钟 SysTick-CTRL &= SysTick_CTRL_ENABLE_Msk; /SysTick-CTRL &= 0x01;/ 0xfe 1111 1110 /SysTick-CTRL |= 0x01; /给某些位写0,用按位与&/给某些位写1,用按位或| /

14、xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 函数名:Delay_us 形参:time代表要延时的时间单位us返回值:无 函数功能:精确us延时函数 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ u32 TimeDelay = 0; void Delay_us(u32 time) TimeDelay = time; SysTick-CTRL |= SysTick_CTRL_ENABLE_Msk; while(TimeDelay !=0); SysTick-CTRL &= S

15、ysTick_CTRL_ENABLE_Msk; /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 函数名:Delay_ms 形参:time代表要延时的时间单位ms返回值:无 函数功能:精确ms延时函数 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ void Delay_ms(u32 time) TimeDelay = timex1000; SysTick-CTRL |= SysTick_CTRL_ENABLE_Msk; while(TimeDelay !=0); SysTic

16、k-CTRL &= SysTick_CTRL_ENABLE_Msk; /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 函数名:SysTick_Handler 形参:无 返回值:无 函数功能:滴答时钟中断效劳函数 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ void SysTick_Handler(void) if(TimeDelay 0) TimeDelay-; sys_tick.h参考程序 #ifndef _SYS_TICK_H_ #define _SYS_TICK_H_ /#include “includes.h“ #include “stm32f10x.h“

copyright@ 2008-2023 wnwk.com网站版权所有

经营许可证编号:浙ICP备2024059924号-2