产品知识

当前位置:主页 > 新闻资讯 > 产品知识 >

示例:基于国民技术N32G452的智能照明控制系统设

时间:2024-12-27 来源:未知
摘要:N32G452是 国民技术 推出的一款基于ARM Cortex-M4内核的高性能MCU,主频可达120MHz。它具备低功耗、丰富外设和安全功能,广泛应用于物联网和智能设备。本文将介绍如何基于N32G452设计一个...

  N32G452是国民技术推出的一款基于ARM Cortex-M4内核的高性能MCU,主频可达120MHz。它具备低功耗、丰富外设和安全功能,广泛应用于物联网和智能设备。本文将介绍如何基于N32G452设计一个简单的智能照明系统,通过按键、光敏传感器和PWM控制LED灯的亮度,实现自动化照明控制。

  系统功能

  光线检测:通过光敏传感器实时检测环境亮度。

  手动控制:按键用于切换LED灯的工作模式(自动/手动)。

  PWM调光:根据环境光强,自动调整LED灯亮度。

  低功耗模式:长时间无操作时进入低功耗状态。

  硬件设计

  MCU:N32G452

  光敏传感器:用于检测环境亮度

  LED灯:控制灯光亮度

  按键:切换手动/自动模式

  电源:5V USB供电

  代码实现

#include "n32g45x.h"
#include "stdio.h"

void SystemClock_Config(void);
void GPIO_Config(void);
void ADC_Config(void);
void TIM3_PWM_Config(void);
void Enter_LowPower_Mode(void);

volatile uint8_t mode = 0;  // 0: 自动模式, 1: 手动模式
volatile uint16_t adc_value = 0;

int main(void) {
    HAL_Init();
    SystemClock_Config();
    GPIO_Config();
    ADC_Config();
    TIM3_PWM_Config();

    while (1) {
        // 检测按键状态切换模式
        if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0) == GPIO_PIN_RESET) {
            mode = !mode;  // 切换模式
            HAL_Delay(300);  // 防抖
        }

        // 读取光敏传感器的ADC值
        HAL_ADC_Start(&hadc);
        HAL_ADC_PollForConversion(&hadc, HAL_MAX_DELAY);
        adc_value = HAL_ADC_GetValue(&hadc);

        if (mode == 0) {  // 自动模式
            __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, adc_value / 4);  // PWM调光
        } else {  // 手动模式
            __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 512);  // 固定亮度
        }

        HAL_Delay(100);  // 避免频繁更新
    }
}

void SystemClock_Config(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLM = 8;
    RCC_OscInitStruct.PLL.PLLN = 336;
    RCC_OscInitStruct.PLL.PLLP = 2;
    HAL_RCC_OscConfig(&RCC_OscInitStruct);

    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}

void GPIO_Config(void) {
    __HAL_RCC_GPIOB_CLK_ENABLE();
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_PULLUP;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

void ADC_Config(void) {
    __HAL_RCC_ADC1_CLK_ENABLE();
    ADC_HandleTypeDef hadc = {0};
    hadc.Instance = ADC1;
    hadc.Init.ScanConvMode = DISABLE;
    hadc.Init.ContinuousConvMode = ENABLE;
    hadc.Init.DiscontinuousConvMode = DISABLE;
    hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    hadc.Init.NbrOfConversion = 1;
    HAL_ADC_Init(&hadc);
}

void TIM3_PWM_Config(void) {
    __HAL_RCC_TIM3_CLK_ENABLE();
    TIM_HandleTypeDef htim3 = {0};
    TIM_OC_InitTypeDef sConfigOC = {0};

    htim3.Instance = TIM3;
    htim3.Init.Prescaler = 84 - 1;
    htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim3.Init.Period = 1023;
    HAL_TIM_PWM_Init(&htim3);

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 0;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1);

    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
}

  项目亮点

  自动化照明

  使用光敏传感器动态控制LED灯亮度,避免浪费电能。

  手动切换功能

  用户可通过按键切换自动和手动模式,灵活应对不同需求。

  低功耗设计

  系统在长时间无操作时可进入低功耗模式,延长电池续航时间。

  代码简洁

  采用HAL库简化代码编写,易于维护和扩展。

  总结

  ​​​​​​​基于国民技术N32G452 MCU的智能照明控制系统充分展示了MCU的强大功能和灵活性。通过自动化控制和手动切换相结合,系统可以适应多种使用场景,并且代码结构简洁,适合初学者和开发者参考。

联系我们
Contact
联系我们
我们很想听到您的声音

热线电话:13378657558

客服QQ:1084456689

Email:sales@hisemic.com

公司地址:深圳市宝安区永福路和盛工业区D1栋5层