Here is a complete program, including a simple main program that moves the servo between two positions, the minimum and the maximum. You again need to add hardware_pwm to CMakeLists.txt:
If you run the program using the circuit given earlier, you will discover that the servo does nothing at all, apart perhaps from vibrating. The reason is that the transistor voltage driver is an inverter. When the PWM line is high the transistor is fully on and the servo's pulse line is effectively grounded. When the PWM line is low the transistor is fully off and the servo's pulse line is pulled high by the resistor. The solution is to use an inverted output from the GPIO line using:
ServoInit(&s1, 20, true);
It is worth mentioning that servos make good low-cost DC motors, complete with gearboxes. All you have to do is open the servo, unsolder the motor from the control circuits and solder two wires to the motor. If you want to use the forward/reverse electronics you can remove the end stops on the gearbox, usually on the large gearwheel, and replace the potentiometer with a pair of equal value resistors, 2.2kΩ, say.
In chapter but not in this extract
Brushless DC Motors
Stepper Motors
Stepper Motor Driver
Stepper Motor Rotation – Using Timers
Summary
There are a number of different types of electric motor, but DC brushed or brushless motors are the most used in the IoT.
Brushed motors can be speed controlled using a single transistor driver and a PWM signal.
For bidirectional control you need an H‑bridge. In this case you need two PWM signals.
Servo motors set their position in response to the duty cycle of a PWM signal.
Brushless DC motors are very powerful and best controlled using off-the-shelf electronic modules. They are very powerful and thus dangerous if used incorrectly. They can be driven using a simple PWM signal.
Stepper motors are a special case of a Brushless DC motor. They move in discrete steps in response to energizing different coils.
A unipolar motor has coils that can be driven in the same direction for every step. A bipolar motor has coils that need to be driven in reverse for some steps.
Bipolar motors need two H‑bridges to operate and four GPIO lines.
You can easily create a stepper motor driver using four GPIO lines.
IBM has released new Granite models that it says provide state-of-the-art performance relative to model size. The Granite 3.0 collection includes a new, instruction-tuned, dense decoder-only LLM.
As time ticks on, the changes to the Python language become fewer and this makes it easier to upgrade. With this release the emphasis is on performance rather than new features.