这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 国民技术N32G401C8L7学习记录三---学习脉宽调试技术

共4条 1/1 1 跳转至

国民技术N32G401C8L7学习记录三---学习脉宽调试技术

助工
2024-11-20 19:04:32     打赏

一:定时器的介绍

国民技术的N32G401共有两个高级的定时器,一般主要用于:对输入信号进行计数(个人觉得就是旋转编码器、脉冲输出的光栅尺,当时我在使用某32的单片机时候,就是使用高级定时器进行处理的),测量输入信号的脉冲宽度(如果使用基本定时器或者通用定时器估计精度就会受到影响)和脉冲产生输出脉冲波形(用来精准的控制步进电机或者伺服电机)。当然通用定时器也是可以满足控制要求,不过我在工业控制时候,用高级定时器使用的比较多,个人觉得这个样会稳定些。

拿定时器1来说,具有四路PWM输出功能,可以只使能一路PWM输出或者四路PWM输出,利用使用位置、脉冲模式;差分信号的模式对电机进行控制,当然定时器还具有互补输出功能、死区插入和刹车功能,这些通用定时器、基本定时器是不具备的。

二:定时器的主要特性

16 位自动装载计数器。(可实现向上计数、向下计数、向上/下计数)。 TIM1 支持中央对齐非对称模式
16 位可编程预分频器。(分频系数可配置为 1 到 65536 之间的任意值)
可编程重复计数器
TIM1 最多 9 个通道, TIM8 最多 6 个通道
4 个捕获/比较通道, 工作模式为: PWM 输出、输出比较、单脉冲模式输出、输入捕获
如下事件发生时产生中断/DMA:
更新事件
u 触发事件
u 输入捕获
u 输出比较
u 刹车信号输入
n 死区时间可编程的互补输出
对于 TIM1,通道 1、 2、 3、 4 支持此功能
对于 TIM8,通道 1、 2、 3 支持此功能
可通过外部信号控制定时器
多个定时器从内部连接在一起,以实现定时器同步或链接
TIM1_CC5 和 TIM8_CC5 用于比较器消隐
TIM1 的通道 4/7/8/9 可输出的脉冲信号,可通过配置上升沿和下降沿来触发 ADC
增量(正交)编码器接口:用于追踪运行轨迹和解析旋转方位
霍尔传感器接口:用于三相电机控制 

三:软件调试部分

脉冲调制技术:脉宽调制(Pulse-Width Modulation,PWM)是利用微处理器的数字输出,来对模拟电路进行控制的一种非常有效的技术,通过对一系列脉冲的宽度进行调制,来等效的获得所需要的波形(含形状和幅值),即通过改变导通时间占总时间的比例,也就是占空比,达到调整电压和频率的目的。

软件调试步骤:

步骤1:配置IO口的工作模式

步骤2:配置定时器1的模式,设置成PWM功能

步骤3:设置分频器和比较值的初值。

步骤四:利用系统延时延时Delay(当然做项目时候,不要使用delay延时函数)

3.1 占空比调节,主要代码如下:

3.1 占空比调节,主要代码如下:
temp = temp +1 ;

if(temp >=100) temp = 5 ;
 
    Channel1Pulse = (uint16_t)(((uint32_t)temp * (TimerPeriod - 1)) / 100);
 
 
 
    Common_TIM_Base_Initialize(ADTIM, TimerPeriod, 0);
    TIM_Output_Channel_Struct_Initialize(&TIM_OCInitStructure);   
 
    /* Channel 1, 2 and 3 Configuration in PWM mode */
    TIM_OCInitStructure.OcMode       = TIM_OCMODE_PWM2;
    TIM_OCInitStructure.OutputState  = TIM_OUTPUT_STATE_ENABLE;
    TIM_OCInitStructure.OutputNState = TIM_OUTPUT_NSTATE_ENABLE;
    TIM_OCInitStructure.Pulse        = Channel1Pulse;
    TIM_OCInitStructure.OcPolarity   = TIM_OC_POLARITY_LOW;
    TIM_OCInitStructure.OcNPolarity  = TIM_OCN_POLARITY_LOW;
    TIM_OCInitStructure.OcIdleState  = TIM_OC_IDLE_STATE_SET;
    TIM_OCInitStructure.OcNIdleState = TIM_OCN_IDLE_STATE_RESET;
    TIM_Output_Channel1_Initialize(ADTIM, &TIM_OCInitStructure); 
SysTick_Delay_Ms(100);

3.2 频率递增调节:调节范围5K-72K,幅度每500ms,增加1K,主要代码如下:

     temp = temp + 1000 ;
if(temp >=72000) temp = 5000 ;
 
    TimerPeriod = (ADTIMClockFrequency / temp) - 1;

Channel1Pulse = (uint16_t)(((uint32_t)5 * (TimerPeriod - 1)) / 10);  //此处代码是调节占空比使用

    /* TIM Base Init, Period = TimerPeriod, Prescaler = 0 */
    Common_TIM_Base_Initialize(ADTIM, TimerPeriod, 0);
    
    TIM_Output_Channel_Struct_Initialize(&TIM_OCInitStructure); 

    /* Channel 1, 2 and 3 Configuration in PWM mode */
    TIM_OCInitStructure.OcMode       = TIM_OCMODE_PWM2;
    TIM_OCInitStructure.OutputState  = TIM_OUTPUT_STATE_ENABLE;
    TIM_OCInitStructure.OutputNState = TIM_OUTPUT_NSTATE_ENABLE;
    TIM_OCInitStructure.Pulse        = Channel1Pulse;
    TIM_OCInitStructure.OcPolarity   = TIM_OC_POLARITY_LOW;
    TIM_OCInitStructure.OcNPolarity  = TIM_OCN_POLARITY_LOW;
    TIM_OCInitStructure.OcIdleState  = TIM_OC_IDLE_STATE_SET;
    TIM_OCInitStructure.OcNIdleState = TIM_OCN_IDLE_STATE_RESET;
    TIM_Output_Channel1_Initialize(ADTIM, &TIM_OCInitStructure);  
 
SysTick_Delay_Ms(500);

image.png




关键词: 国民     N32G401C8L7     脉宽     定时器    

专家
2024-11-20 21:39:31     打赏
2楼

感谢分享


专家
2024-11-20 21:55:48     打赏
3楼

感谢分享


专家
2024-11-21 08:11:06     打赏
4楼

感谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]