专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

Rainbow将模拟量转换成数字量

作者:3984435055   来源:本站原创   点击数:  更新时间:2014年05月06日   【字体:
    现实生活中大量存在的是模拟量,而数字量则广泛用于计算机系统,为了能测量模拟量(如:电压),通常会使用AD转换器来实现模数转换。Rainbow板载MCU有两个AD转换器,每个转换器支持16个通道进行AD转换,在设计Rainbow开发库的时候,我们只使用了ADC1,可以在以下这16个管脚实现AD转换:
    PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PB0, PB1, PC0, PC1,PC2, PC3, PC4, PC5
    
    AD转换的参考电压和MCU的工作电压一致,为3.3V;AD转换器的分辨率是12bit;为了尽可能提高AD转换的准确度,我们采用了多次转换结果求平均值的方式,默认转换10次后求平均值。
    
    使用开发包来进行AD转换非常简单,按照下列步骤即可:
    1、将模拟量输入管脚的模式设置为:GPIO_Mode_AIN,如:pinMode(PA4, GPIO_Mode_AIN);
    2、调用analogRead()读取指定模拟量的数值
 
    在软件包的“Projects\Analog”文件夹包含了本文的完整工程,可以直接编译、烧写和调试。来看看main.cpp的代码:
#include "WProgram.h"
 
//模拟量输入的管脚
#define AIN_PIN PA4
 
void setup()
{
  //初始化开发板
  boardInit();
  Serial.begin();
  //设置模拟量输入管脚模式
  pinMode(AIN_PIN, GPIO_Mode_AIN);
}
 
void loop()
{
  //读取指定管脚的模拟量值
  int16_t val = analogRead(AIN_PIN);
  //返回-1表示指定管脚非模拟量输入管脚
  if(val < 0)
    return;
  else
  {
    Serial.print("Analog Value:");
    Serial.println(val);
    //每3秒取一次转换结果
    delay(3000);
   }
}
 
int main(void)
{
  setup();
  while(1) loop();
}
 
    程序首先对模拟量输入管脚进行相应模式设置,然后调用analogRead()方法读取模拟值,如果返回-1表示管脚并非ADC模拟量输入通道,有效的模拟量值将通过串口,在上位机中进行显示。
 
    上面的程序编译无误后,将程序烧写到Rainbow中,将USB-TTL模块接入,在上位机上打开串口调试工具。在VCC、GND接入一个电位器,电位器输出接到PA4,然后我们转动电位器到某一个位置,软件将每隔3秒采集一次电压值并输出到串口调试工具。如果要得到相应的电压值,可以用这个公式来求:电压 = value / 4096 * 3.3

 

关闭窗口

相关文章