Нужна помощь по ШИМ.
Железо - ATmega32. Используется таймер 2 с выходом на OC2(PD7)/
Настройки такие

Мастер выдает код инициализации таймера 2
Код: Выделить всё
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 62,500 kHz
// Mode: Fast PWM top=0xFF
// OC2 output: Non-Inverted PWM
// Timer Period: 4,096 ms
// Output Pulse(s):
// OC2 Period: 4,096 ms Width: 4,096 ms
ASSR=0<<AS2;
TCCR2=(1<<PWM2) | (1<<COM21) | (0<<COM20) | (1<<CTC2) | (1<<CS22) | (0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0xFF;
Для запуска и останова ШИМ я пытался использовать следующие макросы
Код: Выделить всё
#define OnPWM() TCCR2 |=((1<<CS22) | (0<<CS21) | (0<<CS20))
#define OffPWM() TCCR2 &=~((1<<CS22) | (1<<CS21) | (1<<CS20))
Задача состояла в управлении двигателем постоянного тока в простецком намоточном станке. Мне потребовался плавный разгон двигателя на старте и сброс оборотов перед окончанием намотки. Проблема у меня возникла в следующем. На старте, я в регистр
OCR2 прописываю значение малых оборотов
OCR2=40;. Далее, дискретно по определенным количествам витков я поднимаю значение до
OCR2=255;.
Все работает, двигатель разгоняется.
Но при значении в регистре
OCR2=255; я не могу стабильно остановить двигатель макросом
OffPWM();.
ШИМ судя по всему отключается, но в порту PD7 остается 1.
Перерыл в интернете кучу примеров и обучалок, везде ставится задача стартануть ШИМ. А как остановить - не нашел.
Подскажите, пожалуйста, верное решение.
PS. дольше код уже сижу вдумчиво разбираю, чем эти катушки несчастные мотать. Пока сделал без плавного разгона и часть намотал, но хочется решить задачку