MM32 eMiniBoard开发板配有12 位可编程分辨率的 SAR ADC,及多达 10 路外部输入通道和 2 路内部通道 2个串口。
使用ADC进行数据可将外部的模拟信号转换为数字信号以便进行后续的数字化处理,若配合传感器的使用则能把物理信号转换为可供MCU处理数据。
在该开发板上,直接提供了3路模拟信号以供测试,其原理图如图1所示
图1 3路模拟信号输出
在未配置显示器件的情况下,可通过串行通讯来输出A/D数据采集的结果,参见图2和图3所示。
图2 数据采集方式
图3 数据采集结果
由相关资料可知,ADC1_CH_1所占用的引脚为PA1,故调节电位器RV1即可改变模拟电压。
实现A/D数据采集的主程序为:
s32 main(void)
{
DELAY_Init();
CONSOLE_Init(9600);
ADC1SingleChannelInit();
while(1) {
ADCVAL = Get_Adc_Average(5);
fValue = ((float)ADCVAL / 4095) * 3.3; //use 3.3V as VDD
printf("ADC1_CH_1=%fV\r\n", fValue);
DELAY_Ms(200);
}
}
其中,语句ADCVAL = Get_Adc_Average(5);的功能是取5次采样值的平均值。
若对相关函数加以修改,则可采集通道ADC1_CH_4的值,需修改的函数为:
void ADC1PinConfigWithParameter(void)
{
ADCxAssignPin(GPIOA, GPIO_Pin_4);
}
void ADC1ChannelConfigWithParameter(void)
{
ADC_TypeDef* ADCn;
ADCn = ADC1;
ADCxChannelEnable(ADCn, ADC_Channel_4);
}
s32 main(void)
{
DELAY_Init();
CONSOLE_Init(9600);
ADC1SingleChannelInit();
while(1) {
ADCVAL = Get_Adc_Average(5);
fValue = ((float)ADCVAL / 4095) * 3.3; //use 3.3V as VDD
printf("ADC1_CH_4=%fV\r\n", fValue);
DELAY_Ms(200);
}
}
在调节电位器RV2的情况下,则可得到图4所示的结果。
图4 数据采集结果
老哥可以实现多通道采集吗?我之前试了一下,修改不来。
引用: w494143467 发表于 2020-11-30 09:13 老哥可以实现多通道采集吗?我之前试了一下,修改不来。
是呀,我也试了,我做了2个单通道的,成功后就把它们组合在一起来实现双通道,但是只输出一个通道的值!
有时间的话,再多尝试尝试吧。
引用: jinglixixi 发表于 2020-11-30 09:40 是呀,我也试了,我做了2个单通道的,成功后就把它们组合在一起来实现双通道,但是只输出一个通道的值! ...
对的,我也是这样的情况,所以也想知道怎么设置为双通道,看了手册,照着操作还是不行。到时候问问官方吧。
引用: w494143467 发表于 2020-11-30 11:17 对的,我也是这样的情况,所以也想知道怎么设置为双通道,看了手册,照着操作还是不行。到时候问问官方吧 ...
ok !
引用: freebsder 发表于 2020-12-2 22:36 初始化的时候估计要设置转换的通道号和总共需要转换的通道数,,,根据st推测
有道理,通道号是设了,但通道数无从定义。故采用2个通道是轮询,即循环体内是:通道1初始化、采集通道1、通道2初始化、通道2采集,但结果是同一通道值!