【BLE】CC2541之ADC
本文最后修改时间:2022年04月12日 23:00
一、本节简介
本文介绍如何通过P05口采集电压值。
二、实验平台
1)CC2541平台
①协议栈版本:BLE-CC254x-1.4.0
②编译软件:IAR 10.20.1
③硬件平台:香瓜CC2541开发板、USB Dongle
④仿真器:香瓜CC Debugger下载器
2)电脑平台
①软件:Btool
三、版权声明
1)作者:甜甜的大香瓜
2)声明:喝水不忘挖井人,转载请注明出处。
3)纠错/业务合作:897503845@qq.com
4)香瓜BLE之CC2541群:127442605
5)本文出处:原创连载资料《简单粗暴学蓝牙4.0(CC2541篇)》
6)完整开源资料下载地址(电脑端打开):
7)香瓜CC2541开发板套件购买:
四、实验前提
1、在进行本文步骤前,请先阅读以下章节:
1)《简单粗暴学蓝牙4.0(CC2541篇)》的“第一章至第三章”章节。
2、在进行本文步骤前,请先实现以下章节:
1)《简单粗暴学蓝牙4.0(CC2541篇)》的“第三章 软件的安装及使用”章节。
五、基础知识
1、CC2541的ADC是怎么样的?
答:
1)14位的模拟数字转换
2)最多12位的有效位数,最高位是符号位。
3)8个独立通道,AIN0~AIN7。
4)四种参考电压可选:
如上图,分别是内部参考电压(1.25V)、外部AIN7脚的电压、AVDD5脚的电压(3.3V)、外部AIN6~AIN7的差值电压。
注意:采集的电压值不能高过参考电压。外部的参考电压测出来的数据,会比内部参考电压测出来的数据更准。
2、AIN0~AIN7是指哪些引脚?
答:
P00~P07平时是普通IO口,也可以复用成AIN0~AIN7(复用时就没有普通IO口功能,而只有ADC功能)
六、硬件原理
1、本文使用的ADC引脚,P05
由于P05被用于底板的串口电路中,会被拉高到3.3V。所以要想使用P05,就得将核心板单独接线出来使用。(嫌麻烦的话建议换其他引脚)
七、实验步骤
1、编写并添加自定义的驱动
1)写一个驱动GUA_ADC.c(存放在“……
\BLE-CC254x-1.4.0\Projects\ble\SimpleBLECentral\Source\GUA”路径下)
//********************************************************************** //name: GUA_ADC.c //introduce: 香瓜自定义的ADC驱动 //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group: 香瓜BLE之CC2541(127442605) //shop: opengua.taobao.com //changetime: 2022.04.11 //********************************************************************** #include <ioCC2540.h> #include "GUA_ADC.h" //********************************************************************** //name: GUA_Read_Adc //introduce: 读ADC //parameter: channel:0~7表示P00~P07通道 //return: 2个字节ADC值(实际12位,最高位为符号位) //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group: 香瓜BLE之CC2541(127442605) //shop: opengua.taobao.com //changetime: 2022.04.11 //********************************************************************** GUA_U16 GUA_Read_Adc(GUA_U8 channel) { GUA_U16 value; GUA_U8 tmpADCCON3 = ADCCON3; P0SEL |= 1 << channel ; //设置该通道为Peripheral function APCFG |= 1 << channel ; //设置该通道为Analog I/O enabled ADCIF = 0; ADCCON3 = (2 << 6| 3 << 4| channel); //AVDD5、12bit、AINx while(!ADCIF); //等待ADC转换完成 //while(!(ADCCON1 & 0x80)); //等待ADC转换完成 value = ADCL >> 2; //ADCL寄存器低2位无效 value |= ((GUA_U16)ADCH << 6); //连接AD转换结果高位和低位 value >>= 2; //分辨率是12位,因此14位结果去除2位,最高位是符号位 ADCCON3 = tmpADCCON3;
return (value); } |
2)写一个驱动头文件GUA_ADC.h(存放在“……
\BLE-CC254x-1.4.0\Projects\ble\SimpleBLECentral\Source\GUA”路径下)
//********************************************************************** //name: GUA_ADC.h //introduce: 香瓜自定义的ADC驱动的头文件 //author: 甜甜的大香瓜 //email: 897503845@qq.com //QQ group: 香瓜BLE之CC2541(127442605) //shop: opengua.taobao.com //changetime: 2022.04.11 //********************************************************************** #ifndef GUA_ADC_H #define GUA_ADC_H /*********************宏定义************************/ #ifndef GUA_C typedef char GUA_C; #endif #ifndef GUA_U8 typedef unsigned char GUA_U8; #endif #ifndef GUA_8 typedef signed char GUA_8; #endif #ifndef GUA_U16 typedef unsigned short GUA_U16; #endif #ifndef GUA_16 typedef signed short GUA_16; #endif #ifndef GUA_U32 typedef unsigned long GUA_U32; #endif #ifndef GUA_32 typedef signed long GUA_32; #endif #ifndef GUA_U64 typedef unsigned long long GUA_U64; #endif #ifndef GUA_64 typedef signed long long GUA_64; #endif /*********************函数声明************************/ extern GUA_U16 GUA_Read_Adc(GUA_U8 channel); #endif |
3)工程中添加GUA_ADC.c
4)在IAR设置中添加按键驱动源文件路径
$PROJ_DIR$\..\..\SimpleBLEPeripheral\Source\GUA |
2、在应用层中使用
1)应用层代码中添加驱动头文件(SimpleBLEPeripheral.c中)
//GUA #include "GUA_ADC.h" //GUA |
3)添加测试代码(SimpleBLEPeripheral.c的SimpleBLEPeripheral_Init中)
//GUA uint16 nGUA_Adc_value = 0; nGUA_Adc_value = GUA_Read_Adc(5); //GUA |
为了方便仿真查看采集的电压变化,可以多复制几条来测试。
八、注意事项
1、P05用于底板的串口电路,不能直接接外部电路。要从底板跳线接GND\VCC\RESET\P21\P22五根线到核心板插针上。再将P05接到想测的外部电压上。
九、实验结果
设置断点在测试代码处,并仿真全速运行至断点处。
1、当P05脚接3.3V
0x7FF刚好是11位满量程,就是与参考电压一样,本文用的是3.3V参考电压,因此测得外部电压是3.3V。
2、当P05脚接1.63V时(通过两个10K电阻分压3.3V,得到万用表实际测量的1.63V)
采样到0x3E9(1001),通过公式3.3v/2048=x/1001,算得x=1.613V
所以实际1.63V,CC2541测得是1.613V,有0.017V的误差。如果想提高精度,可以使用外部参考电压。
3、当P05脚接GND
测试出现两种情况,一种是采集到0x0002(算得0.0033V),这种是正常的。另一种是测得0xFFFD,这种情况是最高位的符号位变负数,香瓜猜测是接线出来后有一点点压差导致,且香瓜不会算负数……出现这种情况时,也可以适时选择直接软件过滤成0来处理。
原文地址:https://blog.csdn.net/feilusia/article/details/145169359
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!