Nuvoton N76E003AT20 в термостате
Nuvoton N76E003AT20 в термостате
Попался мне в руки термостат STC-3008 там стоит N76E003AT20 который не особо то и распространен. на панели стоят 4 кнопки которые сидят на земле и прямиком идут в мк без подтяжки к питанию. посмотрев даташит я не нашел режим входа с pull up как у STM32, как тогда считывается состояние кнопки?
- Реклама
Re: Nuvoton N76E003AT20 в термостате
А куда они делись? Страница 87 даташита.
- Вложения
-
- Screenshot_254.jpg
- (19.11 КБ) 325 скачиваний
Re: Nuvoton N76E003AT20 в термостате
Если открыть верхний полевик и подать на ногу минус он должен бахнуть
Re: Nuvoton N76E003AT20 в термостате
А если подумать и внимательно прочитать?
Re: Nuvoton N76E003AT20 в термостате
Я подумал это какие то быстро действующие транзисторы, а то что у них высокое сопротивление даже в голову не пришло. Резумирую мне нужен режим quasi
- Реклама
Re: Nuvoton N76E003AT20 в термостате
пытаюсь подключить NTC термистор к МК. т.к он не линейный воспользовался сайтомhttps://aterlux.ru/article/ntcresistor для расчета градуированной таблицы. получил код
если значение ацп(например 1498) совпадает с данными из таблицы выдает температуру правильно 300, но если например 1522 уже температура 14.
Спойлер
Код: Выделить всё
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#define TEMPERATURE_UNDER 1250// Значение температуры, возвращаемое если сумма результатов АЦП больше первого значения таблицы
#define TEMPERATURE_OVER 0// Значение температуры, возвращаемое если сумма результатов АЦП меньше последнего значения таблицы
#define TEMPERATURE_TABLE_START 1250// Значение температуры соответствующее первому значению таблицы
#define TEMPERATURE_TABLE_STEP -50// Шаг таблицы
typedef uint16_t temperature_table_entry_type; // Тип каждого элемента в таблице, если сумма выходит в пределах 16 бит - uint16_t, иначе - uint32_t
typedef uint8_t temperature_table_index_type;// Тип индекса таблицы. Если в таблице больше 256 элементов, то uint16_t, иначе - uint8_t
#define TEMPERATURE_TABLE_READ(i) termo_table[i]// Метод доступа к элементу таблицы, должна соответствовать temperature_table_entry_type
/* Таблица суммарного значения АЦП в зависимости от температуры. От большего значения к меньшему
Для построения таблицы использованы следующие парамертры:
R1(T1): 22кОм(25°С)
R2(T2): 1.211034кОм(100°С)
Схема включения: C
Ra: 10кОм
Напряжения U0/Uref: 5В/5В
*/
const temperature_table_entry_type termo_table[]= {
3869, 3837, 3801, 3759, 3710, 3654, 3588, 3512,
3424, 3323, 3207, 3076, 2927, 2761, 2579, 2381,
2169, 1948, 1723, 1498, 1280, 1074, 885, 716,
568, 443
};
// Функция вычисляет значение температуры в десятых долях градусов Цельсия
// в зависимости от суммарного значения АЦП.
signed short calc_temperature(temperature_table_entry_type adcsum)
{
temperature_table_index_type l = 0;
temperature_table_index_type r = (sizeof(termo_table) / sizeof(termo_table[0])) - 1;
temperature_table_entry_type thigh = TEMPERATURE_TABLE_READ(r);
if (adcsum <= thigh) // Проверка выхода за пределы и граничных значений
{
#ifdef TEMPERATURE_UNDER
if (adcsum < thigh)
return TEMPERATURE_UNDER;
#endif
return TEMPERATURE_TABLE_STEP * r + TEMPERATURE_TABLE_START;
}
temperature_table_entry_type tlow = TEMPERATURE_TABLE_READ(0);
if (adcsum >= tlow) {
#ifdef TEMPERATURE_OVER
if (adcsum > tlow)
return TEMPERATURE_OVER;
#endif
return TEMPERATURE_TABLE_START;
}
while ((r - l) > 1) // Двоичный поиск по таблице
{
temperature_table_index_type m = (l + r) >> 1;
temperature_table_entry_type mid = TEMPERATURE_TABLE_READ(m);
if (adcsum > mid) {
r = m;
} else {
l = m;
}
}
temperature_table_entry_type vl = TEMPERATURE_TABLE_READ(l);
if (adcsum >= vl) {
return l * TEMPERATURE_TABLE_STEP + TEMPERATURE_TABLE_START;
}
temperature_table_entry_type vr = TEMPERATURE_TABLE_READ(r);
temperature_table_entry_type vd = vl - vr;
int16_t res = TEMPERATURE_TABLE_START + r * TEMPERATURE_TABLE_STEP;
if (vd) // Линейная интерполяция
{
res -= ((TEMPERATURE_TABLE_STEP * (int32_t)(adcsum - vr) + (vd >> 1)) / vd);
}
return res;
}
- Zhuk72
- Сверлит текстолит когтями
- Сообщения: 1231
- Зарегистрирован: Ср янв 29, 2014 08:41:31
- Откуда: Баку
- Контактная информация:
Re: Nuvoton N76E003AT20 в термостате
Вместо такой таблицы лучше бы по формуле рассчитали.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Re: Nuvoton N76E003AT20 в термостате
по формуле погрешность приличная.
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: Nuvoton N76E003AT20 в термостате
совет переходите на платиновые термометры сопротивления напр ПТС100 они линейны и могцт от -100до+1400
ну или копечные термопары тамс правда не R а ЭДС+возня с компенсацией холодног спая но линейность на 2 порядка лучше обычныхNTC
ну или копечные термопары тамс правда не R а ЭДС+возня с компенсацией холодног спая но линейность на 2 порядка лучше обычныхNTC
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
- Eddy_Em
- Собутыльник Кота
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
- Контактная информация:
Re: Nuvoton N76E003AT20 в термостате
Я просто делал кусочно-линейную интерполяцию после калибровки по платиновому терморезистору. Очень даже сносно получалось (в ЖЖ все расписал).


