我正在使用BeagleBone Black SBC闪存的2015年7月debian图像,并尝试利用板载ADC来测量电压值。我知道sysfs adc内核驱动程序存在问题导致包含每个ADC值的虚拟文件被锁定导致“资源暂时不可用”#34;错误。为了避免这种情况,我试图利用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)。
提前感谢您的想法。
编辑:经过进一步的实验,我认为部分问题是在读取ADC值的同时尝试输出PWM信号。只有在输出PWM信号时,程序似乎才会失败。
有没有人遇到过这个问题?解决方案?再次感谢。
更新:我正在尝试使用PWM驱动电机系统和ADC读取输出电压。只有在电机本身运行时,无论输出是否连接到电路板,问题似乎都会发生。不仅仅是输出PWM信号。
如果切断电机电源并且电路板仍然输出PWM,则工作正常。
如果我给电机供电并且没有将输出电机连接到ADC,而是使用VDD_ADC将ADC引脚连接到单独的微调电位器,则ADC会冻结。
如果我给电机供电并且ADC连接到输出电机,ADC也会冻结。
所以看起来电机真正运行的问题......任何人有什么想法?