Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Общетехнические вопросы

Общетехнические вопросы Общие вопросы аналоговой и цифровой электроники.

Ответ
 
Опции темы Опции просмотра
Старый 24.03.2017, 12:04   #1
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 366
Вес репутации: 612/35
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию большая пульсация с ШИМ. как быть?

делаю девайс для заряд/разряд/подсчет емкости литиевых батарей.
что-то типа IMAX-B6. вот силовая часть.
шунт-зарядник-разрядник.

с разрядником все прекрасно: ШИМлю на затвор полевика, контроллирую ток разряда,
при необходимости корректирую коэф. заполнения ШИМа.

а вот с зарядом.
напряжение на батарее и на средней точке( зарядник-разрядник-шунт)
болтается, как гавно в проруби.
в пределах 0.2В - так за милую душу.
да, понимаю, импульсник.

стал читать напряжение 8 раз с интервалом 10 мкС, и считать среднее,
увеличил частоту ШИМ до 200кГц, понавешал кондеров (те что красным), дроссель поставил побольше.
стало даже хуже.
получил помимо быстро дергающихся значений еще и пульсацию с частотой около герца.

посоветуйте, как быть?
надо мне мониторить ток и считать емкость достаточно точно.
Миниатюры
ups.GIF  
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 24.03.2017, 13:38   #2
pal1222@yandex.ru
Senior Member
 
Регистрация: 30.09.2008
Сообщений: 1,428
Вес репутации: 2235/68
pal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond reputepal1222@yandex.ru has a reputation beyond repute
По умолчанию Re: большая пульсация с ШИМ. как быть?

имхо пульсация около Герца это разряд-заряд добавленных в ANx конденсаторов. А болтанка на на цикле заряда в пределах 0.2В это химия процесса. Не нравится - свирепо усредни
pal1222@yandex.ru вне форума   Ответить с цитированием
Старый 24.03.2017, 13:50   #3
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 366
Вес репутации: 612/35
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: большая пульсация с ШИМ. как быть?

все верно. всё абсолютно верно.
вот потому и спрашиваю совета тут, а не на "казусе
ибо:девиз этого сайта
ВСЁ ЧТО НЕЛЬЗЯ ЗАПРОГРАММИРОВАТЬ, ПРИХОДИТСЯ ПАЯТЬ

ЗЫ. ну неохота мне еще двойную интергрирующую цепочку на ОУ делать
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 24.03.2017, 18:06   #4
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 40
Сообщений: 4,001
Вес репутации: 1858/96
maagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant future
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: большая пульсация с ШИМ. как быть?

А обратная связь..она берется до фильтра или после него?
maagalex вне форума   Ответить с цитированием
Старый 25.03.2017, 01:12   #5
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 366
Вес репутации: 612/35
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: большая пульсация с ШИМ. как быть?

ОС. в смысле до?
вот по схеме разрисовано.
камушек считает напряжения на шунте, вычисляет ток
и увеличивает или уменьшает его, для поддержания заданного.

Код:
#include <p18F4550.h>

#define Rshunt 100 // сопротивление шунта в милиомах
#define mVdel 5 //миливольт на отсчет АЦП


