本帖最后由 南惜北 于 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的话可以去购买集成该模块的其他芯片。 下一篇将带来中断和定时器的使用。
|