Обсуждаем контроллеры компании Atmel.
Ответить

Проблема с ШИМ

Вт дек 04, 2018 21:46:09

На Атмеге8 создаю щим с помощью прерываний таймера2. С помощью АЦП меняю переменную.
Использую два прерывания , одно по переполнению , другое по совпадению.
В прерывании по переполнению задаю высокий уровень на нужных выходах, а в прерывании по совпадению обнуляю.
Меняя число по совпадению изменяется скважность сигнала на выходе.
Но есть одна большая проблема , при уменьшении скважности менее 10-15% (то есть переменник в ноль) сигнал на выходе начинает выдавать импульсы со скважностью менее 10-15% но в то же время и импульсы с 80-90% скважностью. На осциллографе это выглядит так
http://uploads.ru/ZyFg9.jpg
Вот предел ниже которого это происходит
http://uploads.ru/viRLY.jpg
А вот максимум когда переменник на +
http://uploads.ru/6ZX8p.jpg
А вот код
Спойлер
Код:
#include <mega8.h>

#include <delay.h>
#define ADC_VREF_TYPE 0x60
char ADC;
int read=0;
char PW0=0;
char PW1=0;
char PW2=0;

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
 
PORTD|=(PW0<<3)|(PW1<<4)|(PW2<<5);
 
read++;
}


interrupt [TIM2_COMP] void timer2_comp_isr(void)
{

PORTD&=0xFF&((0<<3)|(0<<4)|(0<<5));

}










void main(void)
{

PORTB=0x00;
DDRB=0x07;


PORTC=0x30;
DDRC=0x00;


PORTD=0xC0;
DDRD=0x38;


TCCR0=0x00;
TCNT0=0x00;


TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x01;
TCNT2=0x00;
OCR2=0x80;


MCUCR=0x00;

TIMSK=0xC0;

UCSRB=0x00;

ACSR=0x80;
SFIOR=0x00;

ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;

SPCR=0x00;

TWCR=0x00;

#asm("sei")

while (1)
      {
     
   
     
      PW0=(~PIND.6)&PIND.7;
      PORTB.0=PIND.6&(~PIND.7);
      PW1=PINC.4&(~PIND.7);
      PORTB.1=(~PINC.4)&PIND.7;
      PW2=(~PINC.4)&PIND.6;
      PORTB.2=PINC.4&(~PIND.6); 
      if(read==0){
      ADMUX=0x00 | (ADC_VREF_TYPE & 0xff);} //первый
      if(read==3121){
      ADCSRA|=0x40;} //через время 2
      if(read==3125){
      ADC=ADCH;//(ADCH>>1);
   
      OCR2=ADC;
      read=0;}
     
     
         
     
     
      }   
     
}

Подскажите в чем проблема

Re: Проблема с ШИМ

Ср дек 05, 2018 08:09:57

скорее всего не успевает отработать прерывание.
попробуй режим fast-pwm, ноги конечно, будут жёстко привязаны, но, зато регулировать можно будет практически на все 100%

Re: Проблема с ШИМ

Ср дек 05, 2018 08:37:04

Ежли желание на качественный выходной сигнал - надо использовать
аппаратное управления выходным сигналом (OC2).
:roll:

Re: Проблема с ШИМ

Ср дек 05, 2018 10:36:31

скорее всего не успевает отработать прерывание.
попробуй режим fast-pwm, ноги конечно, будут жёстко привязаны, но, зато регулировать можно будет практически на все 100%

Мне нужно подавать ШИМ на 3 выхода и при этом с разной поочередностью

Re: Проблема с ШИМ

Ср дек 05, 2018 11:04:42

по тз в 1 посте этого не видно...
какие частоты?

Re: Проблема с ШИМ

Ср дек 05, 2018 12:18:25

по тз в 1 посте этого не видно...
какие частоты?


частота шим 31кгц

Re: Проблема с ШИМ

Ср дек 05, 2018 18:45:56

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

Добавлено after 2 minutes 33 seconds:
но даже в этом случае 0 и 100% не получится, но будет значитешьно ближе

Добавлено after 3 minutes 53 seconds:
можно ещё навесить 3 элемента или-не и управлять ими свободными ногами, но это будет лучше работать если выхьды переключаются относительно редко.

