首页 > 其他分享 >数码管亮度控制器的设计

数码管亮度控制器的设计

时间:2023-08-05 22:32:40浏览次数:30  
标签:控制器 HAL TIM htim2 亮度 数码管 GPIO PWM RCC

通过分频改变占空比来控制数码管的亮暗程度 想要些思路 还有一些程序上的建议 因为对于程序编写知识有点差 在quartus9.0中编程

数码管亮度控制器的设计可以通过以下步骤实现:

  1. 选择一个定时器模块,例如STM32的TIM模块,来生成一个固定频率的PWM信号。
  2. 将PWM信号连接到数码管的控制引脚上,通过改变PWM信号的占空比来控制数码管的亮度。
  3. 通过改变PWM信号的频率来改变亮度的调节范围。频率越高,亮度调节范围越小;频率越低,亮度调节范围越大。
  4. 根据所选定时器模块的不同,可能需要配置多个寄存器来实现PWM信号的生成和控制。

以下是一个简单的程序示例:

#include "stm32f4xx.h"

TIM_HandleTypeDef htim2;

void SystemClock_Config(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();

  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_TIM2_CLK_ENABLE();

  GPIO_InitTypeDef GPIO_InitStruct;
  GPIO_InitStruct.Pin = GPIO_PIN_5;
  GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 0;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 999;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  HAL_TIM_PWM_Init(&htim2);

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);

  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 500; // PWM占空比
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);

  HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);

  while (1)
  {
    // 在此处添加亮度调节代码
  }
}

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
}

使用了STM32的TIM2模块来生成PWM信号,并将信号连接到GPIOA的第5个引脚上。


标签:控制器,HAL,TIM,htim2,亮度,数码管,GPIO,PWM,RCC
From: https://blog.51cto.com/chenfenglove/6978704

相关文章

  • k8s 学习笔记之 Pod 控制器——StatefulSet
    StatefulSetStatefulSet是用来管理有状态应用的工作负载API对象。StatefulSet用来管理某Pod集合的部署和扩缩,并为这些Pod提供持久存储和持久标识符。和Deployment类似,StatefulSet管理基于相同容器规约的一组Pod。但和Deployment不同的是,StatefulSet为它们的每个......
  • k8s 学习笔记之 Pod 控制器——DaemonSet(DS)
    DaemonSet(DS)DaemonSet类型的控制器可以保证在集群中的每一台(或指定)节点上都运行一个副本。一般适用于日志收集、节点监控等场景。也就是说,如果一个Pod提供的功能是节点级别的(每个节点都需要且只需要一个),那么这类Pod就适合使用DaemonSet类型的控制器创建。DaemonSet控......
  • k8s 学习笔记之 Pod 控制器——Job & CronJob
    JobJob,主要用于负责批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)任务。Job特点如下:当Job创建的pod执行成功结束时,Job将记录成功结束的pod数量当成功结束的pod达到指定的数量时,Job将完成执行Job的资源清单文件:apiVersion:batch/v1#版本号k......
  • k8s 学习笔记之 Pod 控制器——Horizontal Pod Autoscaler(HPA)
    在之前的学习中,我们已经可以实现通过手工执行kubectlscale命令实现Pod扩容或缩容,但是这显然不符合Kubernetes的定位目标——自动化、智能化。Kubernetes期望可以实现通过监测Pod的使用情况,实现pod数量的自动调整,于是就产生了HorizontalPodAutoscaler(HPA)这种控制器。......
  • k8s 学习笔记之 Pod 控制器——Deployment
    Deployment(Deploy)为了更好的解决服务编排的问题,kubernetes在V1.2版本开始,引入了Deployment控制器。值得一提的是,这种控制器并不直接管理pod,而是通过管理ReplicaSet来简介管理Pod,即:Deployment管理ReplicaSet,ReplicaSet管理Pod。所以Deployment比ReplicaSet功能......
  • k8s 学习笔记之 Pod 控制器——ReplicaSet(RS)
    Pod控制器介绍Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类:自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后还会自动重建什么是Pod控制器Pod控制......
  • 工业级以太网控制器CH390介绍以及应用电路参考设计
    1、概述CH390是一款自带10/100M以太网介质传输层(MAC)和物理层收发器(PHY)的工业级以太网控制器芯片,支持10BASE-T的CAT3、4、5和100BASE-TX的CAT5、6连接,支持HPAuto-MDIX,低功耗设计,符合IEEE802.3u规范。CH390内置16K字节SRAM,支持3.3V或2.5V并行接口(CH390L)和SPI串行接口(CH390H),用于......
  • RunnerGo条件控制器使用方法
    在做性能测试时我们需要根据业务需求、业务场景来配置测试脚本,举个例子:在登录注册场景中,可能会有账号密码全部正确、账号格式错误、密码错误等多种情况,这里的“登录/注册”事件可以视为一个场景。一个真实业务中的场景,不仅是独立接口的串联,还会涉及到条件分支、参数提取、断言等一......
  • RunnerGo条件控制器使用方法
    在做性能测试时我们需要根据业务需求、业务场景来配置测试脚本,举个例子:在登录注册场景中,可能会有账号密码全部正确、账号格式错误、密码错误等多种情况,这里的“登录/注册”事件可以视为一个场景。一个真实业务中的场景,不仅是独立接口的串联,还会涉及到条件分支、参数提取、断言等一......
  • 待解决-数码管第 3 和第 8 引脚是连接在一起的
    从上图可看出,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,多数生产商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。而它们的公共端又可分为共阳极和共阴极,图中......