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

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


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
Ссылка на комментарий
Поделиться на другие сайты

Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

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

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Литиевые аккумуляторы EVE Energy и решения для управления перезаряжаемыми источниками тока (материалы вебинара)

Опубликованы материалы вебинара Компэл, посвященного литиевым аккумуляторам EVE Energy и решениям для управления перезаряжаемыми источниками тока.

На вебинаре мы представили информацию не только по линейкам аккумуляторной продукции EVE, но и по решениям для управления ею, что поможет рассмотреть эти ХИТ в качестве дополнительной альтернативы для уже выпускающихся изделий. Также рассмотрели нюансы работы с производителем и сервисы, предоставляемые Компэл по данной продукции. Подробнее>>

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

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

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

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

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

Только что, 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 пользователей онлайн

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

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