aaarrr, спасибо за Ваш ответ!
На сколько я понял, частоту MCK задает кварцевый резонатор (18,432MHz), тогда для моего случая:
1. Делитель: 18432000/2^16/50 = 5,625 ближайший большой 8
2. Значение PERIOD: 18432000/8/50 = 46080
3. Значение DUTY: 46080/20мс * 1,5мс = 3456
Так я попробовал реализовать
Код
AT91C_BASE_PWMC->PWMC_DIS = 0x0F;
AT91C_BASE_PMC->PMC_PCER = (1<<AT91C_ID_PWMC);
//PWM0 output PA11, Peripheral B
AT91C_BASE_PIOA->PIO_PDR = (1 << 11);
AT91C_BASE_PIOA->PIO_BSR = (1 << 11);
AT91C_BASE_PWMC->PWMC_MR = 0x04010401;
AT91C_BASE_PWMC->PWMC_CH[0].PWMC_CMR = AT91C_PWMC_CPRE_MCK/8; //Channel Mode Register
AT91C_BASE_PWMC->PWMC_CH[0].PWMC_CDTYR = 3456; //Channel Duty Cycle Register
AT91C_BASE_PWMC->PWMC_CH[0].PWMC_CPRDR = 46080; //Channel Period Register
AT91C_BASE_PWMC->PWMC_ENA = 1; //PWMC Enable Register
К отладочной плате подключаю сервопривод, который при частоте 50Гц и длительности управляющего шага 1,5мс должен встать по середине, но он поворачивается в одну из сторон до упора. Попробовал несколько вариантов, но они результатов не дали. Где-то что-то сделал не так.
Извиняюсь, если мое сообщение покажется большой глупостью, я только учусь))
Сообщение отредактировал r00t31337 - Jan 1 2010, 14:13