合肥中科深谷嵌入式项目实战——人工智能与机械臂(六)

简介: 合肥中科深谷嵌入式项目实战——人工智能与机械臂(六)

⭐️硬件PWM驱动呼吸灯

我们前面和大家介绍了定时器原理和按键消抖的相关知识,今天,我们来说说硬件PWM驱动呼吸灯,下一篇,会介绍舵机的控制。

🌟PWM

我们既然学习硬件PWM驱动呼吸灯,那么什么是PWM呢。

PWM是Pulse Width Modulation的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其控制简单、灵活和动态响应好等优点而成为电力电子技术最广泛应用的控制方式。其应用领域包括测量,通信,功率控制与变换,电动机控制、伺服控制、调光、开关电源,甚至某些音频放大器。 PWM是一种对模拟信号电平进行数字编码的方法,通过高分辨率计数器的使用,实现对一个模拟信号的电平进行编码,这个编码信号在范围上在0(包含0)到最大值(在更高位分辨率的情况下可以是小数)之间变化。 具体来说,PWM是一种周期性重复的模拟信号,它通过调节开关的占空比来控制输出电平。

🌟PWM原理

以STM32单片机为例,其IO口只能输出高电平和低电平。

假设高电平为5V、低电平则为0V,那么要输出不同的模拟电压就要用到PWM。通过改变IO口输出的方波的占空比,从而获得使用数字信号模拟成的模拟电压信号。

电压是以一种脉冲序列被加到模拟负载上去的,接通时是高电平1,断开时是低电平0。接通时直流供电输出,断开时直流供电断开。通过对接通和断开时间的控制,理论上来讲,可以输出任意不大于最大电压值5V的模拟电压。

🌟pwm驱动呼吸灯

🌟什么是呼吸灯

在人眼辨识能力范围内,调节LED亮的时间,达到LED灯的亮度不同。例:给低电平LED就亮,如果一个脉冲中全是低电平那么LED最亮,如果一个脉冲一半是高电平,一半是低电平,那么LED就显得有点暗,这样调整脉冲中的高低电平的比例就可以达到LED的亮度调节。

通俗一点讲就是: LED灯逐渐由暗变亮,接着由亮变暗

一般人眼睛对于80Hz以上刷新频率则完全没有闪烁感,那么我们平时见到的LED灯,当它的频率大于50Hz的时候,人眼就会产生视觉暂留效果,基本就看不到闪烁了,而是误以为是一个常亮的LED灯。

由于频率很高时看不到闪烁,占空比越大LED越亮,占空比越小LED越暗。所以,在频率一定时,可以用不同占空比改变LED灯的亮度,使其达到一个呼吸灯的效果。

🌟代码实现

总体思路:

  1. 开启时钟,开启定时器时钟和GPIO时钟。
  2. 初始化时基单元。初始化ARR和PSC的值。
  3. 初始化GPIO,PWM要通过GPIO输出,配置GPIO。
  4. 初始化输出比较模块。选择通道,初始化输出比较结构体。
  5. 启动定时器。启动后就开始输出PWM波形了。

🌟pwm.h文件

#ifndef __PWM_H_
#define __PWM_H_
#include "stm32f4xx.h"
 
void Pwm_Init(void);
 
#endif

这段代码的目的是声明一个函数Pwm_Init(),以供其他C文件使用,并在包含此头文件的任何源文件中都可用。

🌟pwm.c文件

#include "pwm.h"
 
