Открытый проект универсального зарядника

R2D2

Как измерить действительную емкость конденсатора на частоте 250 кГц?

AlexN

Измерить - никак. Нужно просто скачать даташит на необходимую серию конденсаторов и там узнать все нужные данные.

Shavelsky
R2D2:

Как измерить действительную емкость конденсатора на частоте 250 кГц?

Для этого потребуется перестраиваемый генератор с нужной частотой и небольшим выходным сопротивлением, частотомер, осциллограф или вольтметр переменного тока, который может работать на требуемой частоте, резистор сопротивлением где нибудь Ом 10-50, и катушку с индуктивностью L=1/(4*Pi*Pi*F0*F0*C0), где С0 - ёмкость кондёра, написанная на корпусе. Дальше собираем последовательный колебательный контур, одна нога резисторы - на общий. Подключаем генератор и, меняя частоту, ловим резонанс по максимальной амплитуде напряжения на резисторе. Меряем частоту Fr. Считаем ёмкость на этой частоте Cf=1/(4*Pi*Pi*Fr*Fr*L). Всё просто, за исключением катушки и измерения её индуктивности. Нужен LC-метр.

9 days later
Shavelsky
Shavelsky:

Для этого потребуется перестраиваемый генератор с нужной частотой и небольшим выходным сопротивлением, частотомер, осциллограф или вольтметр переменного тока, который может работать на требуемой частоте, резистор сопротивлением где нибудь Ом 10-50, и катушку с индуктивностью L=1/(4*Pi*Pi*F0*F0*C0), где С0 - ёмкость кондёра, написанная на корпусе. Дальше собираем последовательный колебательный контур, одна нога резисторы - на общий. Подключаем генератор и, меняя частоту, ловим резонанс по максимальной амплитуде напряжения на резисторе. Меряем частоту Fr. Считаем ёмкость на этой частоте Cf=1/(4*Pi*Pi*Fr*Fr*L). Всё просто, за исключением катушки и измерения её индуктивности. Нужен LC-метр.

Здравстуйте! Перемотал, наконец-то (в смысле не на конец, но перемотал) и заработало правильно, как в теории! КПД на малых напряжениях сильно “душит” выпрямитель, несмотря ни на что. Правда жизни, как говорит автор темы. В остальном всё вполне живуче, но при малой нагрузке “звенит” транс и дроссель - с совсем малой скважностью работать не получилось, преобразователь работает в режиме “старт-стоп”, может виновата большая индуктивность дросселя, или неважнецкая разводка платы - не знаю. Но напругу и ток держит, транзюки почти не греются, вот только звук бесит. Если вариант для зарядника автор считает перспективным, можно направить усилия в сторону уменьшения габаритов и оптимизации моточных данных. Сейчас транс и дроссель на кольцах 6000 транс 2х5 + 2х12, кольцо К42х35х7 (примерно, девайс остался на работе), провод ПЭВ2 0.4х14. Дроссель на таком же кольце и тем же проводом - 40 витков.

R2D2

V1.1 заработала (пока только цифровая). В програматоре есть глюк r11 надо прицепить к X2:3, а не X2:9.
Чуть с ума не сошел пока выловил. Теперь знаю - проверять нужно все!!!

Дроссель SEPIC тоже пищит в старой схеме зараза. Может есть какая прормышленная теплопроводная смола с нормальным температурным коэффициентом.
Конечно интересно в смысле схемы. Постараюсь ее тоже приделать чуть позже.

Больше всего времени в проекте сожрали интерфейс пользователя и алгоритмы с химией.
А заделать еще одну силовую легко.
При человеческом прописывании меню и всех настроек подстроек, деже без учета двухканальности (которая в основном отъела только ОЗУ) в 16кБ проги уместиться не возможно (как мне кажется).

Очень я озаботился лицензиозностью и доступностью проекта.
Bulder стоит ~$2000 с возможностью распостронять прогу.
IAR AVR стоит ~$3000
Ну вот для программеров одиночек любителей разве такая политика принесет доход?

Посему хочу “макро” прогу переписать на жабе jdk это займет время на изучение. Мне и по работе надо заодно.
Искал ченить бесплатное чтобы в КОМ лазить и график нарисовать. Visual Studio Express тормозючий… на моем ноуте.
Ява тоже тормозючая, но там с переносом на разные платформы говорят хорошо??? да и вообще интересно.
Да вот узнал - ява и яваскрипт что в браузере это совершенно разные языки.
Ява может все!!!, но медленнее чем Си. Яваскрипт это так - “по мелочи”.

И микро прогу хочу переписать на АВРовском вин-си. Тоже время на изучение оболочки по часу в день.
В остальное время правлю микропрограмму по старому с учетом новых особенностей и выбросом аттавизмов.

Vasily_A
R2D2:

