Перейти к содержанию

Измерить напряжение питание PIC


alfik777

Рекомендуемые сообщения

Необходимо измерять напряжение питание контроллера. Используется pic16f1828 c использованием встроенного опорного напряжения FVR.  По старинке хотел заводить питание  через делитель на один из входов АЦП чтобы сравнивать с  встроенным опорным. Но, кажется, где-то видел, что в новых контроллерах с FVR есть возможность измерить напряжение питание без дополнительного подключения его (через делитель) ко входу АЦП, т.е. совсем ничего не подключая внешне. Прямого ответа в DS не увидел.

 

Ссылка на комментарий
Поделиться на другие сайты

Большинство микроконтроллеров такой плюшки не имеют , поэтому нужно юзать делитель и заводить на ацп .

Что может быть лучше в радиоэлектронике, чем программирование микроконтроллеров ?

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

4 часа назад, alfik777 сказал:

Необходимо измерять напряжение питание контроллера. Используется pic16f1828 c использованием встроенного опорного напряжения FVR.

 

Все очень просто. FVR уже подключен к АЦП, нужно только его выбрать  входным мультиплексором. Напряжение питания (если именно оно использовано в качестве опорного АЦП) будет равно  1024*Ufvr/N, где N - измеренное значение.

Такие вещи не пишут в ДШ, поскольку они элементарны и следуют из простой формулы измерений:   N=Uизм*1024/UопАЦП

ЗЫ. Совет применять делитель с мегаомным значением сопротивления совершенно безграмотен, ибо максимально допустимое внутреннее сопротивление источника сигнала ограничено даташитом величиной в 10 кОм. Иначе мы будем измерять "погоду на Кольском полуострове".

ЗЗЫ. Учитывая, что включение FVR приводит к заметному росту потребления, следует его включать лишь на время измерения. Как и сам АЦП. В новых контроллерах Микрочипа управление включением периферии обычно делается с помощью специального регистра (PMD), что упрощает процессы администрирования потребления. Но это только начиная с "пятизначного" семейства  PIC16F1xxxx

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Что -то я, похоже, в двух соснах затерялся... Т.е. мне нужно  ADPREF<1:0> установить в 00 (ADCON1 ) , а на коммутаторе CHS<4:0> установить 11111 (ADCON0) ?

ADCON0.jpg.869c1cc5500d5567ffc495244b57b64f.jpgADCON1.thumb.jpg.ccaa850a2f6177b0dbff449a56b8b9d5.jpg

Ссылка на комментарий
Поделиться на другие сайты

Да именно так и  плюс  к этому еще и ADCON1 <ADNREF> =0 (по умолчанию это и так будет, но следует устанавливать принудительно во избежании коллизий при дальнейших манипуляциях с кодом).

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Ну это отрицательный полюс,  как- бы само собой подразумевается что его к Vss надо. Сейчас попробовал в таком варианте...Но что-то не то...  Считывается всегда 0. Если в ADCON1 выбираю аналоговый канал, например, AN3 и подключаю тот же переменный резистор как делитель, то  нормально считываю байт от 0 до FF,  а  после установки  11111 =FVR (Fixed Voltage Reference) Buffer 1 Output(2)  считываются нули.

Ссылка на комментарий
Поделиться на другие сайты

Наверное потому, что FVR нужно ВКЛЮЧИТЬ. Причем не только сам модуль, но  и  коммутатор НА ЕГО ВЫХОДЕ К АЦП, выбрав его выходное напряжение с учетом напряжения питания МК. (FVRCON)

 

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Включал конечно...Но, видимо, переработался,  синтаксическую ошибку сделал и бьюсь...Вместо = минус стоял... Спасибо за помощь,  начало считывать, вроде даже правдоподобное что-то.

Ссылка на комментарий
Поделиться на другие сайты

Учтите, что точность опорного источника в МК не высока (смотрите даташит в конце). То есть, либо Вы миритесь с такой точностью, либо находите способ калибровки встроенного FVR. И так у всех МК. Настоящий прецизионный источник стоит раза в 3...4 дороже МК. 

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Я не просчитывал по точности...  ну мне на вскидку кажется что этого достаточно будет, так как мне необходимо будет отловить момент 20% заряда аккумулятора. Т.е. отследить падение питающего напряжения до 3,8в .