void Pwm_Init(void)
{
  GPIO_InitTypeDef    GPIO_InitStruct;
  TIM_OCInitTypeDef   TIM_OCInitStruct;
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
  //初始化GPIOF组时钟
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
  
  //初始化PF10引脚
  GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_9;     //引脚10 LED1
  GPIO_InitStruct.GPIO_Mode   = GPIO_Mode_AF;   //复用
  GPIO_InitStruct.GPIO_Speed  = GPIO_Speed_50MHz; //速度
  GPIO_InitStruct.GPIO_OType  = GPIO_OType_PP;  //推挽
  GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;   //上拉
  GPIO_Init(GPIOF,&GPIO_InitStruct);  
  
  //3、引脚功能映射
  GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14); 
  
  //4、初始化定时器,配置ARR,PSC。
  TIM_TimeBaseInitStruct.TIM_Prescaler  = 84-1;   //分频系统  84MHZ/84 = 1MHZ  每秒数1000 000数 1us数一个数 
  TIM_TimeBaseInitStruct.TIM_Period   = 500-1;  //重装值 500数,用时500us
  TIM_TimeBaseInitStruct.TIM_CounterMode  = TIM_CounterMode_Up; //向上计数
  TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; 
  TIM_TimeBaseInit(TIM14,&TIM_TimeBaseInitStruct);    
 
  TIM_OCInitStruct.TIM_OCMode   =  TIM_OCMode_PWM1;     //PWM1模式
  TIM_OCInitStruct.TIM_OutputState=  TIM_OutputState_Enable;//输出使能
  TIM_OCInitStruct.TIM_OCPolarity =  TIM_OCPolarity_Low;    //极性低
  TIM_OC1Init(TIM14,&TIM_OCInitStruct);
  TIM_OC1PreloadConfig(TIM14, TIM_OCPreload_Enable);  
  TIM_ARRPreloadConfig(TIM14,ENABLE); 
  //7、使能定时器。
  TIM_Cmd(TIM14,ENABLE);
}

我们这里是初始化一个PWM(脉宽调制)信号的函数,它使用STM32F4系列微控制器的TIM14定时器,并设置了一个LED连接到GPIOF的第9引脚。

🌟main.c文件

#include "stm32f4xx.h"
#include "led.h"
#include "pwm.h"
 
//延时
void delay_ms(int ms)
{
  int i,j;
  for(i=0; i<ms; i++)
    for(j=0; j<10000;j++);
}
 
 
//主函数
int main(void)
{
  int i;
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  LED_Init();//初始化LED
  Pwm_Init();//设置定时器4输出PWM
  
  while(1)
  {
    //从暗到亮
    for(i=1; i<499; i++)
    {
      
      TIM_SetCompare1(TIM14,i);
      delay_ms(20);
    }
    
    //从亮到暗
    for(i=499; i>0; i--)
    {
      
      TIM_SetCompare1(TIM14,i);
      delay_ms(20);
    }
  }
  return 0;
}

这里的代码就比较简单了,我们先初始化灯,然后初始化PWM,在while里面实现呼吸灯效果,先从暗到灭,然后,从灭到亮。

⭐️总结

  1. 了解呼吸灯的工作原理:呼吸灯通常使用LED作为光源,通过控制LED的亮度变化来模拟呼吸的效果。为了实现这一效果,可以使用PWM(脉冲宽度调制)来控制LED的亮度。
  2. 选择合适的PWM引脚:选择一个具有PWM功能的GPIO引脚来控制呼吸灯。在STM32F4系列微控制器中,通常使用TIM14定时器来实现PWM。
  3. 配置GPIO引脚和定时器:在代码中,需要配置GPIOF的第9引脚为TIM14的通道,并初始化TIM14定时器,设置PWM的频率和占空比。
  4. 控制呼吸灯的亮度:通过改变PWM的占空比,可以控制LED的亮度。占空比越高,LED越亮;占空比越低,LED越暗。
  5. 实现呼吸效果:通过在程序中动态调整PWM的占空比,使LED的亮度从最大值逐渐降低到最小值,然后再逐渐恢复到最大值,从而模拟呼吸的效果。

总结起来,完成硬件PWM驱动呼吸灯项目需要了解呼吸灯的工作原理、选择合适的PWM引脚、配置GPIO引脚和定时器、控制呼吸灯的亮度、实现呼吸效果等方面的知识和技能。

