洪嵐峰 發表於 2023-5-9 18:41:25

LPC11U66微控制器 電機控速器

要製作LPC11U66微控制器電機控速器,同時顯示設定速度和即時速度,你需要以下的零件和連結腳位:

零件:

LPC11U66微控制器:這是一款基於ARM Cortex-M0核心的微控制器,具有內建的ADC、PWM和UART等功能,可以用於控制電機速度。
電機驅動器:根據你所使用的電機類型(直流馬達或步進馬達),選擇適合的電機驅動器。
電機:根據你的需求選擇適合的電機。
速度感測器:用於感測電機的即時速度。可以使用光編碼器或霍爾效應傳感器等。

連結腳位:

將LPC11U66的PWM輸出連接到電機驅動器的控制輸入。這個腳位用於控制電機的轉速。
將速度感測器的輸出連接到LPC11U66的ADC輸入。這個腳位用於讀取電機的即時速度。
如果使用UART顯示速度,將LPC11U66的UART輸出連接到顯示設備(如LCD顯示屏)。

程式碼:
以下是示例程式碼,用於控制電機速度並同時顯示設定速度和即時速度。
可能需要根據具體的需求進行修改和擴展。


#include "LPC11Uxx.h"

#define TARGET_SPEED 100  // 設定的目標速度

void initPWM()
{
    LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 8);  // 啟用PWM時鐘

    // 設定PWM輸出引腳
    LPC_IOCON->PIO1_6 &= ~0x07;  // 清除PIO1_6的功能
    LPC_IOCON->PIO1_6 |= 0x02;   // 配置PIO1_6為PWM1_1輸出

    // 設定PWM定時器
    LPC_PWM1->MR0 = 1000;    // PWM週期為1000
    LPC_PWM1->MR1 = 0;       // 初始速度為0
    LPC_PWM1->MCR = 0x02;    // 重置計數器
    LPC_PWM1->LER = 0x03;    // 更新PWM0和PWM1的值
    LPC_PWM1->PCR = 0x0200;  // 啟用PWM1輸出通道

    LPC_PWM1->TCR = 0x09;    // 啟用PWM計數器和PWM模式
}

void initADC()
{
    LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 13);  // 啟用ADC時鐘

    // 設定ADC輸入引腳
    LPC_IOCON->R_PIO1_0 &= ~0x07;  // 清除R_PIO1_0的功能
    LPC_IOCON->R_PIO1_0 |= 0x01;   // 配置R_PIO1_0為ADC輸入

    LPC_ADC->CR = (1 << 0) |     // 啟用ADC電源
                  (1 << 1) |     // 啟用ADC功能
                  (24 << 8) |    // 設定ADC時鐘分頻為24
                  (1 << 21);     // 啟用ADC通道0

    LPC_ADC->INTEN = 0;          // 禁用ADC中斷
}

void setMotorSpeed(uint32_t speed)
{
    // 將設定速度轉換為PWM脈衝寬度
    uint32_t pulseWidth = speed * LPC_PWM1->MR0 / 100;

    // 更新PWM1的值
    LPC_PWM1->MR1 = pulseWidth;
    LPC_PWM1->LER = 0x02;    // 更新PWM1的值
}

uint32_t getMotorSpeed()
{
    // 讀取ADC值,並將其轉換為速度
    uint32_t adcValue = (LPC_ADC->DR >> 4) & 0xFFF;
    uint32_t speed = adcValue * 100 / 4095;

    return speed;
}

int main()
{
    initPWM();    // 初始化PWM
    initADC();    // 初始化ADC

    while (1)
    {
        uint32_t targetSpeed = TARGET_SPEED;
        uint32_t currentSpeed = getMotorSpeed();

        setMotorSpeed(targetSpeed);

        // 在顯示設備上顯示設定速度和即時速度
        // 這裡假設你已經有相應的顯示函數

        // 延遲一段時間,可以使用延遲函數或計時器來實現
    }
}
頁: [1]
查看完整版本: LPC11U66微控制器 電機控速器