【中科蓝讯AB32VG1 RISC-V评估板】电流电压检测项目开发
[复制链接]
1.首先创建项目,项目名称 meterADC
2、然后选择硬件,开通ADC,这里板子只支持ADC0,芯片支持多个通道,
3、从文件中可以找到引脚的配置,其中AB32VG1 有 16 个通道的 10 bit 的 ADC 模块。
这里对应的是arduino接口的A3, 是ADC7,引脚PE.5
4、创建新的文件adc.c,代码如下
#include <rtthread.h>
#include <rtdevice.h>
#define ADC_DEV_NAME "adc0" /* ADC 设备名称 */
#define ADC_DEV_CHANNEL 7 /* ADC 通道 */
#define REFER_VOLTAGE 330 /* 参考电压 3.3V,数据精度乘以100保留2位小数*/
#define CONVERT_BITS (1 << 10) /* 转换位数为10位 */
static int adc_vol_sample(int argc, char *argv[])
{
rt_adc_device_t adc_dev;
rt_uint32_t value, vol;
rt_err_t ret = RT_EOK;
/* 查找设备 */
adc_dev = (rt_adc_device_t)rt_device_find(ADC_DEV_NAME);
if (adc_dev == RT_NULL)
{
rt_kprintf("adc sample run failed! can't find %s device!\n", ADC_DEV_NAME);
return RT_ERROR;
}
/* 使能设备 */
ret = rt_adc_enable(adc_dev, ADC_DEV_CHANNEL);
/* 读取采样值 */
value = rt_adc_read(adc_dev, ADC_DEV_CHANNEL);
rt_kprintf("the value is :%d \n", value);
/* 转换为对应电压值 */
vol = value * REFER_VOLTAGE / CONVERT_BITS;
rt_kprintf("the voltage is :%d.%02d \n", vol / 100, vol % 100);
/* 关闭通道 */
ret = rt_adc_disable(adc_dev, ADC_DEV_CHANNEL);
return ret;
}
/* 导出到 msh 命令列表中 */
MSH_CMD_EXPORT(adc_vol_sample, adc voltage convert sample);
编译并下载,就可以用finSH来用adc_vol_sample命令来读取A3的电压输入值,连接到采样电阻,就可以读取转换后的电压值。对应于电流值,也需要用采样电阻,把电流转换为电压,用ADC读取。
其中ADC部分的核心代码没有并未完全公开,大部分内容都封装到了 libhal.a 库文件中,但是使用rtthread可以直接无缝读取。
5、蓝牙部分的猜想。
整个开发板的最大悬疑就是蓝牙天线,虽然没有说明有蓝牙功能,但是却有蓝牙天线,因此,可以理解为这个芯片其实是一个蓝牙芯片,还带FM模块,但是因为驱动还没有适配成功,所以先作为通用MCU评测和使用,因此,后续如果软件更新,更值得期待。
|