Size: a a a

2020 June 21

P.

Pavel . in Embedded Group
источник опороного напряжения
источник

DA

Dmitry Aloyan in Embedded Group
А, блин 🙂
источник

DP

Dmitry Ponyatov in Embedded Group
Dmitry Aloyan
У меня в gcc нет функции chr 😇 Но идею я понял
newlib умеет собираться с —enable-wchar и юникодом?
источник

P.

Pavel . in Embedded Group
Dmitry Ponyatov
newlib умеет собираться с —enable-wchar и юникодом?
"The width of wchar_t is compiler-specific and can be as small as 8 bits. Consequently, programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text. The wchar_t type is intended for storing compiler-defined wide characters, which may be Unicode characters in some compilers."
ISO/IEC 10646:2003 Unicode standard 4.0
источник

DA

Dmitry Aloyan in Embedded Group
Dmitriy Salko
Какая разрядность ацп и какой ИОН?
Если не ошибаюсь, должен быть vref, а он 3.3
источник

DA

Dmitry Aloyan in Embedded Group
Всем спасибо! @dimedroluch спасибо за вопрос про ИОН. Он навел на то, что у меня не 12 бит стояло 🙂
источник

DS

Dmitriy Salko in Embedded Group
Dmitry Aloyan
Если не ошибаюсь, должен быть vref, а он 3.3
Тогда, если оно действительно настроенно на 12бит 3.3в, то вот так вы узнаете фактическое напряжение на пине ацп:
adc_voltage = ADC * 3.3 / (1 << 12)
;
А так получаете напряжение на входе делителя:
divider_value = (R1 + R2) / R2;
voltage_full = adc_voltage * divider_value;
источник

DS

Dmitriy Salko in Embedded Group
Если используете целочисленные переменные - то старайтесь деление делать самым последним шагом
источник

DA

Dmitry Aloyan in Embedded Group
Dmitriy Salko
Тогда, если оно действительно настроенно на 12бит 3.3в, то вот так вы узнаете фактическое напряжение на пине ацп:
adc_voltage = ADC * 3.3 / (1 << 12)
;
А так получаете напряжение на входе делителя:
divider_value = (R1 + R2) / R2;
voltage_full = adc_voltage * divider_value;
Спасибо. Я в принципе так и делаю. Только вместо пересчета резисторов, сразу дельту использую (я знаю что компилятор предварительно все считает)
источник

DA

Dmitry Aloyan in Embedded Group
А тоже самое для тока подскажете?
источник

u

uis in Embedded Group
Dmitry Aloyan
Коллеги, прошу помощи в формуле, видимо уже туплю под вечер.
Снимаю напряжение с резестивного делителя (0-30в), использую stm32.

((voltageAdc * 3.3) / 1024.0) / RDelta;

Формула выше выдает корректные значения, но я теряют 2 бита разрядности.

((voltageAdc * 3.3) / 4095.0) / RDelta;

Воторая формула выдает уже не верные значения. Как мне исправить формулу, что бы задействовать весь диапазон 12бит ?
А зачем плавучка?
источник

DA

Dmitry Aloyan in Embedded Group
Использую похожую формулу
uint32_t currentCurrentVoltage = analogRead(PA7);
 float adcVoltage = (currentCurrentVoltage * 3.3) / 4095.0;
 float inputCurrent = (adcVoltage - 2363) / 66;


Где 2363 - напряжение 0А с датчика ASC712, а 66 - это чувствительность модуля по даташиту
источник

DA

Dmitry Aloyan in Embedded Group
Саму формулу выдрял с какого-то сайта и изначальный варинт был под ардуину
adcValue = analogRead(currentPin);
adcVoltage = (adcValue / 1024.0) * 5000;
currentValue = ((adcVoltage – offsetVoltage) / sensitivity);


Датчик у меня расчитан на 30А, и мне кажется нифига я не смогу нормально отслежить, скажем 100мА подавая OUT модуля напрямую к stm
источник

DS

Dmitriy Salko in Embedded Group
Dmitry Aloyan
Спасибо. Я в принципе так и делаю. Только вместо пересчета резисторов, сразу дельту использую (я знаю что компилятор предварительно все считает)
вовсе не факт что компилятор предварительно посчитает деление и умножение
источник

D

Dr Zlo in Embedded Group
Dmitry Aloyan
Коллеги, прошу помощи в формуле, видимо уже туплю под вечер.
Снимаю напряжение с резестивного делителя (0-30в), использую stm32.

((voltageAdc * 3.3) / 1024.0) / RDelta;

Формула выше выдает корректные значения, но я теряют 2 бита разрядности.

((voltageAdc * 3.3) / 4095.0) / RDelta;

Воторая формула выдает уже не верные значения. Как мне исправить формулу, что бы задействовать весь диапазон 12бит ?
Если первая даёт верные, то биты ты потерял до нее, с ацп еще.
источник

DA

Dmitry Aloyan in Embedded Group
Dr Zlo
Если первая даёт верные, то биты ты потерял до нее, с ацп еще.
Да, я разобрался. Настройка была на 10 бит
источник

DS

Dmitriy Salko in Embedded Group
Dmitry Aloyan
Использую похожую формулу
uint32_t currentCurrentVoltage = analogRead(PA7);
 float adcVoltage = (currentCurrentVoltage * 3.3) / 4095.0;
 float inputCurrent = (adcVoltage - 2363) / 66;


Где 2363 - напряжение 0А с датчика ASC712, а 66 - это чувствительность модуля по даташиту
в этом датчике, если я не ошибаюсь, при токе 0, на выходе половина от питающего напряжения
источник

D

Dr Zlo in Embedded Group
Dmitry Aloyan
Саму формулу выдрял с какого-то сайта и изначальный варинт был под ардуину
adcValue = analogRead(currentPin);
adcVoltage = (adcValue / 1024.0) * 5000;
currentValue = ((adcVoltage – offsetVoltage) / sensitivity);


Датчик у меня расчитан на 30А, и мне кажется нифига я не смогу нормально отслежить, скажем 100мА подавая OUT модуля напрямую к stm
На холле? Там точность +-3А.
источник

DA

Dmitry Aloyan in Embedded Group
Dmitriy Salko
в этом датчике, если я не ошибаюсь, при токе 0, на выходе половина от питающего напряжения
да. По этому там "Где 2363 - напряжение 0А"
источник

DS

Dmitriy Salko in Embedded Group
В этом датчике, за опорное надо брать его напряжение питания (5в). Или тоже делитель сделать
источник