怎么用stm32 adc dma 多通道做一个ADC,输入电压超过30V

STM32 ADC转换如何计算STM32 ADC转换之后在ADC_DR上得到转换结果,这个转换结果是什么?该如何计算输入电压?_作业帮
拍照搜题,秒出答案
STM32 ADC转换如何计算STM32 ADC转换之后在ADC_DR上得到转换结果,这个转换结果是什么?该如何计算输入电压?
STM32 ADC转换如何计算STM32 ADC转换之后在ADC_DR上得到转换结果,这个转换结果是什么?该如何计算输入电压?
你得到的结果是你当前AD引脚上的电压值相对于3.3V和4096转换成的数字.假如你得到的AD结果是ADC_DR这个变量,他们存在以下关系:ADC_DR/当前电压值 = 毫伏如果你反过程想得到当前电压值,可以如下计算:unsigned long VVoltage = ADC_DR; //---假设你得到的AD结果存放到ADC_DR这个变量中;Voltage = (Voltage * ; //----你就得到了正确的电压结果,单位是mV一般出于效率,我会们自己进行约分:Voltage = (Voltage * 825)/1024; //----你就得到了正确的电压结果,单位是mV而再进一步,效率会更高:Voltage = (Voltage * 825)>>10; //----你就得到了正确的电压结果,单位是mV
得到一个二进制数,这个二进制数最大为ADC_DR都为1的时候。此时对应3.3V.所以最后的电压就是ADC_DR的值除以2的16次再乘以3.3关于STM32 ADC输入问题_百度知道
关于STM32 ADC输入问题
一般是采集0~3,那我把这个采集到的数据直接乘以2是不是就能大概得到原本的数据呢?负电压有可能把芯片烧坏吗.3V的电压。请问如果输入一个-3V~3V的正弦信号经过整流、滤波后就直接输入给STM32的ADC(不把电压升到0伏以上)来采集会产生什么效果呢?STM32的ADC还能正常工作吗STM32F107 的多路ADC采集?如果是这样的话?菜鸟一枚,请各位大大耐心解答?还是说ADC就只采集0~3V之间的正电压信号呢
提问者采纳
STM32的ADC还能正常工作吗,一般是采集0~3:STM32的ADC是可以正常采集的,不管哪种整流方式.3V的电压。负电压有可能把芯片烧坏吗?如果是这样的话。请问如果输入一个-3V~3V的正弦信号经过整流?答案、滤波后就直接输入给STM32的ADC(不把电压升到0伏以上)来采集会产生什么效果呢。交流电如果经过半波整流,ADC完全可以正常工作,得到的直流电压就是3V?答案,用白话说就是把负半周砍掉了?答案:已经经过了整流滤波,不存在负电压了。还是说ADC就只采集0~3V之间的正电压信号呢,那我把这个采集到的数据直接乘以2是不是就能大概得到原本的数据呢STM32F107 的多路ADC采集。由于你又经过了滤波,几乎恒定不变:交流电如果经过全波整流,用白话说就是把负半周翻转到正半周去了
提问者评价
来自团队:
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁热门版块:
助理工程师
实用的STM32之ADC步骤与技巧
高级工程师
谢谢分享学习一下
风趣,幽默,搞笑。哈哈& & 谢谢大神分享了& &这么好的帖子& &顶起!!!!!
风趣,幽默,搞笑。哈哈& & 谢谢大神分享了& &这么好的帖子& &顶起!!!!!
4--20mA传感器的信号采集原理图你有吗?能指导一下不?谢谢了
学习一下。学习一下。
感谢 楼主 分享!!!!!!!!!!!!!
谢谢楼主分享,,,,,
站长推荐 /4
Powered by 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
STM32如何得到最佳ADC精度
下载积分:20
内容提示:STM32如何得到最佳ADC精度
文档格式:PDF|
浏览次数:396|
上传日期: 11:50:52|
文档星级:
该用户还上传了这些文档
STM32如何得到最佳ADC精度
官方公共微信后使用快捷导航没有帐号?
查看: 816|回复: 17
STM32的ADC1和ADC2的采集问题
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
一粒金砂(高级), 积分 222, 距离下一级还需 278 积分
试了一下STM32的ADC1和ADC2,调试时出现的问题让我不解:
(1)只使用STM32的ADC1采集信号,PA.0为其模拟输入通道;
将ADC1配置成独立模式、单通道单次转换、软件触发,
采集到的数据是正确的;
(2)只使用ADC2采集信号,与(1)中ADC1的设置完全相同,即
PA.0为其模拟输入通道;
将ADC2配置成横独立模式、单通道单次转换、软件触发,
却采集不到数据;
所以,想请教一个问题:
STM32的ADC2采集相较ADC1采集时,对ADC2的配置有什么特殊要求吗?
或者其ADC2只能在双AD模式中才能使用?
在线时间63 小时
威望205 分
芯币114 枚
TA的帖子TA的资源
本帖最后由 yl 于
13:26 编辑
刚才,那个我没看仔细,你多半是,ADC2的RCC_APBXXXX这个函数里面没有对ADC2设置好
本帖子中包含更多资源
才可以下载或查看,没有帐号?
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 , ENABLE );
您具体指的是这个函数吗?
ADC2是APB2总线上的外设,ADC2的时钟使能应该是没有问题的。&
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
刚才,那个我没看仔细,你多半是,ADC2的RCC_APBXXXX这个函数里面没有对ADC2设置好RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 , ENABLE );
您具体指的是这个函数吗?
ADC2是APB2总线上的外设,ADC2的时钟使能应该是没有问题的。
void ADC2_Init(void)
GPIO_InitTypeDef
GPIO_InitS
// Device header
ADC_InitTypeDef
//RCC_APB2PeriphClockCmd(RCC_AHBPer&
在线时间63 小时
威望205 分
芯币114 枚
TA的帖子TA的资源
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 , ENABLE );
您具体指的是这个函数吗?
ADC2是APB2总线上的外设,ADC2的时钟使能应该是没有问题的。
void ADC2_Init(void)
GPIO_InitTypeDef&&GPIO_InitS
& && && && && &// Device header
ADC_InitTypeDef&&ADC_InitS
& & & & & & & & //RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
& & & & & & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);
& & & & & & & & GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;& & & & //PA0
& & & & & & & & GPIO_InitStructure .GPIO_Mode=GPIO_Mode_AIN;//éèÖÃÎaÄ£Äaêäèë
& & & & & & & & GPIO_Init(GPIOA,&GPIO_InitStructure);//PA02Îêy×°èëíê±Ï& & & &
& & & & & & & & RCC_ADCCLKConfig(RCC_PCLK2_Div6);//adcê±ÖóéèÖÃíê±Ï,ADC×î¸ß1¤×÷ÆμÂê14M£¬6·ÖÆμ¾íêÇ12M
& & & & & & & & ADC_DeInit(ADC2);&&//½«íaéè ADC2 μÄè«2¿¼Ä′æÆ÷ÖØéèÎaè±ê¡
& & & & & & & & ADC_InitStructure.ADC_Mode=ADC_Mode_I
& & & & & & & & ADC_InitStructure.ADC_ScanConvMode=DISABLE;//쥶à×a»»Ä£ê½
& & & & & & & & ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//PA0á¬Dø×a»»
& & & & & & & & ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_R//óò¶ÔÆë
& & & & & & & & ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_N//èí¼t′¥·¢
& & & & & & & & ADC_InitStructure.ADC_NbrOfChannel=1;& & & & //í¬ê±×a»»í¨μàêyÎa1£¬èç1ûóD¶à¸öí¨μà½øDD×a»»£¬Ôù¶¨
& & & & & & & & ADC_Init(ADC2,&ADC_InitStructure);//×°ÔØADC2Îêy
& & & & & & & & & & & & & & & & ADC_RegularChannelConfig(ADC2,ADC_Channel_0,1,ADC_SampleTime_41Cycles5);
& & & & & & & & //adc2éóÃê±¼ät=2éÑùÖüÆú+12.5¸öÖüÆú
& & & && &ADC_Cmd(ADC2,ENABLE);
& & & & & & & & ADC_ResetCalibration(ADC2);
& & & & & & & & while(ADC_GetCalibrationStatus(ADC2));
& & & & & & & & ADC_StartCalibration(ADC2);//D£×¼
& & & & & & & & while(ADC_GetCalibrationStatus(ADC2));
& & & & & & & & ADC_SoftwareStartConvCmd(ADC2,ENABLE);//Öƶ¨èí¼t′¥·¢×a»»
& & & & & & & &
参考下这个
很谢谢您的热心帮忙,其实我的程序就是您这样的。
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
ADC1采集建立project1,ADC2采集建立project2;
针对ADC1:
//ADC1的模拟输入端PA.5复制代码针对ADC2:
&font color=&#0000ff&&//ADC2的模拟输入端PA.5&/font&复制代码针对ADC1:
void&&Adc_Init(void)
{ & & & &
& & & & ADC_InitTypeDef ADC_InitS
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 , ENABLE );
& & & & RCC_ADCCLKConfig(RCC_PCLK2_Div6);& && && && && && && && && && && && && &//72M/6=12,ADC最大时间不能超过14M
& & & &
& & & & ADC_DeInit(ADC1);
& & & & ADC_InitStructure.ADC_Mode = ADC_Mode_I& && && &&&//独立模式
& & & & ADC_InitStructure.ADC_ScanConvMode = DISABLE;& && && && && && &&&//单通道
& & ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;& && && &//单次转换
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_N& & & &
& & & & ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_R& & & &
& & & & ADC_InitStructure.ADC_NbrOfChannel = 1;&&
& & & & ADC_Init(ADC1, &ADC_InitStructure);& & & && &
& & ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 1, ADC_SampleTime_71Cycles5 );
& & & & ADC_Cmd(ADC1, ENABLE);
& & & & ADC_ResetCalibration(ADC1);
& & & & while(ADC_GetResetCalibrationStatus(ADC1));
& & & & ADC_StartCalibration(ADC1);
& & & & while(ADC_GetCalibrationStatus(ADC1));
}复制代码针对ADC2:
&font color=&#0000ff&&void&&Adc_Init(void)
{ & & & &
& & & & ADC_InitTypeDef ADC_InitS
& & & & RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 , ENABLE );
& & & & RCC_ADCCLKConfig(RCC_PCLK2_Div6);& && && && && && && && && && && && && && & //72M/6=12,ADC最大时间不能超过14M
& & & &
& & & & ADC_DeInit(ADC2);
& & & & ADC_InitStructure.ADC_Mode = ADC_Mode_I& && && && &&&//独立模式
& & & & ADC_InitStructure.ADC_ScanConvMode = DISABLE;& && && && && && && &&&//单通道
& & ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;& && && && &//单次转换
& & & & ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_N
& & & & ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_R& & & &
& & & & ADC_InitStructure.ADC_NbrOfChannel = 1;& &
& & & & ADC_Init(ADC2, &ADC_InitStructure);& & & &&&
& & & & ADC_RegularChannelConfig(ADC2, ADC_Channel_5, 1, ADC_SampleTime_71Cycles5 );
& & & & ADC_Cmd(ADC2, ENABLE);& & & &
& & & & ADC_ResetCalibration(ADC2);
& & & & while(ADC_GetResetCalibrationStatus(ADC2));
& & & & ADC_StartCalibration(ADC2);
& & & & while(ADC_GetCalibrationStatus(ADC2));& & & &
}& & & & &/font&复制代码针对ADC1:
int main(void)
{
& && & & & SystemInit();& & //系统时钟初始化:72M
& & & & Gpio_Init();
& & & & Adc_Init();
& & & & while(1)
& & & & {
& & & &&&ADC_SoftwareStartConvCmd(ADC1, ENABLE );
& & & & }复制代码
针对ADC2:
&font color=&#0000ff&&int main(void)
{
& && & & & SystemInit();& & & & & & & && &//系统时钟初始化
& & & & Gpio_Init();
& & & & Adc_Init();
& & & & while(1)
& & & & {
& & & & & & & &&&ADC_SoftwareStartConvCmd(ADC2, ENABLE );
& & & & }&/font&复制代码
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
void ADC2_Init(void)
GPIO_InitTypeDef&&GPIO_InitS
& && && && && &// Device header
ADC_InitTypeDef&&ADC_InitS
& && && && && & //RCC_APB2PeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
& && && && && & RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE);
& && && && && & GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;& && &&&//PA0
& && && && && & GPIO_InitStructure .GPIO_Mode=GPIO_Mode_AIN;//éèÖÃÎaÄ£Äaêäèë
& && && && && & GPIO_Init(GPIOA,&GPIO_InitStructure);//PA02Îêy×°èëíê±Ï& && &&&
& && && && && & RCC_ADCCLKConfig(RCC_PCLK2_Div6);//adcê±ÖóéèÖÃíê±Ï,ADC×î¸ß1¤×÷ÆμÂê14M£¬6·ÖÆμ¾íêÇ12M
& && && && && & ADC_DeInit(ADC2);&&//½«íaéè ADC2 μÄè«2¿¼Ä′æÆ÷ÖØéèÎaè±ê¡
& && && && && & ADC_InitStructure.ADC_Mode=ADC_Mode_I
& && && && && & ADC_InitStructure.ADC_ScanConvMode=DISABLE;//쥶à×a»»Ä£ê½
& && && && && & ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//PA0á¬Dø×a»»
& && && && && & ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_R//óò¶ÔÆë
& && && && && & ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_N//èí¼t′¥·¢
& && && && && & ADC_InitStructure.ADC_NbrOfChannel=1;& && &&&//í¬ê±×a»»í¨μàêyÎa1£¬èç1ûóD¶à¸öí¨μà½øDD×a»»£¬Ôù¶¨
& && && && && & ADC_Init(ADC2,&ADC_InitStructure);//×°ÔØADC2Îêy
& && && && && && && && && && &&&ADC_RegularChannelConfig(ADC2,ADC_Channel_0,1,ADC_SampleTime_41Cycles5);
& && && && && & //adc2éóÃê±¼ät=2éÑùÖüÆú+12.5¸öÖüÆú
& && && & ADC_Cmd(ADC2,ENABLE);
& && && && && & ADC_ResetCalibration(ADC2);
& && && && && & while(ADC_GetCalibrationStatus(ADC2));
& && && && && & ADC_StartCalibration(ADC2);//D£×¼
& && && && && & while(ADC_GetCalibrationStatus(ADC2));
& && && && && & ADC_SoftwareStartConvCmd(ADC2,ENABLE);//Öƶ¨èí¼t′¥·¢×a»»
& && && && && &
参考下这个
很谢谢您的热心帮忙,其实我的程序就是您这样的。
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
ADC1采集3.3V电压,DR的值是0
& && && && &&&3.3V/2时,DR的值是0x7
& && && && && && &0V时,DR的值是0x0000;
ADC2采不到数据。
STM32单片机使用的是STM32VET6,现在将程序呈上,
坛友要是有时间的或有兴趣一起讨论的话,麻烦也帮忙运行一下,看看结果到底是怎样的。
因为不论是多通道采集还是单通道采集,是软件触发或定时器中断触发,大家要么单独使用
ADC1,要么双ADC,很少会单独使用ADC2的。
我还是觉得ADC2不能单独使用,它好像只能配合ADC1使用,比如在双AD模式中。
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
程序呈上:
本帖子中包含更多资源
才可以下载或查看,没有帐号?
在线时间1750 小时
威望13614 分
芯币23793 枚
E金币194 枚
TA的帖子TA的资源
每一个AD是一样的,注意时钟、管脚等的配置。
在线时间37 小时
TA的帖子TA的资源
请问一下,ADC1采集3.3V电压,DR的值是0xfff,是如何读取ADC_DR??
又ACD2的DR,是如何读取?
view->system viewer ->ADC1 ,然后弹出ADC各寄存器的状态&
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
请问一下,ADC1采集3.3V电压,DR的值是0xfff,是如何读取ADC_DR??
又ACD2的DR,是如何读取?view-&system viewer -&ADC1 ,然后弹出ADC各寄存器的状态
本帖子中包含更多资源
才可以下载或查看,没有帐号?
在线时间37 小时
TA的帖子TA的资源
可否试试ADC3?
在线时间37 小时
TA的帖子TA的资源
使用f103c8,adc同你的配置,输入为PA0,adc转换值由uart1输入到pc,结果:adc1跟adc2都正常
我也尝试着使用了f103c8,观察ADC的DR寄存器,结果还是:ADC1可行,ADC2不行;
真的搞不懂了&
为什么还是不行&
不过我的还是不行,这次是真的奇怪了。
我换个系统板试试&
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
使用f103c8,adc同你的配置,输入为PA0,adc转换值由uart1输入到pc,结果:adc1跟adc2都正常
谢谢& & 不过我的还是不行,这次是真的奇怪了。
我换个系统板试试
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
使用f103c8,adc同你的配置,输入为PA0,adc转换值由uart1输入到pc,结果:adc1跟adc2都正常为什么还是不行
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
使用f103c8,adc同你的配置,输入为PA0,adc转换值由uart1输入到pc,结果:adc1跟adc2都正常我也尝试着使用了f103c8,观察ADC的DR寄存器,结果还是:ADC1可行,ADC2不行;
真的搞不懂了
在线时间37 小时
TA的帖子TA的资源
刚又试了一下,一样是F103C8,这次直接使用你的adc2,只是将mcu 主频改为4M,由USART1传送ADC2_DR给PC,输入一样改为PA0(ADC_Channel_0),其他都没变动,PC可以正确得到转换值
谢谢大家的帮忙
现在都好了
附件中的程序都是可行的&
在线时间110 小时
威望222 分
芯币321 枚
TA的帖子TA的资源
刚又试了一下,一样是F103C8,这次直接使用你的adc2,只是将mcu 主频改为4M,由USART1传送ADC2_DR给PC,输入一样改为PA0(ADC_Channel_0),其他都没变动,PC可以正确得到转换值恩& & 谢谢大家的帮忙& &现在都好了& &附件中的程序都是可行的
Powered by
逛了这许久,何不进去瞧瞧?

我要回帖

更多关于 stm32多通道adc采集 的文章

 

随机推荐