unsigned int MIDDLE_POINT_VOLTAGE; //mV
unsigned int AKB_VOLTAGE;//mV напряжение батареи
unsigned int CURRENT;// mA ток на данный момент
unsigned int DISCHARGE_CURRENT = 1000;//mA ток разрядки. задается программно
unsigned int DISCHARGE_VOLTAGE = 3600;//mV до куда разряжать
unsigned int CHARGE_CURRENT = 500;//mA ток заряда
unsigned int CHARGE_VOLTAGE = 4200;//mV максимальное напряжение заряда, 
//где зарядка стабильным током переходит в зарядку стабильным напряжением
Код:
    // зAрядка заданным током
    PWM_K=1;
     OpenPWM2(60); 
    SetDCPWM2(PWM_K); ///!!!
    AKB_VOLTAGE=0;
    // пока не зарядилась - зарядка стабильным током
    while(AKB_VOLTAGE<CHARGE_VOLTAGE){

        AKB_VOLTAGE=GET_AKB_VOLTAGE()*mVdel;// GET_AKB_VOLTAGE() возвращает деления АЦП
        MIDDLE_POINT_VOLTAGE=GET_MIDDLE_POINT_VOLTAGE()*mVdel; 

        CURRENT=1000*(MIDDLE_POINT_VOLTAGE-AKB_VOLTAGE)/Rshunt;// все значения считаем в миливольтах и милиамперах
        if (CURRENT < CHARGE_CURRENT){ PWM_K=PWM_K+1;}
        if (CURRENT > CHARGE_CURRENT){ PWM_K=PWM_K-1;}
        SetDCPWM2(PWM_K); ///!!!
        OUTPUTS();// вывод на дисплей
        //for(counter=0;counter<100;counter++){Delay10KTCYx(2);};

    }
    beep();
    // потом ток уменьшаем до одной десятой поддерживая напряжение
    while (CURRENT>(CHARGE_CURRENT/10)){
        AKB_VOLTAGE=GET_AKB_VOLTAGE()*mVdel;//
        MIDDLE_POINT_VOLTAGE=GET_MIDDLE_POINT_VOLTAGE()*mVdel;
        CURRENT=1000*(MIDDLE_POINT_VOLTAGE-AKB_VOLTAGE)/Rshunt;
        if (AKB_VOLTAGE > CHARGE_VOLTAGE){PWM_K=PWM_K-1;}
        if (AKB_VOLTAGE < CHARGE_VOLTAGE){PWM_K=PWM_K+1;}
        SetDCPWM2(PWM_K); ///!!!
        OUTPUTS();// вывод на дисплей
    }
    ClosePWM2(); 

    while(1)
    {beep();}
вот собственно ОС.
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 25.03.2017, 15:28   #6
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 40
Сообщений: 4,001
Вес репутации: 1858/96
maagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant future
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: большая пульсация с ШИМ. как быть?

" понавешал кондеров (те что красным), дроссель поставил побольше.
стало даже хуже"..вешать все это нужно после той точки с которой считываются значения, между выходом и нагрузкой
maagalex вне форума   Ответить с цитированием
Старый 26.03.2017, 23:38   #7
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 366
Вес репутации: 612/35
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: большая пульсация с ШИМ. как быть?

ну не хочу я два интегратора паять, специально сделал упор на "запрограммировать
посоветуйте "на пальцах", там дальше я разберусь.

ЗЫ собрал сегодня "на коленке вот такой интегратор - стало значительно лучше,
но - это ж лишние детали

ЗЫЫ КСТА:
CURRENT=1000*(MIDDLE_POINT_VOLTAGE-AKB_VOLTAGE)/Rshunt;
считать нельзя. сегодня на этом лоб разбил. вылетел за разрядную сетку...
надо:
CURRENT=(MIDDLE_POINT_VOLTAGE-AKB_VOLTAGE)*(1000/Rshunt);
Миниатюры
integrat.GIF  
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 27.03.2017, 02:19   #8
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 40
Сообщений: 4,001
Вес репутации: 1858/96
maagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant futuremaagalex has a brilliant future
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: большая пульсация с ШИМ. как быть?

Может..стабилитрон поставить в делитель напряжния обратной связи вместо (вместе с) резитора?.Тогда пульсации уменьшатся во столько раз во сколько делит делитель..
maagalex вне форума   Ответить с цитированием
Старый 27.03.2017, 08:59   #9
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 31
Сообщений: 1,249
Вес репутации: 2068/66
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: большая пульсация с ШИМ. как быть?

Цитата:
Сообщение от pasha_zv Посмотреть сообщение
ну не хочу я два интегратора паять, специально сделал упор на "запрограммировать
посоветуйте "на пальцах", там дальше я разберусь.

