Waveshare
直播中

南惜北

10年用户 89经验值
擅长:可编程逻辑 处理器/DSP
私信 关注
[经验]

【XNUCLEO-F030R8试用体验】之四:mbed开发之模拟输入输出

本帖最后由 南惜北 于 2016-5-26 15:35 编辑

【XNUCLEO-F030R8试用体验】之四:mbed开发之模拟输入输出
上一节讲的是数字输入输出,这一节讲一下模拟输入输出。
模拟输入,就是把外界的模拟量转换成数字量传入MCU处理,这个过程用到的器件是ADC,F030R8芯片的ADC是12位,参考电压为3.3V,分辨率为3.3/(2^12)=0.805mV。事实上这些我们不需要了解,只要明白mbed库函数怎么使用就可以了,下面是模拟部分的库函数:
3.png
     需要注意的是unsigned short read_u16()这个函数,返回值在065535之间,也就意味着将ADC输出的12位结果扩展成了16位,在使用的时候需要注意,它返回的并不是12ADC的实际结果。
    下面写一个简单的程序来体会一下ADC的模拟输入功能,它的功能是读取A0口的电压值,如果大于1.6V,就点亮开发板上的LED4PC_5),并把结果发送给PC威廉希尔官方网站 连接如下:
4.png

下面是程序,程序中用到了串口,串口把采集到的数据发送到PC,我们后面再讲串口。
#include"mbed.h"
AnalogInlight(A0);
DigitalOutled1(PC_5);
Serialpc(USBTX,USBRX);
int main()
{
         float lightvalue1=0;
         unsigned short lightvalue2=0;
  pc.baud(9600);
         while(1)
    {
        lightvalue1=(float)light;                                                   //采样电压值,返回0.0~1.0之间的数(比例)
        lightvalue2=light.read_u16();                                          //采样电压值,返回0~65535之间的数
        pc.printf("light adc count is %f ,%d n",lightvalue1,lightvalue2);
        pc.printf("voltage is %fn",3.3*lightvalue1);                   //3.3*lightvalue1即为实际电压
        wait(0.5);
        if (lightvalue1>0.5)
          led1=1;
        else
          led1=0;
    }
}
       编译上面的程序并下载到开发板,可以看到TXD灯每0.5s闪烁一次,串口调试助手收到ADC数据,用万用表测量一下电压,和显示的电压基本一致。
6.png
       下面是实物连接图,红色是VCC(3.3V),黑色是GND,蓝色接A0口。注意实验的时候,microUSB口要连接到电脑上,不然收不到数据。
5.png

      接下来看一下模拟输出的部分。
      模拟输出就是讲MCU输出的数字信号转换成模拟信号,通过引脚输出。这一过程用到了DAC,但是我查阅了STM32F030R8的数据手册,发现芯片并没有DAC,这也就意味着开发板上没有DAC输出的功能,那么AnalogeOut的库在我们的开发中也就用不到了。
      事实上DAC可以完成很多实验,如控制一盏LED由亮到灭(PWM方式更合适),输出正弦波、三角波、锯齿波等各种常见波形,由于开发板的芯片使用的是Cortex M0内核的芯片,属于比较早期的Cortex M芯片,DAC缺席也难免,应用中用到DAC的话可以去购买集成该模块的其他芯片。
       这一部分就讲到这里,DAC输出部分由于芯片不支持无法实现,想到了解其他芯片的模拟输出可以参考我的第二篇帖子:https://bbs.elecfans.com/jishu_704696_1_1.html,到mbed官网下载例程研究。
下一篇将带来中断和定时器的使用。

更多回帖

发帖
×
20
完善资料,
赚取积分