本帖最后由 南惜北 于 2016-5-26 15:35 编辑
【XNUCLEO-F030R8试用体验】之四:mbed开发之模拟输入输出
上一节讲的是数字输入输出,这一节讲一下模拟输入输出。
模拟输入,就是把外界的模拟量转换成数字量传入MCU处理,这个过程用到的器件是ADC,F030R8芯片的ADC是12位,参考电压为3.3V,分辨率为3.3/(2^12)=0.805mV。事实上这些我们不需要了解,只要明白mbed库函数怎么使用就可以了,下面是模拟部分的库函数:
需要注意的是unsigned short read_u16()这个函数,返回值在0到65535之间,也就意味着将ADC输出的12位结果扩展成了16位,在使用的时候需要注意,它返回的并不是12位ADC的实际结果。
下面写一个简单的程序来体会一下ADC
的模拟输入功能,它的功能是读取A0
口的电压值,如果大于1.6V
,就点亮开发板上的LED4
(PC_5
),并把结果发送给PC
,威廉希尔官方网站
连接如下:
下面是程序,程序中用到了串口,串口把采集到的数据发送到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数据,用万用表测量一下电压,和显示的电压基本一致。
下面是实物连接图,红色是VCC(3.3V),黑色是GND,蓝色接A0口。注意实验的时候,microUSB口要连接到电脑上,不然收不到数据。
接下来看一下模拟输出的部分。
模拟输出就是讲MCU输出的数字信号转换成模拟信号,通过引脚输出。这一过程用到了DAC,但是我查阅了
STM32F030R8的数据手册,发现芯片并没有DAC,这也就意味着开发板上没有DAC输出的功能,那么AnalogeOut的库在我们的开发中也就用不到了。
事实上DAC可以完成很多实验,如控制一盏LED由亮到灭(PWM方式更合适),输出正弦波、三角波、锯齿波等各种常见波形,由于开发板的芯片使用的是Cortex M0内核的芯片,属于比较早期的Cortex M芯片,DAC缺席也难免,应用中用到DAC的话可以去购买集成该模块的其他芯片。
下一篇将带来中断和定时器的使用。