Очень я озаботился лицензиозностью и доступностью проекта.
Bulder стоит ~$2000 с возможностью распостронять прогу.
IAR AVR стоит ~$3000
Ну вот для программеров одиночек любителей разве такая политика принесет доход?

WinAvr (это gcc сборка под виндовс - все в комплекте, включая простенькую иде)
бесплатный, хорошо документированный, в дистрибутиве есть примеры, куча примеров в инете. куча библиотек.
я на нем последние года 4 под авр пишу, проблем нет (были мелкие в ранних версиях, но легко обходились)
при необходимости могу подсказать по переходу с иара (хотя все и так просто, может только строковые константы во флеше описываются своеобразно). код получается весьма приличный.

8 days later
R2D2

Ага!
Нужны примеры по WinAvr (с прерываниями и всякими строковыми структурами). Где почитать?

Из полезного нашел вот: www.myrobot.ru/stepbystep/mc_winavr.php

Кто-нибудь знает можно ли AVRDUDE - программатор (из комплекта winavr) настроить на PoniProg(овское) железо?

Говорят компилятор winavr слабее оптимизирует код чем IAR, т.е. неиспользуемое включает.

Заранее спасибо!

alex_grach
R2D2:

Ага!
Нужны примеры по WinAvr (с прерываниями). Где почитать?

Из полезного нашел вот: www.myrobot.ru/stepbystep/mc_winavr.php

Кто-нибудь знает можно ли AVRDUDE - программатор настроить на PoniProg(овское) железо?

Можно, причем в конфигурационном файле (avrdude.conf) уже есть вот такой:
programmer
id = “pony-stk200”;
desc = “Pony Prog STK200”;
type = par;
buff = 4, 5;
sck = 6;
mosi = 7;
reset = 9;
miso = 10;
pgmled = 8;
;

Vasily_A
R2D2:

Ага!
Нужны примеры по WinAvr (с прерываниями и всякими строковыми структурами). Где почитать?
Говорят компилятор winavr слабее оптимизирует код чем IAR, т.е. неиспользуемое включает.

по прерываниям: как битики в регистрах конфигурить - это у любого компилятора одинаково, пример кода обработчика:
откуда брать подобное SIG_OVERFLOW0 и SIG_INPUT_CAPTURE1, чтоб не нибивать руками и не ошибаться - смотрим соответствующий процу h-файл в (например для меги8 iom8.h)

звездочки “*” куда попало движок форума вставил, я не виноват 😃

#incl*ude <type.h>
#incl*ude <avr/io.h>
#incl*ude <avr/interrupt.h>

