Для светодиодов необязательно аппаратный ШИМ использовать, там и софтового за глаза хватит → нужно лишь взять микроконтроллер с достаточным количеством ног.
Я бы сделал так: основной таймер спокойненько щелкает, а в прерывании декрементирует все 40 счетчиков (массив), ищет нулевые значения, инвертирует соответствующие ноги и обновляет значение в счетчике. Т.е. понадобятся: массив из 40 счетчиков для таймера, массив из 40 значений для выхода == 1, массив для 40 значений для выхода == 0, массив из 40 флагов (это шустрей будет, чем битовые маски использовать, хотя, конечно, на 100-200Гц ШИМа все равно) для определения, откуда при обнулении счетчика заносить значение.
Если нужно обеспечить частоту не хуже 100Гц с восьмибитным разрешением, то нам нужно будет настроить таймер на 25600Гц. За одно прерывание нужно будет обработать не меньше 40 значений, т.е. потратить, скажем, 1-2 тысячи тактов. Следовательно, простецкого STM32 на 72МГц (с кварцем 16МГц) за глаза хватит. А то и чего-нибудь послабее...