簡體   English   中英

盡管 output 設置為 HIGH,為什么 Nucleo 144 上的引腳沒有輸出足夠高的電壓?

[英]Why is the pin on a Nucleo 144 not outputting a high enough voltage, despite the output being set to HIGH?

我正在嘗試使用 A4988 驅動器和帶有 STM32F767ZI 的 Nucleo 144 板來控制步進電機。

A4988 驅動器期望電壓單次上升到 HIGH 以使電機步進。

使用萬用表讀取了一些電壓讀數后,我發現在程序暫停期間甚至在程序暫停期間,引腳 output 的穩定電壓約為 1.2V。

每當 A4988 驅動器的 output 在 HIGH 和 LOW 之間切換時,我還添加了一些線來切換 LED(內置在板上),效果很好。

這是代碼:

main.c

#include "./headers/stm32f767xx.h"
#include <stdint.h>

int main(void)
{
    initMotor(0);
    initLed(0);
    uint32_t a = 0;
    while (1)
    {
        if (a >= 300000)
        {
            toggleLed(0);
            stepMotor(0);
            a = 0;
        }
        a++; 
    }
}

./驅動器/電機.c

#include "../headers/stm32f767xx.h"

void initMotor(int step_pin)
{
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOGEN; // enable GPIOG clock
    GPIOG->MODER &= ~(0b11 << (step_pin * 2)); // clear bits
    GPIOG->MODER |= (0b01 << (step_pin * 2)); // set mode to OUTPUT
    GPIOG->OTYPER &= ~(0b1 << step_pin); // set output type to PUSH-PULL
    GPIOG->PUPDR |= (0b10 << (step_pin * 2)); // pull the pin down
    GPIOG->ODR &= ~(0b1 << step_pin); // set output to LOW
}

void stepMotor(int step_pin)
{
    GPIOG->ODR ^= (0b1 << step_pin); // toggle between LOW and HIGH
}

./drivers/led.c

#include "../headers/stm32f767xx.h"

void initLed(int pin)
{
    RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; // enable GPIOG clock
    GPIOB->MODER |= (0b01 << (pin * 2)); // set mode to OUTPUT
    GPIOB->OTYPER &= ~(0b1 << pin); // set output type to PUSH-PULL
    GPIOB->ODR &= ~(0b1 << pin); // set output to LOW
}

void toggleLed(int pin)
{
    GPIOB->ODR ^= (0b1 << pin); // toggle between LOW and HIGH
}

我已經使用萬用表驗證了通過 STLINK USB 提供給電路板的電壓為 5V(我認為這已經足夠),並且驅動器也接收到正確的 5V 電壓。

我不認為這與 A4988 驅動程序有關。 我嘗試了來自不同制造商的多個相同驅動程序,但仍然得到相同的結果。 電機也提供了足夠高的電壓(12V),但並未全部投入。

我得出的結論是,這很可能是源於 Nucleo 144 板的問題,但對於實際問題是什么有點卡住了。

我正在使用 GPIO G 引腳 0,它在板上標記為“IO”。

任何關於我下一步應該嘗試什么的建議,或者關於它可能是什么的想法,都非常感謝。


根據要求,這是我的設置圖:

圖表

如果您將 output 配置為 PUSH/PULL,則添加一個 PULLDOWN 電阻會將 output 電壓分壓到該電阻上。 不要將 PU/PD 電阻與 PP 一起使用,因為它總是被驅動並且不需要 PU/PD。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM