MM32F5333内置了2 个 12 位模拟/数字转换器,单个 ADC的最高转换率可达 3MSPS。
ADC1 和ADC2 最多均可达14 个外部通道,其中 12 个ADC1 和 ADC2的通道在引脚排布上是复用的,因此共有16 个可用的 ADC 外部输入引脚。对于这些复用引脚,可以将ADC1 和 ADC2 并行使用来获得最高 6MSPS 的转换率。
此外,ADC2 还配有 2 个内部通道,分别连接到温度传感器和电压传感器。
在工作方式上,ADC 支持单次单周期和连续扫描转换模式。
通过厂家所提供的例程可学习其使用发及功能的验证,在使用板载信号模拟电路的情况下,可进行多通道数据采集的检测,其效果如图2所示。
![image.png image.png](data/attachment/forum/202401/07/111316tfmyyhbwymxm8abl.png)
图1信号模拟电路
![image.png image.png](data/attachment/forum/202401/07/111404vgvmnj9amvmvab9l.png)
图2检测效果
在掌握ADC的用法后,可将NTC热敏电阻与其配合实现温度的检测。NTC热敏电阻的检测电路如图3所示,为了避开信号模拟电路所占用的通道,热敏电阻的信号被连接到PA6。
![image.png image.png](data/attachment/forum/202401/07/111451a7efh4zoqosethth.png)
图3测温电路
实现该通道数据采集及温度变换的函数为:
void ADC_InjectionChannel_Polling_Sample(void)
{
float RVxVoltage];
int u,V;
ADC_Configure();
while (1)
{
ADC_SoftwareStartInjectedConvCmd(ADC1, ENABLE);
while (RESET == ADC_GetFlagStatus(ADC1, ADC_FLAG_INJEOS));
ADC_ClearFlag(ADC1, ADC_FLAG_INJEOS);
RVxVoltage= (float)ADC_GetInjectedChannelConvertedValue(ADC1, ADC_InjectedChannel_3) * (float)3.3 / (float)4096.0;
u=(int)(RVxVoltage*1000);
if((u<=1644)&&(u>1268)) V=10+(1644-u)/37;
if((u<=1268)&&(u>947)) V=20+(1268-u)/32;
if((u<=947)&&(u>692)) V=30+(947-u)/25;
...
printf("\r\nVoltage=%0.3f mV T=%d C", RVxVoltage[3],V);
OLED_ShowNum(36,5,V,3,16);
PLATFORM_DelayMS(500);
}
}
复制代码在连接串口通信的情况下,其测试效果如图4所示。
![image.png image.png](data/attachment/forum/202401/07/111609jkpuv6oydqojonjs.png)
图4测试结果
实现图5和图6所示效果的主程序为:
int main(void)
{
PLATFORM_Init();
GPIO_OLED();
Init_OLED();
OLED_Clear();
OLED_ShowString(20,0,"MM32F5333 ",16);
OLED_ShowString(20,2,"NTC TEST",16);
ADC_InjectionChannel_Polling_Sample();
while (1);
}
复制代码![image.png image.png](data/attachment/forum/202401/07/111712am7zf27unh7ujjmh.png)
图5室温检测
![image.png image.png](data/attachment/forum/202401/07/111749uvlhtw1hchbz7ljw.png)
图6体温检测
相较于数字式的传感器模块,采用NTC进行温度检测会有更宽的温度检测范围,可用于工业控制等领域。