Jump to content

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


alfik777
 Share

Recommended Posts

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

 

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

ИБП MEAN WELL серии DRC-180 на DIN-рейку – новое решение для пожарно-охранных систем

Компания MEAN WELL расширила семейство DRC-40/60/100 – недорогих ИБП (UPS) 2-в-1 (ИП и контроллер заряда/разряда АКБ в одном корпусе) с креплением на DIN-рейку. Теперь доступны модели мощностью 180 Вт новой серии DRC-180.

Источник питания DRC-180 предназначен для создания систем бесперебойного питания с внешней АКБ и может использоваться в охранно-пожарных системах, системах аварийной сигнализации, контроля доступа и в других приложениях, где требуется простая, недорогая и в то же время качественная система бесперебойного питания соответствующей мощности. Подробнее>>

Замена DC/DC-преобразователями MORNSUN изделий европейских производителей
Третье поколение DC/DC-преобразователей популярного китайского производителя MORNSUN для монтажа на печатную плату не только не уступает по характеристикам изделиям европейских производителей, но и превосходит их по таким параметрам, как напряжение изоляции, рабочий температурный диапазон и максимальная емкость нагрузки.
Читать статью>>

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

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

 

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

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

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

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

Edited by my504

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

Link to comment
Share on other sites

ИП MORNSUN на DIN-рейку для промавтоматизации – аналог продукции известных брендов
Специалистам по промавтоматизации и системным интеграторам, до недавнего времени применявшим в ответственных проектах высококачественные источники питания производства Phoenix Contact, PULS и прочих подобных производителей, после их ухода с российского рынка следует обратить внимание на высокотехнологичные DIN-реечные серии ИП LIMF, LIHF и LITF производства MORNSUN. Читать статью>>

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

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

Link to comment
Share on other sites

Вебинар «Мощные модульные системы питания MEAN WELL 3+N. Новинки и хиты» (22.06.2023)
Приглашаем 22 июня на вебинар, посвященный подходу компании MEAN WELL к созданию мощных управляемых систем низковольтного и высоковольтного питания и зарядных установок для промышленного, технологического, телекоммуникационного, медицинского, радиопередающего и другого оборудования, а также для систем альтернативной энергетики.
На вебинаре мы рассмотрим новинки и серийную продукцию в концепции «3+N», расскажем об этой концепции и о том, как создать из готовых модулей систему питания мощностью до 360 кВт с напряжением до 380…400 В (постоянного тока). Будут представлены ИП с рециркуляцией энергии для тестового оборудования и модули управления питанием. Подробнее>>

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

Edited by my504

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

 

Edited by my504

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

  • 5 years later...
Posted (edited)
В 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

Edited by Zombie47
Link to comment
Share on other sites

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

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;
  }

 

Link to comment
Share on other sites

9 часов назад, Zombie47 сказал:
Delay_ms(1);//обязательна без нее не работает

Изучить раздел 16.3 A/D Acquisition Requirements датащита религия не позволяет?
 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...