【MXCHIP Open1081】ADC、DS18B20采集与LCD显示

作者: yinyue01
上传时间为: 2015-03-10 03:11 PM
2015-03-10
阅读:

1.ADC

OP1081采用了STM32F205RG作为MCU,STM32F205RG有2个ADC,可在24个外部通道上复用,如下图所示:

ADC转换精度可配置为12位、10位、8位和6位,降低精度可提高转换速度,在12位精度下ADC转换速度最快可达2MS/s。工作模式有4种:单次转换、连续转换、多通道扫描、间断转换。

ADC模块时钟经过APB2分频,最高可达30MHz;每个通道总的转换时间为Ttotal=TSampling+Tconversion=(SMP + RES) * ADCCLK

其中,SMP为采样时间,RES为转换精度,因此降低转换精度可提高转换速度。

根据时钟树可计算出程序中ADC的转换时间:

在启动文件startup_stm32f2xx.s中可找到SystemInit函数,3.5版的固件库中在startup文件中加入了SystemInit函数,因此不用在main()中再调用。

打开SystemInit(),其中的SetSysClock()中有系统时钟的配置

可以看出HCLK = SYSCLK / 1,PCLK2 = HCLK / 2,因此APB2的时钟为120MHz/2=60 MHz,而ADCCLK为PCLK2的2分频,因此为30 MHz.

程序简单注释如下:

由Resolution=12b,SampleTime=3Cycles可算出ADC单通道转换时间为(12+3)/30MHz=0.5us,即2MS/s.

对程序稍加改动,可实现ADC通道6采集并显示电压,在超级终端中单行显示只更新电压值,如下图所示:

2.DS18B20

DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。一线总线结构具有简洁且经济的特点,可使用户轻松地组建传感器网络,从而为测量系统的构建引入全新概念,测量温度范围为-55~+125℃ ,精度为±0.5℃。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~l2 位的数字值读数方式。它工作在 3—5.5 V 的电压范围,采用多种封装形式,从而使系统设计灵活、方便,设定分辨率及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20内部结构如下:

DS18B20的ROM中有64位序列号,它可以看作是该 DS18B20的地址序列码,每DS18B20 的64位序列号均不相同。64位 ROM的排列是:前8 位是产品家族码,接着48位是DS18B20 的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5 +X4 +1)。ROM作用是使每一个DS18B20 都各不相同,这样就可实现一根总线上挂接多个。

所有的单总线器件要求采用严格的信号时序,以保证数据的完整性。DS18B20 共有6 种信号类型:复位脉冲、应答脉冲、写 0、写1、读0和读 1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前。

这几个信号的时序如下:

1)复位脉冲和应答脉冲

单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持低电平时间至少 480 us,,以产生复位脉冲。接着主机释放总线,4.7K的上拉电阻将单总线拉高,延时 15~60 us,并进入接收模式(Rx)。接着 DS18B20拉低总线60~240 us,以产生低电平应答脉冲, 若为低电平,再延时 480 us。

2)写时序

写时序包括写0时序和写1时序。所有写时序至少需要60us,且在2次独立的写时序之间至少需要 1us 的恢复时间,两种写时序均起始于主机拉低总线。写 1 时序:主机输出低电平,延时2us,然后释放总线,延时 60us。写 0时序:主机输出低电平,延时 60us,然后释放总线,延时2us。

写0 

写1

3)读时序

单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。所有读时序至少需要60us,且在 2次独立的读时序之间至少需要 1us 的恢复时间。每个读时序都由主机发起,至少拉低总线 1us。主机在读时序期间必须释放总线,并且在时序起始后的15us之内采样总线状态。典型的读时序过程为:主机输出低电平延时 2us,然后主机转入输入模式延时 12us,然后读取单总线当前的电平,然后延时50us。

DS18B20 的温度读取过程一般为:复位->发SKIP ROM 命令(0XCC)->发开始转换命令(0X44)->延时->复位->发送 SKIP ROM 命令(0XCC)->发读存储器命令(0XBE)->连续读出两个字节数据(即温度)->结束。

程序中通过readID()函数读取序列号,通过readTemp()读取温度:

ADC_DS18B20_LCD程序实现了2路ADC采集电压、DS18B20采集温度,在LCD上显示并发送到上位机。ADC通道为CH0和CH1,引脚为PA0和PA1。程序运行结果如下:

ADC_DS18B20_LCD文件夹中包含了所有源文件,mxchip采用的固件库较老,并且只能用该版固件库,即

否则程序可能编译不通过。

另外,mxchipWNet_3161.lib没提供源代码,mxchipWNet_3161.lib对固件库有依赖,开发时对一些内部函数不了解,也不方便移植。

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示