ЗЫ собрал сегодня "на коленке вот такой интегратор - стало значительно лучше,
но - это ж лишние детали

ЗЫЫ КСТА:
CURRENT=1000*(MIDDLE_POINT_VOLTAGE-AKB_VOLTAGE)/Rshunt;
считать нельзя. сегодня на этом лоб разбил. вылетел за разрядную сетку...
надо:
CURRENT=(MIDDLE_POINT_VOLTAGE-AKB_VOLTAGE)*(1000/Rshunt);
Как раз первый вариант был правильнее, только приведение нужно было сделать приведение типов, если делать сначала деление, а потом умножение снижается точность вычисления из-за целочисленного деления.
Рак вне форума   Ответить с цитированием
Старый 27.03.2017, 20:49   #10
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 660
Вес репутации: 1160/43
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: большая пульсация с ШИМ. как быть?

Цитата:
Сообщение от pasha_zv Посмотреть сообщение
а вот с зарядом.
напряжение на батарее и на средней точке( зарядник-разрядник-шунт)
болтается, как гавно в проруби.
в пределах 0.2В - так за милую душу.
да, понимаю, импульсник.

стал читать напряжение 8 раз с интервалом 10 мкС, и считать среднее,
увеличил частоту ШИМ до 200кГц, понавешал кондеров (те что красным), дроссель поставил побольше.
стало даже хуже.
получил помимо быстро дергающихся значений еще и пульсацию с частотой около герца.
может глупость скажу, но как вариант... частота ШИМа одна, частота измерений другая и возможно у вас каждый раз изменяется фаза ШИМа в которой происходит измерение АЦП отсюда болтанка, примерно тоже самое когда в кадровой или строчной нет синхронизации
DmitrijVDN вне форума   Ответить с цитированием
Старый 28.03.2017, 04:31   #11
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Фрязино, М.О.
Возраст: 57
Сообщений: 1,775
Вес репутации: 2135/74
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: большая пульсация с ШИМ. как быть?

Я тоже не понимаю необходимость аналоговой фильтрации, когда можно отлично синхронизировать ШИМ и измерения. После чего сделать цифровой ФНЧ (например КИХ с прямоугольным окном в виде обычного скользящего среднего). Синхронизация ШИМа и АЦП даст почти идеальную фильтрацию (нули АЧХ фильтра попадут на частоту ШИМа).
Марк вне форума   Ответить с цитированием
Старый 28.03.2017, 10:18   #12
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 366
Вес репутации: 612/35
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: большая пульсация с ШИМ. как быть?

Цитата:
Сообщение от DmitrijVDN Посмотреть сообщение
может глупость скажу, но как вариант... частота ШИМа одна, частота измерений другая и возможно у вас каждый раз изменяется фаза ШИМа в которой происходит измерение АЦП отсюда болтанка, примерно тоже самое когда в кадровой или строчной нет синхронизации
агаааааааааа.
а вот это весьма таки здраво.
надо поковырять палкой в библиотеке - как там фаза ШИМ меняется.
если действительно идет сброс/перезапуск шима при команде "SetDCPWM2(PWM_K);
то - все верно.
если просто перезапись счетного регистра - буду смотреть в другую сторону.

Цитата:
Сообщение от Марк Посмотреть сообщение
Синхронизация ШИМа и АЦП даст почти идеальную фильтрацию (нули АЧХ фильтра попадут на частоту ШИМа).
как это сделать?
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 28.03.2017, 11:44   #13
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 366
Вес репутации: 612/35
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: большая пульсация с ШИМ. как быть?

