Dans une application, nous utilisons le raspberry p pour contrôler la vitesse du moteur via PWM. Nous avons pu obtenir un code de travail valide sur le raspberry pi 2, mais lorsque nous avons transféré ce code et les pilotes sur le pi 3, le code ne fonctionne tout simplement pas. Y a-t-il quelque chose de facile qui nous manque pour passer du pi 2 au pi 3 pour faire fonctionner ce code?
#include <bcm2835.h> # inclure <stdio.h> # définissent PIN RPI_BPLUS_GPIO_J8_32 # définissent PIN2 RPI_BPLUS_GPIO_J8_33 # définir CTL_PIN RPI_BPLUS_GPIO_J8_29 # définissent CTL_PIN2 RPI_BPLUS_GPIO_J8_31 # définir PWM_CHANNEL 0 # définissent PWM_CHANNEL2 1 # define GAMME 1024int main (int argc, char ** argv) {// bcm2835_delay (10000); if (! bcm2835_init ()) renvoie 1; // Réglez la broche de sortie sur Alt Fun 5, pour permettre au canal PWM 0 d'y être émis bcm2835_gpio_fsel (PIN, BCM2835_GPIO_FSEL_ALT0); bcm2835_gpio_fsel (PIN2, BCM2835_GPIO_FSEL_ALT0); bcm2835_gpio_fsel (CTL_PIN, BCM2835_GPIO_FSEL_OUTP); bcm2835_gpio_fsel (CTL_PIN2, BCM2835_GPIO_FSEL_OUTP); // Le diviseur d'horloge est réglé sur 16. // Avec un diviseur de 16 et une plage de 1024, en mode MARKSPACE, // la fréquence de répétition des impulsions sera // 1,2 MHz / 1024 = 1171,875 Hz, adapté à la conduite d'un moteur à courant continu avec PWM bcm2835_pwm_set_clock (BCM2835_PWM_CLOCK_DIVIDER_16); bcm2835_pwm_set_mode (PWM_CHANNEL, 1, 1); bcm2835_pwm_set_range (PWM_CHANNEL, RANGE); bcm2835_pwm_set_mode (PWM_CHANNEL2, 1, 1); bcm2835_pwm_set_range (PWM_CHANNEL2, RANGE); // Varie le rapport PWM m / s entre 1 / RANGE et (RANGE-1) / RANGE int direction = 1; données int = 1; int j; bcm2835_gpio_write (CTL_PIN, HIGH); bcm2835_gpio_write (CTL_PIN2, HIGH); pour (j = 0; j<4096; j ++) {if (j == 2048) {bcm2835_gpio_write (CTL_PIN, LOW); // bcm2835_gpio_write (CTL_PIN2, LOW); } si (données == 1) direction = 1; else if (data == RANGE-1) direction = -1; données + = direction;
bcm2835_pwm_set_data (PWM_CHANNEL, données); bcm2835_pwm_set_data (PWM_CHANNEL2, données); bcm2835_delay (10); } bcm2835_pwm_set_data (PWM_CHANNEL, 0); bcm2835_pwm_set_data (PWM_CHANNEL2, 0); bcm2835_close (); retourne 0;}