分享
2023年AD转换器实验.doc
下载文档

ID:518550

大小:12KB

页数:4页

格式:DOC

时间:2023-04-08

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2023 AD 转换器 实验
齐 鲁 理 工 学 院 实 验 报 告 课程名称:微型计算机控制技术 2020.11.05 地点:D203 班级:2017 级机制 3 班 姓名:杨帆 学号:171031010304 实验项目名称:A/D 转换器实验 实验指导教师:赵保华 实验成绩评定:一、实验目的 通过实验掌握 STM32 A/D 转换器的功能与作用。掌握 STM32A/D 转换器的配置与使用。二、实验设备 硬件:信盈达 STM32 实验平台,STlink 仿真器套件,PC 机,串口连接线;软件:KEIL for ARM(MDK)集成开发环境,串口调试助手,Windows 7/8/10/XP。三、实验内容 利用 ADC 的第 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.6.7 实验参考程序 main.c 参考程序:#include“stm32f10 x.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 测试函数,打印滑动变阻器的电压值 Delay_ms(2000);/精确延时 2000ms adc.c参考程序:#include“stm32f10 x.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_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_ContinuousConvMode=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_NbrOfChannel=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(u8 channel,u16*value)/设置指定 ADC 的规则组通道,一个序列,采样时间 ADC_RegularChannelConfig(ADC1,channel,1,ADC_SampleTime_239Cycles5);/软件启动 ADC 转换 ADC_SoftwareStartConvCmd(ADC1,ENABLE);/等待 ADC转换完成 while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)!=SET);*value=ADC_GetConversionValue(ADC1);/*测试读取外部滑动变阻器的电压值*/void Adc_test(void)u16 temp=0;float ad_value;Get_adcvalue(1,&temp);/获取通道 1 的值/printf(“%#xrn“,temp);ad_value=(3.3*(float)temp)/4096.0;/转换得到实际的电压值 printf(“%frn“,ad_value);Delay_ms(500);adc.h 参考程序:#ifndef _ADC_H_#define _ADC_H_#include“stm32f10 x.h“void Adc_Init(void);void Get_adcvalue(u8 channel,u16*value);void Adc_test(void);#endif sys_tick.c 参考程序#include“stm32f10 x.h“/#include“core_cm3.h“/#include“stdio.h“/#include“stdlib.h“/#include“uart.h“/#include“adc.h“#include“sys_tick.h“/#include“NVIC.h“/*static _INLINE uint32_t SysTick_Config(uint32_t ticks);/用来装载定时的时间值 void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource);/用来设置滴答时钟的时钟频率 目的:用滴答时钟形成一个 1us 的定时器;1us=T*(1/f);T:要装载的数;f:滴答时钟运行的时钟频率;1s=1000ms;1ms=1000us;1s=1000000us;1M=1000000;1/1M=1us;t=1/72M=1/72us 1us=72*t;SystemCoreClock/1000000-1us SystemCoreClock/100000-10us SystemCoreClock/10000-100us SystemCoreClock/1000-1ms SysTick-CTRL|=SysTick_CTRL_ENABLE_Msk;/打开滴答时钟 SysTick-CTRL&=SysTick_CTRL_ENABLE_Msk;/关闭滴答时钟*/*函数名:SysTickConfig 形参:无 返回值:无 函数功能:滴答时钟初始化*/void SysTickConfig(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&=0 x01;/0 xfe 1111 1110/SysTick-CTRL|=0 x01;/给某些位写 0,用按位与(&)/给某些位写 1,用按位或(|)/*函数名:Delay_us 形参:time 代表要延时的时间(单位 us)返回值:无 函数功能:精确 us 延时函数*/u32 TimeDelay=0;void Delay_us(u32 time)TimeDelay=time;SysTick-CTRL|=SysTick_CTRL_ENABLE_Msk;while(TimeDelay!=0);SysTick-CTRL&=SysTick_CTRL_ENABLE_Msk;/*函数名:Delay_ms 形参:time 代表要延时的时间(单位 ms)返回值:无 函数功能:精确 ms 延时函数*/void Delay_ms(u32 time)TimeDelay=time*1000;SysTick-CTRL|=SysTick_CTRL_ENABLE_Msk;while(TimeDelay!=0);SysTick-CTRL&=SysTick_CTRL_ENABLE_Msk;/*函数名:SysTick_Handler 形参:无 返回值:无 函数功能:滴答时钟中断服务函数*/void SysTick_Handler(void)if(TimeDelay 0)TimeDelay-;sys_tick.h参考程序#ifndef _SYS_TICK_H_#define _SYS_TICK_H_/#include“includes.h“#include“stm32f10 x.h“void SysTickConfig(void);void Delay_us(u32 time);void Delay_ms(u32 time);#endif Uart.h 参考程序#ifndef _UART_H_#define _UART_H_ void UART1_Init(void);/串口 1初始化 void USART1_Echo(void);/串口 1 回显函数 void Show_Logo(void);/在终端上显示 LOGO#endif NVIC.c#include“NVIC.h“#include“stm32f10 x.h“/#include“core_cm3.h“/*函数名:NVIC_Config 形参:无 返回值:无 函数功能:响应中断和抢占中断的分组*/void NVIC_Config(void)/响应中断和抢占中断的分组 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC.h#ifndef _NVIC_H_#define _NVIC_H_ void NVIC_Config(void);/响应中断和抢占中断的分组#endif 六、实验操作步骤 实验操作步骤 准备实验环境 使用 STlink 仿真器连接 信盈达 STM32 实验平台的主板 JTAG 接口;使用 实验平台附带的 USB 数据线,连接实验平台主板和 PC。新建工程,编写程序,完成软件设计 新建工程保存文件夹,复制相应的库文件;在开发环境中新建工程,配置工程选项;新建程序代码文件,添加到工程,完成程序编码,无误后将程序下载到开发板的 Flash 中,按 RESET 键复位;添加前面实验程序中的

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开