Анализатор питания представляет собой программируемый электронный постоянный ток, фиктивная нагрузка с двумя высокими датчиками с высоким побочным напряжением и током для автоматического анализа источников питания, преобразователей постоянного тока/постоянного тока, регуляторов напряжения, батарей, зарядных устройств, потребителей питания и других. Устройство можно управлять через USB -последовательный интерфейс с использованием последовательного монитора или предоставленных Python Skripts. Данные могут быть экспортированы в разброс программ или непосредственно проанализировать с помощью Python Skript.
Электронная цепь управления нагрузкой, которая по существу состоит из оперативного усилителя, MOSFET и шунтированного резистора, гарантирует, что тот же ток протекает независимо от применяемого напряжения.
Для этого шунт 100 МОм, состоящий из трех резисторов 300 мОм, параллельно для правильного рассеивания тепла, расположен в цепи нагрузки, через что измеряется ток. LMV321 Rail-Rail Opamp сравнивает это с целевым значением, которое определяется внутренним цифровым цифровым и аналоговым преобразователем (DAC) через разделитель напряжения и, соответственно, управляет воротами мощности мощности IRL540N Power Mosfet, который, в свою очередь, регулирует ток через его внутреннее сопротивление, установленное таким образом.
Напряжение и ток измеряются с помощью шунтированного резистора с высокой стороной 8 мм, подключенного к INA219 с разрешением 4 мВ/1 мА. Второй INA219 подключен к еще одному шунтирующему резистору 8 мм между терминалом PWR-In и PWR-Out. INA219-это текущий шунт и монитор питания с I²C-совместимым интерфейсом. Устройство отслеживает как падение напряжения шунта, так и напряжение питания шины, с программируемым временем преобразования и фильтрацией. Программируемое калибровочное значение, в сочетании с внутренним множителем, позволяет прямым показаниям тока в Amperes. Выбранное сопротивление шунтирования 8 МОм обеспечивает как очень небольшое влияние на цепь, так и измерение с разрешением 1MA. Для точного измерения следует выбрать шунт -резистор с низкой толерантностью (1% или лучше).
Анализатор питания подключен через USB с ПК или Raspberrypi. Команды для анализатора могут быть отправлены через серийный монитор или с помощью Python Skript на основе графического интерфейса. Анализатор имеет различные встроенные алгоритмы автоматических испытаний. Собранные данные отправляются обратно через последовательный интерфейс/USB на ПК/Raspberrypi. Attiny814 постоянно измеряет мощность и температуру радиатора. Он управляет вентилятором и отрезает нагрузку, когда температура становится слишком горячей.
Attiny814 управляет электронной фиктивной нагрузкой с его внутренним цифровым и аналоговым преобразователем (DAC). Все его 5 внутренних эталонных напряжений используются, чтобы получить максимальную точность и разрешение DAC. ЦАП подключен к Opamp, который действует как усилитель усиления единицы, управляющий сопротивлением MOSFET.
// DAC reference voltages (load current = DAC voltage * R16 / (R15 + R16) / R_SHUNT)
// Reference voltages: 0.55V, 1.1V, 1.5V, 2.5V, 4.3V
const uint8_t DACREF [] = { 0x00 , 0x01 , 0x04 , 0x02 , 0x03 }; // CTRLA.DAC0REFSEL values
const uint16_t DACCUR [] = { 717 , 1434 , 1956 , 3260 , 5608 }; // max current in mA
uint8_t DACreference = 0 ; // start with 0.55V reference
// Setup the digital to analog converter (DAC)
void DAC_init ( void ) {
VREF_CTRLB |= VREF_DAC0REFEN_bm ; // enable DAC reference
_delay_us ( 25 ); // wait for Vref to start up
pinDisable ( DAC_PIN ); // disable digital input buffer
DAC0 . CTRLA = DAC_ENABLE_bm // enable DAC
| DAC_OUTEN_bm ; // enable output buffer
}
// Set the lowest reference voltage possible for the DAC to meet the load current
void DAC_setReference ( uint16_t current ) {
DACreference = 0 ;
if ( current > DACCUR [ 4 ]) current = DACCUR [ 4 ];
while ( current > DACCUR [ DACreference ]) DACreference ++ ;
DAC0 . DATA = 0 ;
VREF_CTRLA &= 0xf8 ;
VREF_CTRLA |= DACREF [ DACreference ];
_delay_us ( 25 );
}
// Set the DAC within the selected reference to the specified load current
void DAC_set ( uint16_t current ) {
if ( current > 5000 ) current = 5000 ;
if ( current > DACCUR [ DACreference ]) DAC0 . DATA = 255 ;
else DAC0 . DATA = ( uint32_t ) 255 * current / DACCUR [ DACreference ];
}
// Set the DAC and its reference to the specified load current
void DAC_setLoad ( uint16_t current ) {
DAC_setReference ( current ); // set suitable voltage reference
DAC_set ( current ); // set DAC according to desired load
}
// Reset the load to minimum
void DAC_resetLoad ( void ) {
DAC_setLoad ( 0 ); // reset the load to minimum
}Команды, отправленные через USB-серийный преобразователь, хранятся в 16-байтовом командном буфере. Это делается с помощью прерываний, так что нагрузка и управление вентилятором, например, могли продолжать работать параллельно. Как только команда была полностью получена, установлен флаг CMD_COMPL. Затем анализатор извлекает команду и аргументы.
// UART definitions and macros
#define UART_BAUD 115200
#define UART_BAUD_RATE 4.0 * F_CPU / UART_BAUD + 0.5
#define UART_ready () (USART0.STATUS & USART_DREIF_bm)
// UART command buffer and pointer
#define CMD_BUF_LEN 16 // command buffer length
volatile uint8_t CMD_buffer [ CMD_BUF_LEN ]; // command buffer
volatile uint8_t CMD_ptr = 0 ; // buffer pointer for writing
volatile uint8_t CMD_compl = 0 ; // command completely received flag
// UART init
void UART_init ( void ) {
pinOutput ( TXD_PIN ); // set TX pin as output
USART0 . BAUD = UART_BAUD_RATE ; // set BAUD
USART0 . CTRLA = USART_RXCIE_bm ; // enable RX interrupt
USART0 . CTRLB = USART_RXEN_bm // enable RX
| USART_TXEN_bm ; // enable TX
}
// UART transmit data byte
void UART_write ( uint8_t data ) {
while (! UART_ready ()); // wait until ready for next data
USART0 . TXDATAL = data ; // send data byte
}
// UART RXC interrupt service routine (read command via UART)
ISR ( USART0_RXC_vect ) {
uint8_t data = USART0 . RXDATAL ; // read received data byte
if (! CMD_compl ) { // command still incomplete?
if ( data != 'n' ) { // not command end?
CMD_buffer [ CMD_ptr ] = data ; // write received byte to buffer
if ( CMD_ptr < ( CMD_BUF_LEN - 1 )) CMD_ptr ++ ; // increase and limit pointer
} else if ( CMD_ptr ) { // received at least one byte?
CMD_compl = 1 ; // set command complete flag
CMD_buffer [ CMD_ptr ] = 0 ; // write string terminator
CMD_ptr = 0 ; // reset pointer
}
}
}
// Wait for, read and parse command string
void CMD_read ( void ) {
while (! CMD_compl ) updateLoadSensors (); // maintain fan control
uint8_t i = 0 ;
cmd = CMD_buffer [ 0 ];
argument1 = 0 ; argument2 = 0 ;
while ( CMD_buffer [ ++ i ] == ' ' );
while ( CMD_buffer [ i ] > ' ' ) argument1 = argument1 * 10 + CMD_buffer [ i ++ ] - '0' ;
while ( CMD_buffer [ i ] == ' ' ) i ++ ;
while ( CMD_buffer [ i ] != 0 ) argument2 = argument2 * 10 + CMD_buffer [ i ++ ] - '0' ;
CMD_compl = 0 ;
}DEVICE=attiny814 PROGRMR=serialupdi PORT=/dev/ttyUSB0 make install для компиляции, сжигайте предохранители и загрузите прошивку (измените устройство, Progrmr и порт соответственно). Python должен быть установлен на вашем ПК, чтобы использовать приложение Python на основе графического интерфейса. Большинство распределений Linux уже включают это. Пользователи Windows могут следовать этим инструкциям. Кроме того, должны быть установлены Pyserial и Tkinter (8,6 или новее). Тем не менее, они уже включены в большинство установок Python.
Пользователям Windows также может потребоваться установить драйвер для USB USB CH330N/CH340N. Это не необходимо для пользователей Linux или Mac.
Устройство может работать двумя способами:
| Командование | Функция |
|---|---|
| "я" | Передача строки сдачи («Power Analyzer») |
| "V" | передает номер версии прошивки |
| "x" | Прекращение текущей программы тестирования |
| "S LoadCurrent [MA] " | установить нагрузку на постоянный ток нагрузки |
| "r" | сбросить нагрузку на минимум |
| "т" | Прочтите ток и напряжение обоих датчиков и передайте их |
Эта работа лицензирована в соответствии с Creative Commons Attribution-Sharealike 3.0 Unported License. (http://creativecommons.org/licenses/by-sa/3.0/)