Перейти к содержанию

Управление полевиком на основании данных с АЦП


oner

Рекомендуемые сообщения

Собираю устройство, которое на основании измеренного напряжения на резисторе своим АЦП на одном из своих портов выдает импульсы широтой, зависящей от измеренного напряжения. Широтой этого импульса задается ток, который, протекая через вышеупомянуты резистор, формирует вновь измеряемое напряжение. Пока результат такой. Зеленым цветом - сигнал на выходе контроллера, красным - напряжение на резисторе в цепи истока полевого транзистора, оно пропорционально току, протекающему через этот транзистор.Результат такой:

SdIiT_Ejk9Q.jpg

Вопрос знатокам: почему это измеренное напряжение всегда застывает на одной и той же величине (0,8В)? Код:

#include <mega8.h>
#include <delay.h>
#include <stdio.h>


long result;
long n=1;
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (1<<ADLAR))


unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=(1<<ADSC);
// Wait for the AD conversion to complete
while ((ADCSRA & (1<<ADIF))==0);
ADCSRA|=(1<<ADIF);
return ADCH;
}

void main(void)
{


// Input/Output Ports initialization
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTC=(0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T 
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);

// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADFR) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (0<<ADPS0);
SFIOR=(0<<ACME);

PORTB=0x00;
DDRB=0x01;

#asm("sei")

while (1)
      {
           
      result=((read_adc(0)*5)/256.00); // Тут мы измерили напряжение на резисторе
      if (result>2)                    // и сравниваем, например, с 2В. В случае отклонения
                                       // измеренной величины от 2В меняем длительнось импульса n.
      {
      n=n-1;
      PORTB.0=1;
      delay_ms(n);
      PORTB.0=0;
      delay_ms(20);     
      }
      if (result<2)
      {
      n=n+1;
      PORTB.0=1;
      delay_ms(n);
      PORTB.0=0;
      delay_ms(20);
      }  
      };
}

 

Изменено пользователем oner
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

19 минут назад, oner сказал:

почему это измеренное напряжение всегда застывает на одной и той же величине (0,8В)?

Т.е. после этого МК перестает его замерять и всегда выдает одно и то же значение? И вывод ШИМ просто ужасен. У МК есть аппаратный ШИМ, почему нельзя использовать его?

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Нет, МК на основании измеренного напряжения на резисторе своим АЦП на одном из своих портов выдает импульсы широтой, зависящей от измеренного напряжения. Широтой этого импульса задается ток, который, протекая через вышеупомянуты резистор, формирует вновь измеряемое напряжение. Т.е. контроллер управляет полевиком и держит его ток в рамках определеной величины. И эта величина никак не совпадает с тем, что мне нужно, а всегда стабилизируется на 0,8В. (красная линия на рисунке ниже)

SdIiT_Ejk9Q.jpg

Изменено пользователем oner
Ссылка на комментарий
Поделиться на другие сайты

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Только что, oner сказал:

а всегда стабилизируется на 0,8В

Во-первых ШИМ организован криво. Во-вторых судя по графику, на АЦП приходит масса мусора, ШИМ плавает как ему вздумается. Надо как минимум делать усреднение на основании нескольких измерений, применять стабильный ИОН и ставить хоть какой-то фильтр на входе АЦП. В-третьих, вот так вот в лоб управлять не получится, надо писать ПИ или ПИД регулятор.

Ссылка на комментарий
Поделиться на другие сайты

Только что, oner сказал:

Вопрос в том, как поменять величину.

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

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, BARS_ сказал:

А то уже ток измеряется в вольтах.

Ток, протекающий через резистор сопротивлением 1 Ом создает падение напряжения. численно равное величине тока.

Ссылка на комментарий
Поделиться на другие сайты

Только что, BARS_ сказал:

И что при этом не работает?

 

38 минут назад, oner сказал:

 почему это измеренное напряжение всегда застывает на одной и той же величине (0,8В)? 

 

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, oner сказал:

Вопрос в том, как поменять величину.

для начала приведете схему

41 минуту назад, oner сказал:

почему это измеренное напряжение всегда застывает на одной и той же величине (0,8В)?

не правильно задаете вАпрос...

правильный вопрос почему это напряжение не равно 2в....

Ссылка на комментарий
Поделиться на другие сайты

Ну вот смотрите:

В момент включения на затворе полевика ноль, ток, протекающий через резистор, тоже равен нулю, как и падение напряжения на нем. АЦП измеряет это падение напряжения и сравнивает результат (result) с заданной величиной напряжения (в данном случае- 2В)

result=((read_adc(0)*5)/256.00);
      ....
      if (result<2)
      {
      n=n+1;
      PORTB.0=1;
      delay_ms(n);
      PORTB.0=0;
      delay_ms(20);
      }  

Если result<2, то на полевик через RC-фильтр посылается прямоугольный сигнал определенной ширины, за счет прохождения которого полевик приоткрывается и через него начинает течь ток, создавая падение напряжения на резисторе. Это напряжение снова измеряется и сравнивается с 2В. В случае отличия длительность импульса соответственным образом меняется. 

Ссылка на комментарий
Поделиться на другие сайты

10 минут назад, IMXO сказал:

для начала приведете схему

Правильный вопрос почему это напряжение не равно 2в....

Схема:

LZbQTEnMGiU.jpg

 

Да, вопрос уточнен Вами правильно. Но там не обязательно 2В. Я и вольт ставил. и 0,35В - бесполезно.

Изменено пользователем oner
Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, oner сказал:

АЦП измеряет это падение напряжения

А где гарантия, что АЦП верно замеряет напряжение? Необходимо сделать вывод значения по UART и посмотреть, что приходит на АЦП. Это раз. Второе, IRF740 не будет так нормально работать, ему нужен драйвер из пары биполярников.

Ссылка на комментарий
Поделиться на другие сайты

Только что, oner сказал:

Что даст UART и куда по нему выводить значение

Даст понимание того, что именно приходит с АЦП и что рассчитывается по вашей формуле. Для вывода значений в протеусе есть терминал.

1 минуту назад, IMXO сказал:

не нужен...

Ну и через резистор 10К он тоже открываться нормально не будет.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, BARS_ сказал:

А где гарантия, что АЦП верно замеряет напряжение?

какой юарт? какая гарантия? ТС в протезе схему крутит... блин, театр абсурда...

Ссылка на комментарий
Поделиться на другие сайты

 

Цитата

И что? От этого у него расчет значение с АЦП и измерение происходит 100% правильно?

прикинь, да...

Только что, BARS_ сказал:

Ну и через резистор 10К он тоже открываться нормально не будет.

да ну, шо правда?

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Я прислушался и заметил, что белый шум есть только при максимальной громкости, хватает совсем чуть-чуть повернуть регулятор что бы он пропал или стал почти не слышен  Понял, спасибо, поищу информацию в интернете если ничего не найду то буду использовать обычный. Выздоравливайте)  Вы хотите такой же собрать усилитель?   
    • Значит это шум от источника сигнала. Самое главное что в минимальном положении, когда вход усилителя зашунтирован на землю, этого шума нет. Когда поставите потенциометр меньше сопротивлением он будет также немного шунтировать и источник сигнала, белый шум тоже должен стать меньше. Скорее всего да, я эту схему не проверял. По тому как пересчитать тонокомпенсацию под резистор меньше сопротивлением пусть вам лучше подскажут другие пользователи форума, ибо я с такими регуляторами дел не имел.
    • Я имел ввиду что нету шума от регулятора, белый шум пропадает только когда регулятор громкости на минимальном значении, при максимальном значении шум от регулятора пропадает, но остается белый шум Хорошо я понял, а наминал переменного резистора влияет  на тонокомпенсацию?
    • Эти шумы зависят от огромного количества причин и сейчас вспоминать и писать все я пожалуй не буду. Просто поставьте регулятор меньше сопротивлением, экранируйте его и всë будет нормально. У меня в VAC 2.0 регулятор тоже на 100кОм, но там например само входное сопротивление усилителя очень высоко, несколько более 100кОм примерно (я его специально разрабатывал таким), и даже этих 50кОм в среднем положении и экранировки потенциометра хватило чтобы практически полностью заглушить шумы, хотя в моëм случае пришлось очень долго возится чтобы их погасить.
    • Понятно, просто когда я его подключал к колонкам на вход то шумов никаких не было очень долго проработал у меня
    • Это не странность а вполне обычная ситуация. На минимальном положении потенциометра он шунтирует вход на землю убирая все шумы. На максимальном положении его уже начинает шунтировать источник сигнала также убирая шумы. А в среднем положении, т.к. у вашего потенциометра сопротивление слишком большое, вход что к земле что к источнику по сути подключен через сопротивления на 50 кОм что очень много и шумы никак не гасит и не шунтирует вход. Опять же, поменяйте потенциометр на более низкоомный, на сопротивление от 10 до 50 кОм, оптимально около 20кОм, чем ниже тем лучше. Шумы в среднем положении пропадут. Ну и шунтирование корпуса потенциометра на минус питания опять же сильно поможет. экранированный провод даже лучше чем просто "коса", если сделали таким то такой и оставьте. Кстати, если так то можете вообще БП не менять, просто сделайте что я сказал выше. Значит БП у вас по питанию не даëт слишком сильных помех и этот шум у вас просто наводки, и с усилителем и БП никак не связан, можете оставить БП на 12 вольт и не придëтся морочится с 24 вольт бп.
  • Похожий контент

×
×
  • Создать...