回答

收藏

[评测分享] 【米尔-STM32MP135入门级开发板测评】米尔-STM32MP135开发板ADC...

#板卡评测 #板卡评测 2426 人阅读 | 0 人回复 | 2023-10-15

本帖最后由 satoll 于 2023-10-17 16:14 编辑

理解一下135的ADC。
STM32MP135 ADC使用的步骤如下:
初始化ADC通道,配置ADC的采样规则。
配置DMA传输参数,包括传输通道、数据存储地址、传输数据块大小、是否启用循环传输等。
配置定时器触发模式,包括定时器选择、触发模式等参数。
启动ADC和DMA传输,同时开启定时器中断。
在定时器中断服务程序中,读取ADC的值并处理数据。
处理完成后,关闭ADC和DMA传输,同时关闭定时器中断。

MYD-YF13X 是一个开发板,提供了两路模拟数字转换器(ADC)通道。默认情况下,每个通道都提供一个电压值。ADC 的测试是通过文件系统 sysfs 接口来实现的。下面以 ADC 通道 2 和通道 8 为例进行说明。

首先,我们需要找到 ADC 对应的设备文件,通常在 /dev 目录下。可以使用以下命令来查看设备文件列表:
ls /dev/ad*
这会列出所有 ADC 设备文件,其中 ad 表示 ADC,后面的数字表示通道号。例如,/dev/ad0 表示 ADC 通道 0,/dev/ad2 表示 ADC 通道 2,以此类推。

接下来,我们可以使用 sysfs 接口来读取 ADC 的值。在 Linux 中,ADC 的值可以通过以下路径读取:

/sys/class/hwmon/hwmon*/in*
其中,hwmon* 表示 ADC 设备文件,in 表示输入电压。例如,要读取 ADC 通道 2 的电压值,可以执行以下命令:
cat /sys/class/hwmon/hwmon2/in0_input
类似地,要读取 ADC 通道 8 的电压值,可以执行以下命令:
cat /sys/class/hwmon/hwmon3/in8_input
上述命令将返回一个十进制数值,表示 ADC 通道的电压值。

如果想要测试 ADC 的功能是否正常,可以使用以下命令将 ADC 值输出到控制台:
echo 1 > /sys/class/hwmon/hwmon*/in*/uevent
这将强制 ADC 进行一次转换,并将结果读入到上述命令指定的路径中。注意,上面的命令中的 hwmon* 表示 ADC 设备文件,而 in* 表示输入电压的属性文件。
上面是在百度里面查的135的与ADC有关的使用步骤,我这边只参照了部分。
下面正式开始:
1、ADC具体操作步骤

2.ADC板载位置

3、输出结果与操作步骤

操作步骤与命令

4、ADC代码
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <dirent.h>
  7. #include <unistd.h>
  8. #include <sys/ioctl.h>
  9. #include <errno.h>
  10. #include <unistd.h>

  11. void main()
  12. {
  13.         printf("start!\n");
  14.         
  15. #if 1
  16.         const char* fileName="/sys/bus/iio/devices/iio:device0/in_voltage2_raw";
  17. #else
  18.         const char* fileName="/home/fang/MYIR/Dome/2_adc/test.txt";
  19. #endif
  20.         while(1)
  21.         {
  22.                 int fd=open(fileName,O_RDONLY);
  23.                 if(fd<0)
  24.                 {
  25.                         printf("open file fial!\n");
  26.                 }
  27.                 char buf[128];
  28.                 while(read(fd,buf,sizeof(buf)-1)>0)
  29.                 {
  30.                         int val=atoi(buf);
  31.                         float VolVal=val*1.0/4096*3.3;        //=k*val*1.0/4096+b;
  32.                         printf("VolVal:%.2fV\n",VolVal);

  33.                         //printf("%s,%d\n",buf,val);
  34.                 }
  35.                 close(fd);
  36.                 sleep(1);
  37.         }
  38.         printf("ok\n");
  39.         
  40. }
复制代码
编译代码,和用SCP发送可执行程序到板子


5、输出视频


分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条