I have set blockgeneration time to 15 second but blocks are generated with the speed of 1 block per min(avg)
Changing just the target block generation time does not mean that the average block interval will be that time. The block interval is governed by the Proof of Work target, and there is a limit to what that target can be. If you do not increase that target's limit, then the target will not be able to increase to the point where your blocks are being mined at the rate you want them to be mined at. You need to increase your target limit (it can be found in chainparams.cpp and is called powLimit) so that blocks can be found more quickly.