Bidirectional buck boost converter
Usually,

&quot;converter&quot; means the chip has integrated MOSFETs,

&quot;controller&quot; means it doesn't, and you have to add MOSFETs external to the chip.


For 10A current you won't find many converter chips, you'll have to use a controller with external FETs. This is a more convenient option since you can optimize FET choice for your voltage and current rather than having only one choice of FETs inside the chip.

I use Microcontroller to generate the PWM signal to control duty cycle of the converter there by maintaining constant output voltage.

That's usually extra work because the inductor current depends on PWM value and a small variation in PWM value results in huge variation in inductor current.
For example if you have a buck with 10mOhms FETs and a 10mOhm inductor, and 30V input, then a 0.1% variation in duty cycle corresponds to 30mV across 20mOhm, ie a variation in average inductor current of 1.5A. And a 8-bit PWM, which gives a 1LSB variation of 1/256, results in 5.8A current variation per LSB. So you need a PWM with lots of bits to get just the right PWM value, but that will require a ludicrous clock frequency like 2^10 times PWM frequency, so in practice you need to dither it, which means more headache and at least one software control loop iteration per cycle, in real time.
This setup requires a fast accurate software control loop and ADCs, tight timing, and any bug will destroy the MOSFETs. Using the debug probe will also pause your micro, stop the feedback loop, and destroy your MOSFETs. For safety you will need at least a fast current sense comparator (handling both current directions) that feeds directly into the micro's PWM peripheral to shuts down PWM and disable the FET if maximum inductor current is exceeded. So you need a micro with &quot;motor control&quot; feature or similar, that has a PWM controller with this special &quot;fault&quot; input that stops everything. Note that stopping the PWM is not enough, you have to make sure it stops in a state where the top FETs are OFF, otherwise it will short either the input or the output supply.
A much simpler option is to not generate the PWM with the micro but to use a buck-boost controller chip that regulates current automatically. This can use any control scheme, can be hysteretic, current mode, whatever. Then you use the micro to set the current. You can use a DAC, or you can go low-tech and just have the buck-boost always operate at its maximum efficiency current and turn it on and off with a PWM. This is quite simple and safe. If you don't want a software bug to destroy your board, you can add voltage comparators to shut it down in case of input/output overvoltage.
I've done this with a bidirectional buck that acts as a buck to charge a battery, and a boost when the current flows in the other direction from the battery to the power rail. I've used a simple hysteretic control with a comparator that monitors current on a low side shunt resistor. Adding a bit of offset to the comparator threshold via mcu gpio and some resistors, I can set it to pump current in either direction. It always operates at the same current, and the whole thing is enabled/disabled by a low frequency PWM from the micro.
In battery charging mode it is a switchmode constant current source, since inductor current is monitored by the hysteresis comparator that drives the FETs. So, average battery charging current is proportional to the PWM value. In reality, it delivers pulsed current, with a cap on the output to smooth it out. The micro has an internal comparator that stops the PWM peripheral in case of output overvoltage which would happen if the battery was disconnected.
In battery discharging mode, it is also a constant current source that feeds the power rail from the battery. Rail voltage is regulated by the micro, and the control loop is simple since the power rail has large capacitors which provide a large time constant, and it's a +24V rail which will tolerate +/- a few volts of ripple without any trouble since it feeds other DC-DCs anyway. So the micro has plenty of time to adjust the PWM value before the voltage drifts out of spec.
It works nicely, it's cheap, reliable, and efficient.