Ссылка на комментарий
Поделиться на другие сайты

Тогда озвучу величины: -8...+6%. Такой вот разброс. Советую производить калибровку при замене батарейки питания. Тогда 100% станут опорными и измерения весьма точными.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

  • 5 лет спустя...
В 22.04.2018 в 13:56, my504 сказал:

Все очень просто. FVR уже подключен к АЦП, нужно только его выбрать  входным мультиплексором. Напряжение питания (если именно оно использовано в качестве опорного АЦП) будет равно  1024*Ufvr/N, где N - измеренное значение.

Такие вещи не пишут в ДШ, поскольку они элементарны и следуют из простой формулы измерений:   N=Uизм*1024/UопАЦП

ЗЫ. Совет применять делитель с мегаомным значением сопротивления совершенно безграмотен, ибо максимально допустимое внутреннее сопротивление источника сигнала ограничено даташитом величиной в 10 кОм. Иначе мы будем измерять "погоду на Кольском полуострове".

ЗЗЫ. Учитывая, что включение FVR приводит к заметному росту потребления, следует его включать лишь на время измерения. Как и сам АЦП. В новых контроллерах Микрочипа управление включением периферии обычно делается с помощью специального регистра (PMD), что упрощает процессы администрирования потребления. Но это только начиная с "пятизначного" семейства  PIC16F1xxxx

Понимаю тема старая. Но поиском с гугла вышел на эту тему.
У меня похожая задача, но с ньюансом. Мне нужно замерять АЦП на ноге, и плюс замерять замерять FVR. (чтоб узнать напряжение питания МК) По отдельности получается замерять и то и то.
А вот вместе не получается. Ну естественно пытаюсь по очереди замерять.
Микроконтроллер PIC16F1847
Я уже как только не пробовал, но где то косячу. При попытке замера по очереди, один сигнал влияет на другой причем очень сильно.
Напряжение питания МК 5.0в (для теста)
По отдельности например вот так:
FVR 2.048в = ADC 415
мультиметром на ноге RA4 3.950в = ADC 800.

Если ничего не меняю физически но включаю замер по очереди то:
FVR 2.048в = ADC 685
мультиметром на ноге RA4  3.950в = ADC 640.

Код (без лишнего) на данный момент выглядит так:

  unsigned int read_adc (){//функция чтения ацп
  int tmp;
            CHS4_bit=0;  //этими битами выбираю канал. page 143
            CHS3_bit=0;
            CHS2_bit=1;
            CHS1_bit=0;
            CHS0_bit=0;
            /*
            00000 = AN0
            00001 = AN1
            00010 = AN2
            00011 = AN3
            00100 = AN4
            00101 = AN5
            00110 = AN6
            00111 = AN7
            01000 = AN8
            01001 = AN9
            01010 = AN10
            01011 = AN11
            01100 = Reserved. No channel connected.
            
            11100 = Reserved. No channel connected.
            11101 = Temperature Indicator
            11110 = DAC output(1)
            11111 = FVR (Fixed Voltage Reference) Buffer 1 Output(2)
            */

            ADON_bit=1; //включаю ацп
            ADGO_bit=1; //этим битом запускаю замер  ацп на выбранном канале
           while (GO_bit){}; // если ацп работает и снимает показания то ниче не делаем  висим тут.
           tmp = (unsigned int)ADRESH << 8; //верхний регистр приводим к инту и сдвигаем влево на 8 бит так как это верхний регистр
           tmp |= ADRESL;//нижний регистр склеиваю
        
            ADON_bit=0; //вырубаю  ацп
            
            CHS4_bit=1;  //этими битами выбираю канал. page 143
            CHS3_bit=1;
            CHS2_bit=1;
            CHS1_bit=0;
            CHS0_bit=0;
  return tmp;
  }
  
  unsigned int read_fvr (){//функция чтения fvr
  int tmp_fvr;
            ADFVR1_bit=1;
            ADFVR0_bit=0;
            FVREN_bit=1;
            CHS4_bit=1;  //этими битами выбираю канал. page 143
            CHS3_bit=1;
            CHS2_bit=1;
            CHS1_bit=1;
            CHS0_bit=1;
  
			ADON_bit=1; //запускаю работу ацп
            ADGO_bit=1; //этим битом запускаю замер  ацп на выбранном канале

           while (GO_bit){}; // если ацп работает и снимает показания то ниче не делаем  висим тут.
           
           tmp_fvr = (unsigned int)ADRESH << 8; //верхний регистр
           tmp_fvr |= ADRESL;//нижний регистр склеиваю
           
		   ADON_bit=0; //вырубаю  ацп
           TRISA4_bit=1;//RA4 на вход
           ANSA4_bit=1;//аналоговый пин
           FVREN_bit=0; //пробую выррубать FVR
           ADFVR1_bit=0; //пробую вырубать буфер FVR
           ADFVR0_bit=0;
    return tmp_fvr;
  }

void main() {
    while (1) {//основной цикл
    adc=read_adc(); 
    fvr=read_fvr();
      }
}

image.png.9f88e2b3b40d8c3a2a86a2c545028efe.png

Изменено пользователем Zombie47
Ссылка на комментарий
Поделиться на другие сайты

Умная мысля приходит напосля. К сожалению пока не изложишь вопрос на форуме, мой мозг не структурирует информацию, а вот как изложишь, так нахожу решение.
В общем я точно не понял в чем было дело, но решил не умничать с каждым битом отдельно, а целиком весь регистр настраивал. Предположительно тут последовательность конфигурирования и обязательная задержка.
В общем вот с этим кодом работает как надо:
 

unsigned int read_adc (){//функция чтения ацп
  int tmp;
           ADCON0=0b00010011; //даташит page 143 ниже описание:
           //7 read as 0
           //6-2bit=00100 (канал для АЦП RA4)
           //1bit=0 (GO/DONE как я понял это что вроде флага, в процессе АЦП или нет )
           //0bit=0 (ADON этот бит запускает работу ацп.)
          
            Delay_ms(1);//обязательна без нее не работает
            ADON_bit=1; //еще раз включаю ацп после задержки
            ADGO_bit=1; //этим битом запускаю замер  ацп на выбранном канале
          
           while (GO_bit){}; // если ацп работает и снимает показания то ниче не делаем  висим тут.
           tmp = (unsigned int)ADRESH << 8; //верхний регистр приводим к инту и сдвигаем влево на 8 бит так как это верхний регистр
           tmp |= ADRESL;//нижний регистр склеиваю
           ADCON0=0b01111111; //переконфигурирую под замер FVR
          return tmp;
  }
 
  unsigned int read_fvr (){//функция чтения ацп fvr
  int tmp_fvr;
           FVRCON = 0b11000010; //конфигурирую и включаю FVR page 133
          //bit 7 FVREN: 1 = Fixed Voltage Reference is enabled
          //bit 6 FVRRDY: 1 = Fixed Voltage Reference output is ready for use
          //bit 5 TSEN: 0 = Temperature Indicator is disabled
          //bit 4 TSRNG: 0 =VOUT = VDD - 2VT (Low Range)
          //bit 3-2 CDAFVR<1:0>: 00 = Comparator FVR Buffer is off
          //bit 1-0 ADFVR<1:0>: 10 = ADC FVR Buffer Gain is 2x, with output VADFVR = 2x VFVR(4)
            ADCON0=0b01111111; //обязательно еще раз конфигурирую ацп даташит page 143 ниже описание:
           //7 read as 0
           //6-2bit=00100 (канал для АЦП RA4)
           //1bit=0 (GO/DONE как я понял это что вроде флага, в процессе АЦП или нет )
           //0bit=0 (ADON этот бит запускает работу ацп.)

           while (GO_bit){}; // если ацп работает и снимает показания то ниче не делаем  висим тут.
           tmp_fvr = (unsigned int)ADRESH << 8; //верхний регистр
           tmp_fvr |= ADRESL;//нижний регистр склеиваю
           FVRCON = 0b00000000; //выключаю FVR page 133
           ADCON0=0b00010000; //переконфигурирую под ацп даташит page 143 ниже описание:
    return tmp_fvr;
  }

 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...