nrf52832的saadc基本功能:
1、支持差分输入方式,测量结果为两输入端口电压差的转换的有符号数值,这个功能对于啥桥式传感器的数据采集真是太爽了,可以省一个电平平移放大电路
2、原始分辨率最高提升到12位,14位那个过采样方式实现的,使用限制很多,不能扫描,还不如自己软件解决要多少位有多少位。
3、新增“通道”概念,每个通道可以选定使用的+-信号源,转换是以通道为个体进行的,如果使能多个通道,则一次触发完成全部通道的扫描转换。
4、自带EasyDMA,可以直接把数据打到RAM内,但不能像STM32那样支持循环传输,复位指针只能靠手动
5、取消了外部电压参考输入,这个其实有点蛋疼,在测量端供电和MCU供电之间存在变动情况下可能会引入误差,对于低频信号,可以用软件进行补偿,但也还有点蛋疼
6、可以自主配置采样时间,端口负载电阻之类参数
大家上网查资料都应该知道,nrf52832各种各样的例程代码非常少,特别是带操作系统,如freertos的例程少之又少。今天给大家分享两个关于nrf52832的saadc的两种用法。一种是DMA的方式,使用硬件内部的PPI映射,和定时器,可以实现固定的采样频率采集ADC值;还有一种是单次转换ADC,使用定时器设置规定的采样频率;
官方提供的saadc例程是使用第一个方法(不带操作系统的)。在实际应用中,这种方法可能不适用。
下面,我来介绍第一种方法的底层配置及应用
(1)saadc配置
如图所示,1:配置单端通道输入AIN0,关于这个配置,涉及到采样增益,参考电压选择,过采样选择和差分/单端输入选择,后面的文章我会继续更新讲解,感兴趣的话可以关注我,一起学习;2:提供saadc中断回调函数,第一个形参表示对应的通道配置结构体,如果为NULL,则表示默认使用一个回调函数,这里也可以输入channel_config;在多通道saadc中,这里可以设定多个回调函数,后面我也会更新文章专门介绍;3:通道配置初始化;4:nrf52832采样双buffer缓存,当然你可以只用一个,这里的意思当采样满SAMPLES_IN_BUFFER个数据后,触发回调函数,然后在回调函数中处理数据;
(2)定时器和PPI配置
如图所示,1:PPI初始化,PPI具体是什么不需要去深究,只要学会如何使用他的api接口就可以了;2:定时器初始化配置及中断函数的绑定;3:定时时间设置,单位为ms,设置定时器为比较模式,这里我们关注最后一个形参,false表示定时中断失能,true表示定时中断失能,如果使用EsayDMA的PPI方式,就使用不到定时中断函数,设置好定时时间后,会自动根据定时好的时间循环去采样,设置的时间即为采样频率,但是必须给出中断函数,这里的中断函数就是timer_handler。4:获取指定定时器比较事件的地址和saadc采样任务;5:分配ppi通道给saadc采样任务。
(3)采样事件使能
(4)回调函数
好了,第一种方法的配置介绍这里,这种方法在例程中都有。下面给大家介绍第二种,单次转换+定时器的方法,以单通道为例,上面详细介绍了函数的作用,下面我就不具体介绍了。
(1)saadc初始化配置
这里配置了一个差分输入的saadc,单通道的话,这里的SAMPLES_IN_BUFFER为1
(2)定时器初始化
将ppi初始化及相关配置取消,将定时器中断使能true。
(3)定时器中断函数
表示定时器400ms后采样1个点,触发回调函数。SAMPLES_IN_BUFFER=1
(4)回调函数
好了,两种方法都已经介绍完了,下次我会分享一篇关于多通道单次转换的文章,希望大家持续关注,如果有什么不对的地方,多多指教,谢谢