для усреднения показаний делал так, думал пойдет, ан нетъ.
Код:
// напряжение на батарее
unsigned int GET_AKB_VOLTAGE (void)
{
	int 	ADC_result; 
	long int temp;
	char i;

	ADCON2=0x8a;       // 0x8A = 0b10001010; Right Justified, 2Tad, Fosc/32
// 	ADCON1=0x0c;       // 0x0C = 0b00001100; Vss, Vdd as reference, AN0, AN1, AN2 as analog channels
 	ADCON0=0b00001011;       //  = 0b000xxx11; Select channel 2 as input, Start ADC conversion

	temp=0;// замер 5 раз
	// с учетом разрешения АЦП 5мВ/дел как раз все нормально выходит. выход в миливольтах
	for (i=0;i<5;i++) //  пробовал и 16 отсчетов делать, потом делить соответственно
// на (16/5) . все равно болтается.
// при чем - когда идет РАЗРЯДКА (аналоговая цепочка) показания стоят прекрасно.
	{
		Delay10TCYx(5);      // Delay for 50TCY
 		ConvertADC();       // Start conversion
 		while(BusyADC());      // Wait for completion
 		ReadADC();     // Read result
		temp = temp+(ADRESH*256)+ADRESL;    // Merge the higher and lower bit to get a 16 bit 
		Delay10TCYx(5);      // Delay for 50TCY
	}
	CloseADC();       // Disable A/D converter 
 	ADC_result = temp;    // Merge the higher and lower bit to get a 16 bit 

	return ADC_result;
}
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 28.03.2017, 17:27   #14
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Фрязино, М.О.
Возраст: 57
Сообщений: 1,775
Вес репутации: 2135/74
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: большая пульсация с ШИМ. как быть?

Цитата:
Сообщение от pasha_zv Посмотреть сообщение
как это сделать?
Output Compare, который работает на формирование ШИМ и Output Compare, который запускает АЦП имеют общую синхронизацию. таким образом, точки захвата аналогового сигнала УВХ АЦП будут неподвижны относительно диаграммы ШИМ управляющей зарядом-разрядом.
такая когерентность автоматически приводит к попаданию нулей АЧХ скользящего среднего на частоту пульсаций ШИМ.
Марк вне форума   Ответить с цитированием
Старый 28.03.2017, 20:04   #15
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 660
Вес репутации: 1160/43
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: большая пульсация с ШИМ. как быть?

Цитата:
Сообщение от pasha_zv Посмотреть сообщение
Код:
  while(AKB_VOLTAGE<CHARGE_VOLTAGE){

        AKB_VOLTAGE=GET_AKB_VOLTAGE()*mVdel;// GET_AKB_VOLTAGE() возвращает деления АЦП
        MIDDLE_POINT_VOLTAGE=GET_MIDDLE_POINT_VOLTAGE()*mVdel; 

        CURRENT=1000*(MIDDLE_POINT_VOLTAGE-AKB_VOLTAGE)/Rshunt;// все значения считаем в миливольтах и милиамперах
        if (CURRENT < CHARGE_CURRENT){ PWM_K=PWM_K+1;}
        if (CURRENT > CHARGE_CURRENT){ PWM_K=PWM_K-1;}
        SetDCPWM2(PWM_K); ///!!!
        OUTPUTS();// вывод на дисплей
        //for(counter=0;counter<100;counter++){Delay10KTCYx(2);};

    }
вот собственно ОС.
имхо вообще непонятен смысл этого танца с будном , зачем каждый раз пересчитывать АЦП и сравнивать с константой , это шоб в дебагере циферки красиво читались? наоборот не проще? один раз пересчитать константу и напрямую сравнивать с попугаями АЦП
DmitrijVDN вне форума   Ответить с цитированием
Старый 28.03.2017, 22:20   #16
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 366
Вес репутации: 612/35
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: большая пульсация с ШИМ. как быть?

