打印
[N32G45x]

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

[复制链接]
1181|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
万图|  楼主 | 2024-10-15 08:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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的强大功能和灵活性。通过自动化控制和手动切换相结合,系统可以适应多种使用场景,并且代码结构简洁,适合初学者和开发者参考。

使用特权

评论回复
沙发
公羊子丹| | 2024-10-16 07:46 | 只看该作者
这个系统不错,可以装在卧室里当夜灯用。

使用特权

评论回复
板凳
周半梅| | 2024-10-16 07:46 | 只看该作者
用N32G452做控制确实很合适,性能和性价比都挺好。

使用特权

评论回复
地板
帛灿灿| | 2024-10-16 07:46 | 只看该作者
看完后想把它做成书架灯,用起来肯定方便。

使用特权

评论回复
5
童雨竹| | 2024-10-16 07:46 | 只看该作者
能加个红外传感器吗?晚上有人经过自动亮灯就更智能了。

使用特权

评论回复
6
Wordsworth| | 2024-10-16 07:47 | 只看该作者
我觉得低功耗模式这一点很重要,适合电池供电的设备。

使用特权

评论回复
7
Pulitzer| | 2024-10-16 07:47 | 只看该作者
我有个类似的项目,但用的是N32G4系列,感觉可以优化下代码。

使用特权

评论回复
8
Bblythe| | 2024-10-16 07:47 | 只看该作者
PWM调光功能太实用了,LED灯亮度控制很平滑。

使用特权

评论回复
9
Uriah| | 2024-10-16 07:47 | 只看该作者
有没有试过用蓝牙控制?远程开关灯可能更方便。

使用特权

评论回复
10
Clyde011| | 2024-10-16 07:48 | 只看该作者
以后我也试试HAL库,之前一直在用裸机代码开发。

使用特权

评论回复
11
suncat0504| | 2024-10-29 15:13 | 只看该作者
LED灯使用PWM调光,平滑。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

3773

帖子

0

粉丝