Fenolftalein 0 31 августа, 2011 Опубликовано 31 августа, 2011 · Жалоба Доброго времени суток. Нужно сделать ГКЧ от 50 до 150кГц на 18f452. Использую ШИМ. Пересчитываю частоту в период, и соответственно изменяю время заполнения, что бы при любом периоде скважность была 50%. На частотах близких к 50кГц скважность 50%. С ростом частоты скважность почему-то увеличивается (примерно 80% на 150кГц), что для ГКЧ не есть хорошо. В моделях MPLAB и Proteus скважность выдерживается. Инициализация ШИМ unsigned int imp; PR2 = (char)(1000/((float)f*0.2) + 0.5) - 1;//4Tosc = 0.2мкс, предделитель не используется, f - частота в кГц imp = 2*PR2 + 2; // длительность импульса 1/2 периода (CCPR1L:CCP1CON<5:4>) = 2[(PR2) + 1] CCPR1L = (imp >> 2) & 0xFF; // старшие 8 бит CCP1CONbits.DC1B0 = imp & 0x01; CCP1CONbits.DC1B1 = (imp >> 1) & 0x01; // младшии 2 бита Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 31 августа, 2011 Опубликовано 31 августа, 2011 · Жалоба Чесслово, не понял эквилибристики. PR2 = (char) (5000 / f - 1); // для 50% достаточно CCPR1L = PR2 >> 1; CCP1CONbits.DC1B1 = PR2 & 1; // а это при 50% можно сделать единожды CCP1CONbits.DC1B0 = 0; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fenolftalein 0 6 сентября, 2011 Опубликовано 6 сентября, 2011 · Жалоба Чесслово, не понял эквилибристики. PR2 = (char) (5000 / f - 1); // для 50% достаточно CCPR1L = PR2 >> 1; CCP1CONbits.DC1B1 = PR2 & 1; // а это при 50% можно сделать единожды CCP1CONbits.DC1B0 = 0; Просто, что бы было понятно. Проблема исчезла после того как более внимательно выставил биты конфигурации. Как они влияли на скважность ШИМ так и не понял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться