Как использовать и настроить АЦП STM32F407G-Discovery с nanoFramework?

Я пытаюсь использовать предустановленные АЦП ChibiOS. Доступные каналы согласно спецификации :

  • ПК1, АЦП1 IN11
  • ПК2 АЦП1 IN12
  • ПА6 АЦП2 ВХ6
  • PA7 АЦП2 IN7
  • PB0 АЦП2 IN8
  • Датчик температуры АЦП1
  • VrefInt АЦП1
  • Вбат АЦП1

Предустановленные АЦП из источника сборки ChibiOS (target_system_device_adc_config.cpp):

      #include <sys_dev_adc_native_target.h>
 
const NF_PAL_ADC_PORT_PIN_CHANNEL AdcPortPinConfig[] = {
 
    // ADC1
    {1, GPIOC, 1, ADC_CHANNEL_IN11},
    {1, GPIOC, 2, ADC_CHANNEL_IN12},
 
    // ADC2
    {2, GPIOA, 6, ADC_CHANNEL_IN6},
    {2, GPIOA, 7, ADC_CHANNEL_IN7},
    {2, GPIOB, 0, ADC_CHANNEL_IN8},
 
    // these are the internal sources, available only at ADC1
    {1, NULL, 0, ADC_CHANNEL_SENSOR},
    {1, NULL, 0, ADC_CHANNEL_VREFINT},
    {1, NULL, 0, ADC_CHANNEL_VBAT},
};
 
const int AdcChannelCount = ARRAYSIZE(AdcPortPinConfig);

Как использовать АЦП? Есть ли способ настроить ADC в коде C#? Буду признателен за любую помощь. Спасибо

Я написал этот код:

      using System;
using System.Diagnostics;
using System.Threading;
using System.Device.Adc;
 
namespace ADCMeasure
{
    public class Program
    {
        private static int adcValue;
 
        public static void Main()
        {
            AdcController adcController = new AdcController();
            AdcChannel pa6Channel = adcController.OpenChannel(6);
 
            while (true)
            {
                adcValue = pa6Channel.ReadValue();
                double ratio = pa6Channel.ReadRatio();
                Debug.WriteLine($"{nameof(adcValue)}: {adcValue}; {nameof(ratio)}: {ratio}; MaxValue: {adcController.MaxValue}; MinValue: {adcController.MinValue}");
                Thread.Sleep( 1000 );
            }
        }
    }
}

и иметь вывод консоли отладки:adcValue: 1695; ratio: 0.41343101; MaxValue: 4095; MinValue: 0

Это соответствует реальным 2,7В на PA6.

Если я переключу канал на 7-й(adcController.OpenChannel(7)),

У меня естьadcValue: 4; ratio: 0; MaxValue: 4095; MinValue: 0и 0 В на PA7.

Если я подключу PA7 (7-й канал) к внешнему 2В, у меня не будет никаких изменений в консоли отладки, но я вижу эти 2В на PA7 по вольтметру, это будет примерноadcValue: 1260иratio: 0.30769

1 ответ

Индекс, который вы используете при вызовеadcController.OpenChannel(6)является индексомAdcPortPinConfig[]множество. Используя 7, вы читаете ADC_CHANNEL_VBAT. (имейте в виду, что это отсчет от 0)

Другие вопросы по тегам