STM32的ADC和DAC问题集锦

1、STM32的DAC转换是什么开始的呢?
问:STM32的DAC转换是什么开始的呢?如何利用DAC输出一个脉宽的控的单脉冲呢?答:DAC是通过写入DAC输出寄存器开始的。另外,如果想要脉冲,使用TIM功能。2、STM32的DAC输出电压
问:DAC的输出电压是如何调节的呢,输入的数字量和输出的电压怎么不成比例呢,输出电压不符合数据手册上提供的公式(DAC输出= VREF X DOR / 4095),求高人指点,程序如下:
#include "stm32f10x_lib.h"
#define DAC_DHR8R1_Address 0x40007410
DAC_InitTypeDef DAC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
ErrorStatus HSEStartUpStatus;
uc8 Escalator8bit[50] = {0x0, 0x33, 0x66, 0x99, 0xcc, 0xff};
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void Delay(vu32 nCount);
int main(void)
{
#ifdef DEBUG
debug();
#endif
RCC_Configuration();
GPIO_Configuration();
NVIC_Configuration();
TIM_PrescalerConfig(TIM6, 0xF, TIM_PSCReloadMode_Update);
TIM_SetAutoreload(TIM6, 0xFF);
TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DMA_DeInit(DMA2_Channel3);
DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8R1_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&Escalator8bit;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize = 6;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
领导艺术论文DMA_Init(DMA2_Channel3, &DMA_InitStructure);
DMA_Cmd(DMA2_Channel3, ENABLE);
DAC_Cmd(DAC_Channel_1, ENABLE);
2010年广东高考数学DAC_DMACmd(DAC_Channel_1, ENABLE);
TIM_Cmd(TIM6, ENABLE);
出版管理条例
while (1)
{
}
}
void RCC_Configuration(void)
{
RCC_DeInit();美拉德反应
RCC_HSEConfig(RCC_HSE_ON);
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
}
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
四川省工商行政管理局
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
}
void Delay(vu32 nCount)
{
for(; nCount != 0; nCount--);
}
输出电压为什么不是0~3.3V呢?
答1:(u32)&Escalator8bit;你把这个里面的数据强制转换为32位,也就是0x0, 0x33, 0x66, 0x99转换为一个32位的数据,你这样做是不对的。你应该定义一个16位的数组,然后VREF X DOR / 4095算出DOR的值,DOR的值不能超过4095.
答2:DAC_OutputBuffer - 输出缓存使能再试试
1、关于STM32F103RE的DAC
问:关于STM32F103RE中有几个DAC呢?是只有一个DAC(包括两个通道)还是有两个呢?
答:有2个,这个你可以到引脚图上面看到。
2、STM32F107的DAC例程都用TIMx更新启动DMA2
问:STM32F107的DAC例程都用TIMx更新启动DMA2,没有不用TIMx启动DMA2自动把数据传送DAC的DHRxx寄存器里面?该如何设置呢?
答:不用TIM只能自己写时间判断了.可以在while()里面写一个计数器的处理或者延时的处理.
3、STM32F107可以带多个外置式ADC吗?如果可以最多可以带多少个?
问:STM32F107可以带多个外置式ADC吗?如果可以最多可以带多少个?
答:一共有16个痛多的ADC,外置式是什么类型连接的?
答:外置式ADC型号是AD7490的16通道,SPI接口。因为总共有38路模拟量的,我想用三个外置ADC。另外我想问一下是不是可以只用一个SPI接口就可以连接三个外置ADC 呢?如果可以怎么做片选呢?万分感谢!
答:用其他3个IO做片选就可以
6、STM32F2 ADC
问:STM32F系列单片机中ADC的每个通道的采用周期都是可配置的,我想问一下采样周期配置的越大转换出来的值越精确吗?比如STM32F2处理器的ADC采用周期可以是
3、15、28、56、8
4、112、144、480.还有就是ADC中分为规则组和注入组,这两种模式在使用上有什么本质的不同吗?
答:ADC采用周期越大采集间隔越长,这个值越小采集越精确。规则组此模式通过设置ADC_CR1寄存器上的DISCEN位激活。它可以用来执行一个短序列的n次转换(n<=8),此转换是ADC_SQRx寄存器所选择的转换序列的一部分。数值n由ADC_CR1寄存器的DISCNUM[2:0]位给出。一个外部触发信号可以启动ADC_SQRx寄存器中描述的下一轮n次转换,直到此序列所有的转换完成为止。总的序列长度由ADC_SQR1寄存器的L[3:0]定义。举例:n=3,被转换的通道= 0、1、2、3、6、7、9、10 第一次触发:转换的序列为0、1、2 第二次触发:转换的序列为3、6、7 第三次触发:转换的序列为9、10,并产生EOC事件第四次触发:转换的序列0、1、2 注入组此模式通过设置ADC_CR1寄存器的JDISCEN位激活。在一个外部触发事件后,该模式按通道顺序逐个转换
ADC_JSQR寄存器中选择的序列。一个外部触发信号可以启动ADC_JSQR寄存器选择的下一个通道序列的转换,直到序列中所有的转换完成为止。总的序列长度由ADC_JSQR寄存器的JL[1:0]位定义。例子:n=1,被转换的通道= 1、2、3 第一次触发:通道1被转换第二次触发:通道2被转换第三次触发:通道3被转换,并且产生EOC和JEOC事件第四次触发:通道1被转换
答:非常感谢您的回答。其实我想问的是采样时间越大采样值就越精确吗?ADC采样周期可以是3、15、28、56、84、112、144、480. 最小的采样时间是3个ADCCLK,最大的是
480个ADCCLK,这个值是越大越好吗?
答:ADC采用周期越大采集间隔越长,这个值越小采集越精确。
7、STM32 ADC操作模式有哪些?
稳定同位素
问:STM32 ADC操作模式有哪些?
答:单次转换模式:转换一次则停止连续转换模式:转换完一次后即开始下一次转换扫描
模式:扫描一组模拟通道间断模式:每触发一次,转换序列中n个通道多种触发方式
8、STM32的内部温度传感器通过哪个AD采集?
答:STM32集成了片上的温度传感器,可以用来测量芯片内部的温度;STM32内部温度传感器与ADC的通道16相连,与ADC配合使用实现温度测量;测量范围–40~125℃,精度
± 1.5℃。
9、STM32 CPU温度数值如何计算?
答:ADC转换结束以后,读取ADC_DR寄存器中的结果,通过下面的公式计算T(℃) = V25 – VSENSE/ Avg_Slope + 25 V25:温度传感器在25℃时的输出电压,典型值1.43 V VSENSE:温度传感器的当前输出电压,与ADC_DR寄存器中的结果
ADC_ConvertedValue之间的转换关系为:VSENSE = ADC_ConvertedValue * Vdd / Vdd_convert_value(0xFFF) Avg_Slope:温度传感器输出电压和温度的关联参数,典型值4.3 mV/℃转换程序Vtemp_sensor = ADC_ConvertedValue * Vdd / Vdd_convert_value; Current_Temp = (V25 - Vtemp_sensor)/Avg_Slope + 25;
10、使用ADC时的注意事项是什么?
答:1、外部电路的等效输入阻抗要匹配,采样速度越快,输入阻抗越小。STM32数据手册上有对照表;2、只有在100脚和144脚的产品上才有VREF+和VREF-引出管脚。在其它产品封装中,VREF+在
芯片内部与VDDA相连,VREF-在芯片内部与VSSA相连;3、电路设计时,在VREF+和VDDA上一定要有良好的滤波,使用高质量的滤波电容且一定要
尽量靠近芯片的管脚。
11、关于STM32 双ADC 同步注入模式
问:我想用TIM控制双ADC同步采样6路信号,因为听说DMA方式会有错位的BUG,所以想用双ADC
同步注入方式采样。但是看了手册后有以下几个疑惑
1. ADC_InitStructure.ADC_Mode = ADC_Mode_InjecSimult;
如果我设置了同步注入模式,可是触发方式选择什么呢。能否简单的说明下同步注入
模式的初始化配置流程。
2. 在数据手册上只有ADC1有注入数据寄存器,而ADC2是没有的。但是在库函数中发现有
ADC_GetInjectedConversionValue这样一个函数,用这个是否能读出ADC2注入
组的数据呢?
答1:选择自动注入就可以,注意不可能同时使用自动注入和间断模式。2、此模式转换一个注入通道组。外部触发来自ADC1的注入组多路开关(由ADC1_CR2寄存器的JEXTSEL[2:0]选择),它同时给ADC2提供
同步触发。

本文发布于:2024-09-22 02:06:05,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/570774.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:转换   触发   注入   模式
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议