我正在使用BeagleBone Black SBC闪存的2015年7月debian图像,并尝试利用板载ADC来测量电压值 . 我知道sysfs adc内核驱动程序存在问题导致包含每个ADC值的虚拟文件被锁定导致“资源暂时不可用”错误 . 为了避免这种情况,我试图利用libpruio和PRU来读取ADC值 . 但是会出现类似的问题 . ADC值冻结,不会更新 . 关闭程序并重新运行它会导致程序冻结(排序) . 重启的唯一解决方案 .

所以问题是双重的:1)有没有经验使用PRU的libpruio和BeagleBone Black的人都遇到过这个问题,如果有的话,你的解决方案是什么?

2)有没有人知道在BeagleBone黑色(包括不同的PRU库)上实际使用板载ADC的方法?据我所知,它几乎没有功能 . 我所看到的所有使用它的方法都充满了完全破坏错误 . 似乎BeagleBone完全具备有用的ADC能力 .

访问带有libpruio的ADC的基本代码:

system("echo PRUSSDRV > /sys/devices/bone_capemgr.9/slots");
    PruIo *io = pruio_new(0, 0x98, 0, 1);
    if (io->Errr)
    {
            printf("Initialisation failed (%s)\n", io->Errr);
    }

    if(pruio_config(io, 0, 0x1FE, 0, 4, 0))
    {
            printf("Config failed (%s)\n", io->Errr);
    }

    adc_raw = io->Value[6];

可根据要求提供更多代码 . 此外,当使用VDD_ADC,GND_ADC和AIN#从外部器件读取而不是使用分压器调整电路时,问题更为普遍 .

外部源不超过1.8v(引脚中的ADC容限高达1.8v) .

提前感谢您的想法 .

编辑:经过进一步的实验,我认为部分问题是尝试输出PWM信号,同时读取ADC值 . 只有在输出PWM信号时,程序似乎才会失败 .

有没有人遇到过这个问题?解决方案?再次感谢您的提前 .

更新:我正在尝试使用PWM驱动电机系统和ADC读取输出电压 . 只有在电机本身运行时,无论输出是否连接到电路板,问题似乎都会发生 . 不仅仅是输出PWM信号 .

如果我切断电机电源并且电路板仍然输出PWM,它可以正常工作 .

如果我给电机供电并且没有将输出电机连接到ADC,而是使用VDD_ADC将ADC引脚连接到单独的微调电位器,则ADC会冻结 .

如果我给电机供电并将ADC连接到输出电机,ADC也会冻结 .

因此,电动机实际运行似乎是一个问题......任何人都有任何想法?