Re: Проблема с ШИМ

Ср дек 05, 2018 20:34:11

Как вариант BAM...
Правда непрерывная плавность регулировки там несколько хуже (на глаз).
:roll:

Re: Проблема с ШИМ

Ср дек 05, 2018 20:52:50

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

Добавлено after 2 minutes 33 seconds:
но даже в этом случае 0 и 100% не получится, но будет значитешьно ближе

Добавлено after 3 minutes 53 seconds:
можно ещё навесить 3 элемента или-не и управлять ими свободными ногами, но это будет лучше работать если выхьды переключаются относительно редко.

Асемблер вобще не понимаю , сразу учил С++
Наверное пойду на то чтобы вывести ШИМ через логику на выходы. Аппаратный шим лучше. Но я надеялся что через прерывания будет норм и сделал плату уже, буду делать другую.
Переключение выходов может достигать частоты 14кгц

Re: Проблема с ШИМ

Чт дек 06, 2018 14:18:29

если ассемблер не знаешь — попробуй алгоритм билдер (я на нем и планировал написать).

Re: Проблема с ШИМ

Пт дек 07, 2018 09:29:29

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

Добавлено after 1 hour 16 minutes 47 seconds:
я убавил до приемлемой частоту АЦП, сделал проверку результата по готовности, а не по времени, остальное оставил
хотя мне не понятно, зачем надо чегото ждать, если вход ацп не изменяется.
Вложения
шим.rar
(6.78 KiB) Скачиваний: 234

Re: Проблема с ШИМ

Пт дек 07, 2018 11:04:24

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

Добавлено after 1 hour 16 minutes 47 seconds:
я убавил до приемлемой частоту АЦП, сделал проверку результата по готовности, а не по времени, остальное оставил
хотя мне не понятно, зачем надо чегото ждать, если вход ацп не изменяется.

Я очень хочу разобраться.
Это ты делал в ассемблере или код создан Алгоритм билдером ?

Re: Проблема с ШИМ

Пт дек 07, 2018 14:03:52

это проект в алгоритм билдере

Добавлено after 1 minute 40 seconds:
оно заработало?

Добавлено after 2 hours 48 minutes 54 seconds:
просто кодевижен, а судя, например, по работе с портами это именно он, как и все ЯВУ среды показцвает далеко не всё.
в этом есть большой плюс при создании больших проектов и некоторый минус (кстати преодолимый, при хорошем знании среды) при создании быстрых...
Я очень рекомендую для познания принципов и нюансов работы с кортроллером поработать если не в АСМе, то хотябы с АБ.

Re: Проблема с ШИМ

Пт дек 07, 2018 14:08:52

это проект в алгоритм билдере

Добавлено after 1 minute 40 seconds:
оно заработало?

1. Пока нет возможности проверить, через пару дней буду дома проверю.
2. Где скачать Алгоритм билдер ? Все ссылки которые я нашел не рабочие.
3. Ты не занимался управлением бесколлекторными двигателями ?

Re: Проблема с ШИМ

Пт дек 07, 2018 15:56:39

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

Re: Проблема с ШИМ

Сб дек 08, 2018 11:32:19

про безколлекторники: теорию знаю, но на практике нужды не было.

Re: Проблема с ШИМ

Вс дек 09, 2018 18:08:44

про безколлекторники: теорию знаю, но на практике нужды не было.

Вот в этом проблема , в теории все работает прекрасно а в железе худо бедно

Re: Проблема с ШИМ

Пн дек 10, 2018 03:34:23

понятно... это контроллер блдс, аналоговый вход — внешнее управление тягой, 3 дискрета - выходы с холлов... /понятно
—————
код придется поправить - добавить крайние положения (0 и 100%) принудительно
а проблема в чем (кроме того, что 0 и 100% пока не достигнуты)?
да ещё входа реверса нет...
да ещё при больших оборотах фазы переключения съезжать могут...
короче, такой подход к построению кода неправильный, объясню: у тебя выход переключается только по фронту ШИМа, сам фронт ни к чему не привязан, частоты переключения доходят до половины частоты ШИМ... а если сигнал открытия придет в конце периода импульса фазы? то у тебя ключ фазы будет открыт ещё до половины того времени, когда должна быть открыта следующая фаза...
Ответить