совершенно правильно.
пока девайс представляет из себя "а-ля абдурино
(макетка с мозгами, плата силовухи, дисплей, кнопки, приборы, и все соединено "втычечными проводами и разложено на куске пенопласта )
так отлаживать удобнее.

как все придет к одной плате и вдали покажется корпус - буду причесывать программу.
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 28.03.2017, 22:40   #17
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 660
Вес репутации: 1160/43
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: большая пульсация с ШИМ. как быть?

всеравно не понимаю смысла каждый раз выполнять несколько сотен команд лишнего кода...
DmitrijVDN вне форума   Ответить с цитированием
Старый 31.03.2017, 23:57   #18
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 366
Вес репутации: 612/35
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: большая пульсация с ШИМ. как быть?

Цитата:
Сообщение от Марк Посмотреть сообщение
Output Compare, который работает на формирование ШИМ и Output Compare, который запускает АЦП имеют общую синхронизацию. таким образом, точки захвата аналогового сигнала УВХ АЦП будут неподвижны относительно диаграммы ШИМ управляющей зарядом-разрядом.
такая когерентность автоматически приводит к попаданию нулей АЧХ скользящего среднего на частоту пульсаций ШИМ.
идея очень правильная.
ТОЛЬКО - Output Compare не работает в режиме PWM. (эта связка для CAPTURE нужна. она же сбрасывает TMR2)
сделал - следить ручками.
рассинхронизация в пару тиков получается, что тут не важно.


PS. осталось дрожание в пару единиц в последнем разряде, что и ожидалось.
признаюсь, даже и не ожидал такого результата. удивлен.
Код:
//*******************************************************************************
// напряжение на батарее 
// параметр - если не ноль - будет синхронизация по ШИМ2, иначе просто получить показания
// и ничего не ждать
#define PWM2 PORTCbits.RC1 

unsigned int GET_AKB_VOLTAGE (char sync)
{
    unsigned int temp;
    char i;

    ADCON2=0b10010110;       //  0b10.010.110; Right Justified, tACQ=4Tad, Fosc/64
     ADCON1=0b00001100;       //  Vss, Vdd as reference, AN0, AN1, AN2 as analog channels
     ADCON0=0b00001011;       //  = 0b000xxx11; Select channel 2 as input, Start ADC conversion

    temp=0;
    for (i=0;i<5;i++){// пять замеров. для 5мВ/дел как раз и усреднение получим и умножать не надо.
        if (sync){
            // ждем начало цикла ШИМ. перепад _/-
            //wait zero
            while(PWM2);
            //ждем единичку
            while(!PWM2);
        } else     {Delay10TCYx(12);} // wait 10mkS(fosc=48). в принципе 4Тacq уже забито в конфиг АЦП, посему можно и не ждать
        ADCON0bits.GO = 1;
        while( ADCON0bits.GO );
        temp=temp+((unsigned int)ADRESH<<8)+ADRESL;
    }
    return temp;
}
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 01.04.2017, 13:09   #19
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Фрязино, М.О.
Возраст: 57
Сообщений: 1,775
Вес репутации: 2135/74
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: большая пульсация с ШИМ. как быть?

Цитата:
Сообщение от pasha_zv Посмотреть сообщение
признаюсь, даже и не ожидал такого результата. удивлен.
Ничего удивительного. Синхронный прием - основа практически всех сигнальных (DSP) приложений.
Ваш случай совсем простой, потому что измеряемый сигнал полностью детерминирован по форме (создан Вашей же схемой).
Марк вне форума   Ответить с цитированием
Старый 01.04.2017, 22:50   #20
pasha_zv
Senior Member
 
Аватар для pasha_zv
 
Регистрация: 17.04.2010
Адрес: Ставрополь
Возраст: 46
Сообщений: 366
Вес репутации: 612/35
pasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to allpasha_zv is a name known to all
По умолчанию Re: большая пульсация с ШИМ. как быть?

случай то простой, однако, Мрак возник вопрос:
а что я в таком случае замеряю то?
ибо показания стрелочного амперметра и моего "замерятора" отличаются
на 20...70%, в зависимости от коэффициента ШИМ.

вот на ночь обопьюсь кофе и буду искать корреляцию.
__________________
не спится, не спится, не спиться бы мне ...
pasha_zv вне форума   Ответить с цитированием
Старый 02.04.2017, 08:08   #21
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Фрязино, М.О.
Возраст: 57
Сообщений: 1,775
Вес репутации: 2135/74
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: большая пульсация с ШИМ. как быть?

Вы невнимательно разобрались с физикой дела.
Треугольная форма измеряемого сигнала означает, что для получения искомого результата Вы должны либо понимать что должно быть в точке захвата аналогового сигнала, либо ИНТЕГРИРОВАТЬ этот самый сигнал.
Последнее - гораздо ближе к физике, нежели аналитически пересчет единственного измерения за период. Я Вам не зря говорил про скользящее среднее и нули АЧХ. Сие означало, что:
1. Измерений за период ШИМа должно быть некоторое заметно отличающееся от одного количество;
2. Длина (время от начала до конца, а не число элементов) буфера накопления для измерения скользящего среднего (а можно и с непрямоугольным окном, если есть интерес к АЧХ с минимизацией боковых лепестков) должна быть кратна периоду ШИМ, дабы сохранить нули АЧХ на частотах ШИМ и обеспечить их подавление с уровнями разрешения АЦП.
Из чего следует простой план действий.
1. Вычисляете предельное количество отсчетов, которые способен сделать АЦП за период ШИМа, а равно возможности ОЗУ по размещению в нем буфера такого размера (зависит от задачи в общем и МК).
2. Организуете когерентное (синхронное с ШИМом) накопление в этом буфере с кольцевым счетом указателя заполнения.
3. С каким то интервалом, желательно после каждого отсчета, но можно и с прореживанием, находите среднее значение в буфере (для ускорения деления желательно иметь длину буфера кратной степени двойки, что заменяет деление на сдвиги).
Результат усреднения Вас приятно удивит.
Если Вас интересует энергетика, а не среднее, то придется находить среднеквадратичное значение отсчетов, что потребует возведения в квадрат каждого отсчета, их сложения и извлечения корня из усредненной по числу выборок суммы квадратов...
ЗЫ. Мне в принципе фиолетово, хоть пеньком называйте, но мое имя соответствует нику на форуме и называется Марк...
Марк вне форума   Ответить с цитированием
Старый 02.04.2017, 10:53   #22
HHIMERA
Senior Member
 
Регистрация: 10.06.2008
Возраст: 55
Сообщений: 2,574
Вес репутации: 3624/94
HHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond reputeHHIMERA has a reputation beyond repute
По умолчанию Re: большая пульсация с ШИМ. как быть?

Цитата:
Сообщение от Марк Посмотреть сообщение
для получения искомого результата Вы должны либо понимать что должно быть в точке захвата аналогового сигнала
И что же там должно быть???
__________________
"Я не даю готовых решений, я заставляю думать!"(С)
HHIMERA вне форума   Ответить с цитированием
Старый 02.04.2017, 11:06   #23
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: Фрязино, М.О.
Возраст: 57
Сообщений: 1,775
Вес репутации: 2135/74
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: большая пульсация с ШИМ. как быть?

Там должно быть мгновенное значение сигнала зависящее от формы сигнала. Если создать аналитическую формулу пересчета этого значения в среднее, то можно иметь искомое выходное значение и по одному отсчету на период, однако формула будет многопараметрической и не факт, что при изменениях в диаграмме работы и схемотехнике аналоговой части она сохранит актуальность. Поэтому корректный расчет средневыпрямленного или среднеквадратичного значений (по потребности) выглядит более предпочтительным, хотя и заметно более ресурсоемким.
Марк вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучение ШИМ PIC контроллера МимоПроходил Вопросы начинающих 6 10.10.2013 21:53
Большая временная задержка. Как расчитать? Autotronic Вопросы начинающих 18 21.01.2009 23:06
ADuC7024, ШИМ Grigorij Микроконтроллеры других производителей 0 14.10.2008 09:41
Сдвиг 8ми программных ШИМ в последовательный регистор: как двигать бит на С? maagalex Продукция MICROCHIP 25 14.05.2008 15:25
как заряжать мобильник используя ШИМ??? Lexi Общетехнические вопросы 36 04.05.2007 00:18


Часовой пояс GMT +3, время: 23:13.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot