Обсуждаем контроллеры компании 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;}
}
}
Подскажите в чем проблема
Ср дек 05, 2018 08:09:57
скорее всего не успевает отработать прерывание.
попробуй режим fast-pwm, ноги конечно, будут жёстко привязаны, но, зато регулировать можно будет практически на все 100%
Ср дек 05, 2018 08:37:04
Ежли желание на качественный выходной сигнал - надо использовать
аппаратное управления выходным сигналом (OC2).
Ср дек 05, 2018 10:36:31
скорее всего не успевает отработать прерывание.
попробуй режим fast-pwm, ноги конечно, будут жёстко привязаны, но, зато регулировать можно будет практически на все 100%
Мне нужно подавать ШИМ на 3 выхода и при этом с разной поочередностью
Ср дек 05, 2018 11:04:42
по тз в 1 посте этого не видно...
какие частоты?
Ср дек 05, 2018 12:18:25
по тз в 1 посте этого не видно...
какие частоты?
частота шим 31кгц
Ср дек 05, 2018 18:45:56
тогда надо ускорять прерывания.
желательно использовать регистры и отключить дополнительные действия (задвигание в стек и доставание из него временных регистров), проще всего это сделать на ассемблере или в алгоритм билдере
если подождешь выходных - вернусь домой, помогу.
Добавлено after 2 minutes 33 seconds:
но даже в этом случае 0 и 100% не получится, но будет значитешьно ближе
Добавлено after 3 minutes 53 seconds:
можно ещё навесить 3 элемента или-не и управлять ими свободными ногами, но это будет лучше работать если выхьды переключаются относительно редко.
Ср дек 05, 2018 20:34:11
Как вариант BAM...
Правда непрерывная плавность регулировки там несколько хуже (на глаз).
Ср дек 05, 2018 20:52:50
тогда надо ускорять прерывания.
желательно использовать регистры и отключить дополнительные действия (задвигание в стек и доставание из него временных регистров), проще всего это сделать на ассемблере или в алгоритм билдере
если подождешь выходных - вернусь домой, помогу.
Добавлено after 2 minutes 33 seconds:
но даже в этом случае 0 и 100% не получится, но будет значитешьно ближе
Добавлено after 3 minutes 53 seconds:
можно ещё навесить 3 элемента или-не и управлять ими свободными ногами, но это будет лучше работать если выхьды переключаются относительно редко.
Асемблер вобще не понимаю , сразу учил С++
Наверное пойду на то чтобы вывести ШИМ через логику на выходы. Аппаратный шим лучше. Но я надеялся что через прерывания будет норм и сделал плату уже, буду делать другую.
Переключение выходов может достигать частоты 14кгц
Чт дек 06, 2018 14:18:29
если ассемблер не знаешь — попробуй алгоритм билдер (я на нем и планировал написать).
Пт дек 07, 2018 09:29:29
попробуй так.
скопировал твой алгоритм с небольшими правками
если разбираться не хочешь - можешь только прошивку померять.
Добавлено after 1 hour 16 minutes 47 seconds:я убавил до приемлемой частоту АЦП, сделал проверку результата по готовности, а не по времени, остальное оставил
хотя мне не понятно, зачем надо чегото ждать, если вход ацп не изменяется.
- Вложения
-
- шим.rar
- (6.78 KiB) Скачиваний: 234
Пт дек 07, 2018 11:04:24
попробуй так.
скопировал твой алгоритм с небольшими правками
если разбираться не хочешь - можешь только прошивку померять.
Добавлено after 1 hour 16 minutes 47 seconds:
я убавил до приемлемой частоту АЦП, сделал проверку результата по готовности, а не по времени, остальное оставил
хотя мне не понятно, зачем надо чегото ждать, если вход ацп не изменяется.
Я очень хочу разобраться.
Это ты делал в ассемблере или код создан Алгоритм билдером ?
Пт дек 07, 2018 14:03:52
это проект в алгоритм билдере
Добавлено after 1 minute 40 seconds:
оно заработало?
Добавлено after 2 hours 48 minutes 54 seconds:
просто кодевижен, а судя, например, по работе с портами это именно он, как и все ЯВУ среды показцвает далеко не всё.
в этом есть большой плюс при создании больших проектов и некоторый минус (кстати преодолимый, при хорошем знании среды) при создании быстрых...
Я очень рекомендую для познания принципов и нюансов работы с кортроллером поработать если не в АСМе, то хотябы с АБ.
Пт дек 07, 2018 14:08:52
это проект в алгоритм билдере
Добавлено after 1 minute 40 seconds:
оно заработало?
1. Пока нет возможности проверить, через пару дней буду дома проверю.
2. Где скачать Алгоритм билдер ? Все ссылки которые я нашел не рабочие.
3. Ты не занимался управлением бесколлекторными двигателями ?
Пт дек 07, 2018 15:56:39
вот
отсюда вроде чтото живое скачивается (скачать скачал, но ставить не стал: зачем мне два
) если не пойдет, напиши - свой на яндекс диск выкину, расшарю.
Сб дек 08, 2018 11:32:19
про безколлекторники: теорию знаю, но на практике нужды не было.
Вс дек 09, 2018 18:08:44
про безколлекторники: теорию знаю, но на практике нужды не было.
Вот в этом проблема , в теории все работает прекрасно а в железе худо бедно
Пн дек 10, 2018 03:34:23
понятно... это контроллер блдс, аналоговый вход — внешнее управление тягой, 3 дискрета - выходы с холлов... /понятно
—————
код придется поправить - добавить крайние положения (0 и 100%) принудительно
а проблема в чем (кроме того, что 0 и 100% пока не достигнуты)?
да ещё входа реверса нет...
да ещё при больших оборотах фазы переключения съезжать могут...
короче, такой подход к построению кода неправильный, объясню: у тебя выход переключается только по фронту ШИМа, сам фронт ни к чему не привязан, частоты переключения доходят до половины частоты ШИМ... а если сигнал открытия придет в конце периода импульса фазы? то у тебя ключ фазы будет открыт ещё до половины того времени, когда должна быть открыта следующая фаза...
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.