NRF52832笔记(1) ADC使用
发布日期:2021-06-29 05:35:06 浏览次数:2 分类:技术文章

本文共 1566 字,大约阅读时间需要 5 分钟。

nrf52832 adc使用

1:adc输入范围的计算

需要注意点:
(1):选择参考电压,有以下几种
在这里插入图片描述
(2):增益大小,增益范围有以下几种
在这里插入图片描述
2:对输入电压的计算
计算公式如下:输入电压范围=参考电压/增益
Input range = (± 0.6 V or ±VDD/4)/Gain
Input range = (VDD/4)/(1/4) = VDD
Input range = (0.6 V)/(1/6) = 3.6 V

举例:

如果需要测量输入的电压最大只有1.2v,而选择输入的参考电压是0.6v,则需要选择的增益GAIN可为NRF_SAADC_GAIN1_2,这就得到输入电压的大小为1.2v

3:程序配置过程

3.1 adc 初始化驱动

void InitAdc(nrf_saadc_input_t adc_chann){
ret_code_t err_code; err_code=nrf_drv_saadc_init(0,saadc_callback); // ²Î¿¼µçѹÊÇ1.2v APP_ERROR_CHECK(err_code); nrf_saadc_channel_config_t channel_cfg = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(adc_chann); err_code=nrf_drv_saadc_channel_init(0,&channel_cfg); APP_ERROR_CHECK(err_code);}

3.2 开始初始化和转化

void StartAdc(nrf_saadc_input_t input,uint8_t times){
static uint8_t first=1; if(first) {
first=0; InitAdc(input); } nrf_drv_saadc_buffer_convert(m_buffer_pool, 1); nrf_drv_saadc_sample(); busy_ms=0; while(true==nrf_drv_saadc_is_busy()) {
busy_ms++; nrf_delay_ms(1); }}

3.3 adc返回事件

void saadc_callback(nrf_drv_saadc_evt_t const * p_event){
if (p_event->type == NRF_DRV_SAADC_EVT_DONE) {
avg_sample = p_event->data.done.p_buffer[0]; battery_adc_valu = (ADC_valu(avg_sample) + 0);// realy adc src + calibration value. }}

3.4 :计算实际电压值

#define ADC_REF 600 (0.6v的参考电压)
#define ADC_10BIT 1024 (10位ADC)
#define ADC_gain 3 (增益为1/3)

1: 计算实际的电压值

方法1:

#define ADC_valu(ADC_VALUE) ((((ADC_VALUE) *ADC_REF) / ADC_10BIT) * ADC_gain)
其中输入 ADC_VALUE = avg_sample

方法 2:

voltage = (float)avg_sample*3.6/1024;

3:多路通道

可以加入QQ群:687360507

与大伙沟通交流,技术在于分享而进步

转载地址:https://blog.csdn.net/zhi_Alanwu/article/details/102870225 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ble原理(1)蓝牙ble协议知识
下一篇:规则引擎组内分享

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月08日 16时33分45秒