本文基于触觉智能RK3506核心板/开发板,介绍SARADC采集模拟信号使用攻略,包括硬件、驱动层的修改。

SARADC简介
SARADC是Successive Approximation Register Analog-to-Digital
Converter的缩写,是一种常用的模数转换器,用于将模拟信号转换为数字信号。通常用于将来自传感器或模拟信号源的连续模拟信号转换为数字表示,以便数字处理器或微控制器进行进一步处理。
主要优点:在转换过程中只需要很少的外部元件,因此可以集成在单片集成电路中。此外,SARADC具有较低的功耗和较短的转换时间,使其适用于许多低功耗和高速应用。
RK3506的SARADC是一个4通道10bit有效位的数模转化器,电压输入范围通常为0V到1.8V。内核采用工业 I/O子系统来控制ADC,该子系统主要为AD转换或者DA转换的传感器设计。
硬件修改
触觉智能RK3506开发板由于默认未预留SARADC采集通道接口,需整改硬件,修改如下:

断开Q4、R43器件,引出SARADC_IN2引脚:

驱动与内核相关配置
1.SARADC对应的驱动文件所在位置:
kernel/drivers/iio/adc/rockchip_saradc.c
2.设备树配置参考文档:
kernel/Documentation/devicetree/bindings/iio/adc/rockchip-saradc.yaml
3.主要参数说明:
interrupts = :ADC转换完成,产生中断信号。
#io-channel-cells = <1> :描述一个 I/O 通道(I/O Channel)的参数个数。
vref-supply = <&vccadc_ref> :SARADC值对应的参考电压,最大为1.8V,对应的SARADC值为1023。
1.配置内核支持SARADC。

设备树配置 ido-evb3506-v1a-emmc.dtsi开启SARADC,命令如下:
&saradc { vref-supply = <&vcc_1v8>; status = "okay"; };
由于默认设备树复用SARADC_IN2引脚为其他功能,需禁用默认功能配置,命令如下:
--- a/kernel-6.1/arch/arm/boot/dts/ido-evb3506-v1a-emmc.dtsi +++ b/kernel-6.1/arch/arm/boot/dts/ido-evb3506-v1a-emmc.dtsi @@ -155,7 +155,7 @@ }; leds: leds { - status = "okay"; + status = "disabled"; compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&leds_gpio>;
SARADC使用方法
由于系统启动脚本S89ML37init默认会配置 SARADC_IN2引脚为普通GPIO作为4G模块的复位引脚,因此需删除该脚本重启系统进行测试:
rm /etc/init.d/S89ML37init
上电进入系统后,通过用户态接口获取ADC值,因RK3506最高支持4路SARADC通道,即 in_voltage0_raw ~ in_voltage3_raw为有效通道,分别对应 SARADC_IN0 ~ SARADC_IN3:
以SARADC_IN2为例,SARADC_IN2分别接入1.8V 、GND后,执行命令读取输入电压的raw数据:


AD转换计算公式:Vref / (2^n-1) = Vresult / raw,公式说明如下:
Vref:为参考电压1.8v
n: 为 AD 转换的位数,为10位
Vresult: 为用户所需要的采集电压
raw: 为 AD 采集的原始数据
AD 采集到的原始数据 1023,则:Vresult = (1800mv * 1023) / 1023 = 1.8v,与接入的1.8v一致。
AD 采集到的原始数据 1,则:
Vresult = (1800mv * 1) / 1023 = 0.0017v,与接入的GND的电压一致接近0v。
触觉智能RK3506开发板/核心板,搭载瑞芯微RK3506B/RK3506J低功耗多核异构处理器(3核A7@1.5Ghz+M0,满载0.65W),双CAN FD、双网口、6路串口,最高支持-40℃~85℃严苛环境,百元内国产化方案助力工控、IoT与智能设备高效升级!
全部0条评论
快来发表一下你的评论吧 !