Найти в Дзене
Паяльник и код

MCP41010 + CH32V003F4P6 для замены обычного резистора на цифровой на TP4056

В статье про цифровой потенциометр MCP41010 было показано как им управлять с помощью микроконтроллера CH32V003F4P6 Рассмотрим пример куда это можно встроить Будем управлять зарядкой TP4056 для литии-ионной батарейки Как мы знаем, чтобы изменять силу току на TP4056 нужно менять управляющий резистор. В зависимости от наминала меняется сила тока: Как раз наш случай. Заменим резистор на цифровой. Добавим кнопку для управления и лампочки для индикации выбранного режима. Схема получится следующая Для управления индикацией используем сдвиговый регистр 74HC595. Им управлять можно также через интерфейс SPI. Ножку CS подключаем к PC0 Код для MounRiver Studio берем из предыдущей статьи и в него добавляем В функцию SPI_Config(void) добавляет инициализацию PC0 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure); Добавляем функцию управления 74HC595 void L74HC595_Write(uint

В статье про цифровой потенциометр MCP41010

было показано как им управлять с помощью микроконтроллера CH32V003F4P6

Рассмотрим пример куда это можно встроить

Будем управлять зарядкой TP4056 для литии-ионной батарейки

Как мы знаем, чтобы изменять силу току на TP4056 нужно менять управляющий резистор. В зависимости от наминала меняется сила тока:

-2

Как раз наш случай. Заменим резистор на цифровой. Добавим кнопку для управления и лампочки для индикации выбранного режима. Схема получится следующая

-3

Для управления индикацией используем сдвиговый регистр 74HC595. Им управлять можно также через интерфейс SPI. Ножку CS подключаем к PC0

Код для MounRiver Studio берем из предыдущей статьи и в него добавляем

В функцию SPI_Config(void) добавляет инициализацию PC0

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode =
GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed =
GPIO_Speed_10MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);

Добавляем функцию управления 74HC595

void L74HC595_Write(uint8_t value)
{
// Активируем CS (низкий уровень)
GPIO_ResetBits(GPIOC, GPIOC);
// Отправляем команду и данные
SPI_Send(value);
// Деактивируем CS (высокий уровень)
GPIO_SetBits(GPIOC, GPIOC);
// Вывод значения в терминал
printf("74HC595 set to: %d\r\n", value);
}

В главной функции main прописываем событие на нажатие кнопки для перебора сопротивлений

while(1) {
//получаем состояние кнопки
uint8_t current_button_state = GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1);
//если кнопка не была ранее нажата
if(current_button_state == 0 && last_button_state == 1) {
Delay_Ms(10);
//если кнопка нажата
if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0) {
n++;
if(n == 7) n = 0;
printf("n= %d\r\n", n);
//устанавливаем сопротивление и индикацию
if(n==0){//1.2kom
MCP41100_Write(30);
Delay_Ms(100);
L74HC595_Write(0b00000011);
Delay_Ms(100);
} else
if(n==1){//1.5kom
MCP41100_Write(38);
Delay_Ms(100);
L74HC595_Write(0b00000101);
Delay_Ms(100);
} else
...

Далее прошиваем микроконтроллер и тестим

-4

В терминале видим изменяющиеся значения сопротивления и индикации

Спаиваем схему

-5
-6

Для теста использую свою зарядку из статьи

Вместо переменного резистора подключаю разработанную плату

-7

При включении сначала минимальная сила тока

-8

Нажимая на кнопку, переключаемся на максимальную силу тока

-9

Далее по уменьшению силы тока

Всё работает. Получилось электронное управление зарядкой

Исходник:

MCP41100.rar — Яндекс Диск

Может есть варианты, где ещё можно использовать MCP41010?