SIGNAL (SIG_INPUT_CAPTURE1) //это прерывание по входу захвата, ну далее ясно…
{
icp_cur=ICR1-icp_last;
icp_last=ICR1;
icp_flg=1;
}
/************************************************************************************/
SIGNAL (SIG_OVERFLOW0)
{
pos++;

оптимизация - мне часто надо на скоростные процессы обслуживать - поэтому кодогенерацию смотрю часто, очень даже прилично все.

R2D2

Спасибо!

Всегда очень трудно сделать первые шаги.

  1. Про генерацию файла проекта ясно. Используем утилитку MFile
  2. Про стандартный язык ясно. В целом все как обычно в си и названия битов притянуты из даташита.
  3. Про особенности прерываний ясно. Из предыдущего коментария.
    ??? 4. Про особенности описания строковых переменных и работы с различными видами памяти (флэш озу ппзу) не совсем ясно. Подсмотреть бы.
  4. Про компиляцию ясно. Из программерс нотепада
  5. Про прошивание ясно. От тудаже.
R2D2

Про ОЗУ все ясно - обычное использование строковых переменных

А вот про flash и eeprom???

Например в IAR я делал так:

typedef BYTE __flash * Txt; // Тип данных строка, оканчивающаяся нулем во флаш
typedef __flash BYTE __flash * pTxt; // Тип данных массив указателей, находящийся во флаш, на строки, находящиеся во флаш

// Пункты меню
pTxt pMn[]=
{
(Txt)“1.Канал-1 пуск”, //Запуск диалога первого канала (не запускать)
(Txt)“2.Канал-2 пуск”, //Запуск диалога второго канала (не запускать)
(Txt)“3.Список аккум”, //Заголовок
(Txt)“3.1.Просмотр акк”, //Просмотр всех аккумуляторов

}

Далее зная номер указателя на строку можно ее побайтно например рисовать на ЖКИ.
Да еще забыл спросить про определение фузов прямо в программе. Кажется такое возможно в WinAvr

Vasily_A
R2D2:
  1. Про генерацию файла проекта ясно. Используем утилитку MFile

достаточно руками в мэйкфайле из примера поправить тип процессора и имя исходника

R2D2:

??? 4. Про особенности описания строковых переменных и работы с различными видами памяти (флэш озу ппзу) не совсем ясно. Подсмотреть бы.

вот, посмотри…
надергал строчек из реального проекта.

#incl*ude <avr/pgmspace.h>
#define P(s) ({static const char c[] __attribute__ ((progmem)) = s;c;})
#define Tx_Str(str) PutStringP(P(str))
void PutStringP(const char *Str);
//============================================================
void Uart_Tx(u_char bt)
{
while ( !(UCSRA & (1<<UDRE)) ); //atmega wait for empty transmit buffer
UDR = bt; // start transmittion
}
//============================================================
void PutStringP(const char *Str)
{
char c;
while ((c = pgm_read_byte(Str++))) Uart_Tx©;
}
//============================================================
int main(void)
{
UBRRH = 0;
UBRRL = 47; //7.3728M 9600
UCSRB = (1<<RXEN)|(1<<TXEN); // Enable Receiver and Transmitter
UCSRC = (1<<URSEL)|(3<<UCSZ0); // Set frame format: 8data, 1stop bit
Tx_Str(“эта строка в флеш-памяти программ”);
}

R2D2

Вот такие штуковины:

Это цифровая часть


Это силовая SEPIC
Броневой сердечник 35мм судя по цвету HM2000
Зазор 0.5мм
L1=39 скрутка/0.315мм/7 витков=11мкГн
L2=13 скрутка/0.315мм/10 витков=26мкГн


Это силовая BUCK
Броневой сердечник 35мм без зазора судя по цвету HM2000
L=1.2мм/до заполнения=5300мкГн

Это все вместе


Думаю засунуть все в старуюкоробку от АТ блока питания.
Красивую алюминивую коробку в чипе дипе купил (о которой говорилось ранее), крутил и так и сяк - не лезет.
Надо переразводить.

Цифровая заработала!!!
Силовые не включал - прогу переписываю.

R2D2

Мне подкинули книжку djvu

shpak_yu_a__programmirovanie_na_jazyke_s_dlja_avr_i_pic_mikr.djvu

Программирование на языке Cи для AVR и PIC микроконтроллеров.

Там про WinAvr все подробно расписано.

Чё-то bool gcc не признает!!! Какаято ерунда не пойму.

mega_john
R2D2:

Чё-то bool gcc не признает!!! Какаято ерунда не пойму.

#incl*ude “stdbool.h” поможет 😒

Xetrix
R2D2:

shpak_yu_a__programmirovanie_na_jazyke_s_dlja_avr_i_pic_mikr.djvu
Программирование на языке Cи для AVR и PIC микроконтроллеров.
Там про WinAvr все подробно расписано.

Можете поделиться?
Сюда или на bob5024 [sobacka] mail.ru

R2D2

Вот некоторые рассуждения, которые посетили меня.
Я постараюсь реализовать их именно в этом виде.
Возможно, они будут полезны комунибудь.

// Отображение информации на LCD происходит в 2 уровня как и раньше.

// Высокий уровень:
// Доступен из основной программы в “любой момент времени”.
// Вызов отрисовки прозводится через подпрограмму PrnScr(BYTE SHABLON, BYTE PERIOD)
// Шаблон это командная последовательность байтов. Например: очистить экран, вывести
// строку S, вывести переменную P, поставить курсор, стереть подстроку. Указанные элементы шаблона
// могут быть прорисованы единожды или обновляемы при каждой прорисовке.
// Шаблоном может быть стандартное отображение Меню или Экран хода зарядки или тестирования.
// Механизм шаблонов позволяет гибко настраиваться на разного размера экраны (2х16 или 4х20)
// и производить русификацию, англификацию.
// После вызова шаблон становится текущим и обновляется (его изменяемая часть) в основной программе
// при наступлении PERIOD.
// Прорисовка шаблона происходит в видеопамять.
// Если низкий уровень не доделал свое задание (не послал видеопамять в ЖКИ),
// прорисовка шаблона не происходит до следующего PERIOD.
// Во время прорисовки шаблона низкий уровень ждет.

// Низкий уровень
// Во время работы низкого уровня высокий уровень ждет.
// Любой вид LCD может быть подменен заменой низкоуровневой подпрограммы (драйвера LCD).
// В случае текстового LCD каждая буква видеопамяти превращается в
// низкоуровневую последовательность байтов-команд для установки и сбрасывания
// битов управления LCD через равные промежутки времени, определенные прерыванием.
// В случае графического LCD, посылка каждой буквы происходит посылкой адреса
// спрайта и самого спрайта (например из 8 байт).
// В случае графического LCD интегрированного с железным драйвером-процом, происходит передача
// управляющих последовательностей процу, который сам работает со своим LCD.
// Посылка низкоуровневых команд в LCD, происходит, используя прерывания, через равные промежутки
// времени - позволит избавиться от ожиданий готовности LCD и равномерно распределит
// вычисления на процессор вперемешку с основной задачей - контроля заряда.

// Т.о. мы имеем одно неизменяемое программное ядро работы с зарядкой и гибкое решение по привязке к различным LCD