Skip to content

Software

CherenChin edited this page Apr 12, 2020 · 17 revisions

The Coding Language used for this system is C++ with the operating system as Linux on the Raspberry Pi. As it can be seen from the system diagram of the home page, the Raspberry Pi measures the generated voltage from the DC motor, adjusts the blade pitch accordingly using a PWM (Pulse-Width-Modulation) Proportional Controller and displays these information on the Linux Terminal.

Generated Voltage Measurement

As stated in Electronics, the ADS1015 is used to allow the Raspberry Pi to read analog signals. It has a programmable gain from 2/3x to 16x to amplify small signals and read them with higher precision. A written C++ library for using the ADs1015 can be found on https://github.com/hallgrimur1471/Adafruit_ADS1X15_RPi. This library uses the wiringPi library to conduct I2C communications.

Following the single-ended example provided by the library, a script is written for reading the voltage generated in milliVolts (mV). This can be demonstrated with the test code provided. A programmable gain of one is given to define the voltage range to +/-4.096 V as this is the closest to the Raspberry Pi's range of 3.3 V.

The ADS1015 provides 12 bits of data (2^12=4096 levels) in binary two's complement format. A simple algorithm is needed to convert the two's complement binary to voltage in mV. This was done by multiplying the data from the ADC by (3.3 divided by 4096) to give the voltage in volts and a further multiplication of 1000 to give the voltage in mV. The sampling frequency for this application is 100Hz.

Blade Pitch PWM Proportional Controller

The blade pitch is controlled using a servo motor (S3003) which requires an electric pulse of variable width (PWM) that determines the amount of movement of the shaft. The S3003 servo motor turns 45° in both directions for a total of 90° movement. The PWM signal sent to the servo motor determines the position of the shaft. The duration of the pulse turns the rotor to the desired position.

The wiringPi library is used to generate the PWM signal from the Raspberry Pi's GPIO Pin 1. Most generic servo motors expect to see a pulse every 20 ms (50Hz) and this is set using the formula below.

(https://github.com/GuitarCraftMiner/RealTime5-Team-2/blob/master/images/pwm_formula.png)

Clone this wiki locally