相关文章
|
5月前
|
传感器 数据采集 人工智能
合肥中科深谷嵌入式项目实战——人工智能与机械臂(三)
合肥中科深谷嵌入式项目实战——人工智能与机械臂(三)
|
5月前
|
人工智能 机器人
合肥中科深谷嵌入式项目实战——人工智能与机械臂(二)
合肥中科深谷嵌入式项目实战——人工智能与机械臂(二)
|
5月前
|
人工智能
合肥中科深谷嵌入式项目实战——人工智能与机械臂(五)
合肥中科深谷嵌入式项目实战——人工智能与机械臂(五)
|
5月前
|
传感器 数据采集 人工智能
合肥中科深谷嵌入式项目实战——人工智能与机械臂(四)
合肥中科深谷嵌入式项目实战——人工智能与机械臂(四)
|
6天前
|
机器学习/深度学习 人工智能 搜索推荐
深度探索人工智能在医疗影像诊断中的应用与挑战####
本文深入剖析了人工智能(AI)技术,特别是深度学习算法在医疗影像诊断领域的创新应用,探讨其如何重塑传统诊断流程,提升诊断效率与准确性。同时,文章也客观分析了当前AI医疗影像面临的主要挑战,包括数据隐私、模型解释性及临床整合难题,并展望了未来发展趋势。 ####
|
4天前
|
机器学习/深度学习 人工智能 搜索推荐
探索人工智能在医疗诊断中的应用
【10月更文挑战第36天】随着人工智能技术的飞速发展,其在各行各业的应用日益广泛,特别是在医疗领域。本文将深入探讨AI技术如何革新传统医疗诊断流程,提高疾病预测的准确性,以及面临的挑战和未来发展方向。通过具体案例分析,我们将看到AI如何在提升医疗服务质量、降低医疗成本方面发挥关键作用。
76 58
|
1天前
|
人工智能 算法 安全
人工智能在医疗诊断中的应用与前景####
本文旨在探讨人工智能(AI)技术在医疗诊断领域的应用现状、面临的挑战以及未来的发展趋势。随着科技的不断进步,AI技术正逐步渗透到医疗行业的各个环节,尤其在提高诊断准确性和效率方面展现出巨大潜力。通过分析当前AI在医学影像分析、疾病预测、个性化治疗方案制定等方面的实际应用案例,我们可以预见到一个更加智能化、精准化的医疗服务体系正在形成。然而,数据隐私保护、算法透明度及伦理问题仍是制约其进一步发展的关键因素。本文还将讨论这些挑战的可能解决方案,并对AI如何更好地服务于人类健康事业提出展望。 ####
|
1天前
|
机器学习/深度学习 人工智能 算法
人工智能在医疗诊断中的应用与挑战
本文探讨了人工智能(AI)在医疗诊断领域的应用及其面临的挑战。随着技术的不断进步,AI已经在医学影像分析、疾病预测和个性化治疗等方面展现出巨大潜力。然而,数据隐私、算法透明度以及临床整合等问题仍然是亟待解决的关键问题。本文旨在通过分析当前AI技术在医疗诊断中的具体应用案例,探讨其带来的优势和潜在风险,并提出相应的解决策略,以期为未来AI在医疗领域的深入应用提供参考。
16 3
|
1天前
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能在教育领域的应用与挑战
随着科技的不断进步,人工智能(AI)技术已经深入到社会的各个领域,其中教育领域尤为突出。本文旨在探讨人工智能在教育领域的应用现状、面临的挑战以及未来的发展趋势。通过分析AI技术如何改变传统教学模式,提高教育质量和效率,同时指出其在实际应用中可能遇到的问题和挑战,为未来教育的发展提供参考。
14 2
|
1天前
|
机器学习/深度学习 人工智能 物联网
通义灵码在人工智能与机器学习领域的应用
通义灵码不仅在物联网领域表现出色,还在人工智能、机器学习、金融、医疗和教育等领域展现出广泛应用前景。本文探讨了其在这些领域的具体应用,如模型训练、风险评估、医疗影像诊断等,并总结了其提高开发效率、降低门槛、促进合作和推动创新的优势。

热门文章

最新文章