搜索
发新帖本帖赏金 0.12元(功能说明)我要提问
返回列表

[技术问答] hc32f460系列输出可调占空比的PWM波

[复制链接]
4444|20
手机看帖
扫描二维码
随时随地手机跟帖
abcd文刀三皮|  楼主 | 2021-7-14 12:04 | 显示全部楼层 |阅读模式
请问最好用哪个定时器?还有就是占空比和频率怎么计算?

使用特权

评论回复
lavion| | 2021-7-14 12:56 | 显示全部楼层
虽然 用户手册 屎一样, 但是 你还是得看!

使用特权

评论回复
单片小菜| | 2021-7-14 15:16 | 显示全部楼层
需要仔细看看手册的,我认为还是要看的细一些。

使用特权

评论回复
abcd文刀三皮|  楼主 | 2021-7-14 16:03 | 显示全部楼层
单片小菜 发表于 2021-7-14 15:16
需要仔细看看手册的,我认为还是要看的细一些。

用的TimerA,但是自己设置的周期值,和比较基准值,跟输出的波形结果不一致

使用特权

评论回复
sgrtf661| | 2021-7-14 16:07 | 显示全部楼层
华大代理 可以做技术支持 QQ:409946461

使用特权

评论回复
asmine| | 2021-7-14 16:35 | 显示全部楼层
994460eea1d3bb705.png
参照这个章节

使用特权

评论回复

打赏榜单

qqaa123 打赏了 0.01 元 2021-07-15

qqaa123 打赏了 0.01 元 2021-07-15

qqaa123 打赏了 0.10 元 2021-07-15

自己造声卡| | 2021-7-14 17:13 | 显示全部楼层
6楼讲的太细致了,不错。

使用特权

评论回复
abcd文刀三皮|  楼主 | 2021-7-14 17:47 | 显示全部楼层
我就是按照手册进行配置的

使用特权

评论回复
martinhu| | 2021-7-15 09:29 | 显示全部楼层
TimerA最简单,其次是timer6和timer4都可以

使用特权

评论回复
carpsnow| | 2021-7-15 13:33 | 显示全部楼层
你配置完,有什么问题呢?占空比不对?频率不对?

使用特权

评论回复
abcd文刀三皮|  楼主 | 2021-7-15 13:43 | 显示全部楼层
carpsnow 发表于 2021-7-15 13:33
你配置完,有什么问题呢?占空比不对?频率不对?

示波器显示有杂波,然后占空比不对

使用特权

评论回复
liangzhou1988| | 2021-7-15 14:18 | 显示全部楼层
这位兄弟看起来是本论坛活跃用户,有疑问加微信详聊。华大马生  18688968198@abcd文刀三皮

使用特权

评论回复
Tars| | 2021-7-15 14:46 | 显示全部楼层
占空比 = u16Compare / u16Period

使用特权

评论回复
chnchmhgw| | 2021-7-15 16:01 | 显示全部楼层
martinhu 发表于 2021-7-15 09:29
TimerA最简单,其次是timer6和timer4都可以

你好,我使用TimerA产生100hz的PWM波,逻辑分析仪抓取波形正常。
但是,出现一个问题:
使用三角波计数模式,设置输出40%的占空比,启动后有时输出是40%,有时输出是60%;出现了占空比互补现象,是什么原因,偶发出现。

参考例子:timera_sawtooth_wave_base_timer

使用特权

评论回复

评论

martinhu 2021-7-15 17:01 回复TA
@chnchmhgw :TimerA设置分频了吗?把分频取消试试? 
martinhu 2021-7-15 16:17 回复TA
@chnchmhgw :代码发出来看看 
chnchmhgw 2021-7-15 16:09 回复TA
参考例子写错了,具体参考的如下: timera_triangular_wave_compare_output 
chnchmhgw| | 2021-7-15 16:31 | 显示全部楼层
chnchmhgw 发表于 2021-7-15 16:01
你好,我使用TimerA产生100hz的PWM波,逻辑分析仪抓取波形正常。
但是,出现一个问题:
使用三角波计数模 ...


TimerA的初始化配置代码,在main.c中初始化,具体如下:
static void Timera_Config(void)
{
    stc_timera_base_init_t stcTimeraInit;
    stc_timera_compare_init_t stcTimerCompareInit;
    stc_irq_regi_conf_t stcIrqRegiConf;
    stc_port_init_t stcPortInit;
   
    /* configuration structure initialization */
    MEM_ZERO_STRUCT(stcTimeraInit);
    MEM_ZERO_STRUCT(stcIrqRegiConf);
    MEM_ZERO_STRUCT(stcTimerCompareInit);
    MEM_ZERO_STRUCT(stcPortInit);

    /* Configuration peripheral clock */
    PWC_Fcg2PeriphClockCmd(TIMERA_UNIT4_CLOCK, Enable);
    PWC_Fcg0PeriphClockCmd(PWC_FCG0_PERIPH_AOS, Enable);

    /* Configuration TIMERA compare pin */
    PORT_SetFunc(TIMERA_UNIT4_CH2_PORT, TIMERA_UNIT4_CH2_PIN, TIMERA_UNIT4_CH2_FUNC, Disable);

    /* Configuration timera unit 4 base structure */
    stcTimeraInit.enClkDiv = TimeraPclkDiv128;  //84M/128 = 656.25Khz
    stcTimeraInit.enCntMode = TimeraCountModeTriangularWave; //TriangularWave
    stcTimeraInit.enCntDir = TimeraCountDirUp;
    stcTimeraInit.enSyncStartupEn = Disable;
    stcTimeraInit.u16PeriodVal = PERIOD_VAL;        //freq: 100Hz; cd0/hex = 3280/dec
    TIMERA_BaseInit(TIMERA_UNIT4, &stcTimeraInit);

    /* Configuration timera unit 4 compare structure */
    stcTimerCompareInit.u16CompareVal = stcTimeraInit.u16PeriodVal * 4u / 5u; //duty cycle: (1-80%)=20%
    stcTimerCompareInit.enStartCountOutput = TimeraCountStartOutputLow;
    stcTimerCompareInit.enStopCountOutput = TimeraCountStopOutputLow;
    stcTimerCompareInit.enCompareMatchOutput = TimeraCompareMatchOutputReverse;
    stcTimerCompareInit.enPeriodMatchOutput = TimeraPeriodMatchOutputKeep;
    stcTimerCompareInit.enSpecifyOutput = TimeraSpecifyOutputInvalid;
    //stcTimerCompareInit.enCacheEn = Enable;
    //stcTimerCompareInit.enTriangularTroughTransEn = Enable;
    //stcTimerCompareInit.enTriangularCrestTransEn = Disable;
    //stcTimerCompareInit.u16CompareCacheVal = stcTimerCompareInit.u16CompareVal;

    /* Configure Channel 2 */
    TIMERA_CompareInit(TIMERA_UNIT4, TIMERA_UNIT4_CH2, &stcTimerCompareInit);
    TIMERA_CompareCmd(TIMERA_UNIT4, TIMERA_UNIT4_CH2, Enable);

    /* Enable period count interrupt */
    TIMERA_IrqCmd(TIMERA_UNIT4, TimeraIrqOverflow, Enable);
    /* Interrupt of timera unit 4 */
    stcIrqRegiConf.enIntSrc = TIMERA_UNIT4_OVERFLOW_INT;
    stcIrqRegiConf.enIRQn = Int006_IRQn;
    stcIrqRegiConf.pfnCallback = &TimeraUnit4_IrqCallback;
    enIrqRegistration(&stcIrqRegiConf);
    NVIC_ClearPendingIRQ(stcIrqRegiConf.enIRQn);
    NVIC_SetPriority(stcIrqRegiConf.enIRQn, DDL_IRQ_PRIORITY_15);
    NVIC_EnableIRQ(stcIrqRegiConf.enIRQn);

    /* Configure timera unit 4 disable */
    TIMERA_Cmd(TIMERA_UNIT4, Disable);
}

通过PUMP_ON来启动pwm波,PUMP_ON在中断函数中调用:
/* TIMERA PWM parameter definition */
#define PERIOD_VAL     0xCD0u
#define DUTY_CYLCE     (0.4)    //duty cycle: 0~1, except 0 and 1; duty_cycle = u16Compare/u16Period = COMPARE_VAL/PERIOD_VAL
#define COMPARE_VAL    (PERIOD_VAL * (1-DUTY_CYLCE))

#define PUMP_ON()                               {TIMERA_Cmd(TIMERA_UNIT4, Enable);TIMERA_SetCompareValue(TIMERA_UNIT4, TIMERA_UNIT4_CH2, COMPARE_VAL);}
#define PUMP_OFF()                              TIMERA_Cmd(TIMERA_UNIT4, Disable)

使用特权

评论回复
15302656163| | 2021-7-15 16:57 | 显示全部楼层
有没有人需要HC32L136K8TA  封装QFP64 7*7

使用特权

评论回复
martinhu| | 2021-7-15 17:05 | 显示全部楼层
chnchmhgw 发表于 2021-7-15 16:31
TimerA的初始化配置代码,在main.c中初始化,具体如下:
static void Timera_Config(void)
{

把TimerA的分频取消试试,
或者建议你更改如下两行,如果只是单路的PWM,用锯齿波模式,比较匹配和周期匹配,一个输出高电平,另一个输出低电平,这样确定的电平设置,应该不会出现相反的现象。
6699160eff9f8a2adc.png

使用特权

评论回复
sadicy| | 2021-7-16 14:47 | 显示全部楼层
讨论的好认真,加油楼主

使用特权

评论回复
返回列表 发新帖 本帖赏金 0.12元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 我要提问 投诉建议 申请版主

本版热帖

本版活跃用户

优质原创写原创,赢大奖

编辑推荐

  • 21小跑堂 打赏20.00元   4天前

    打赏帖:#申请原创# @21小跑堂@21小跑堂@21小跑堂 大 ...

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:希望我的问题都能回答

  • 21小跑堂 打赏4.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:参加欧姆龙在线研讨会

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:本次讲座问题截图

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:学习学习再学习

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:5

  • 21小跑堂 打赏10.00元   4天前

    打赏帖:得到打赏,

  • 1 火星国务卿 得到打赏 ¥425.00
  • 2 yanzhengxin1 得到打赏 ¥300.00
  • 3 gaoyang9992006 得到打赏 ¥265.00
  • 4 Gavin3389 得到打赏 ¥225.00
  • 5 13426257085 得到打赏 ¥200.00
  • 6 呐咯密密 得到打赏 ¥185.00
  • 7 两只袜子 得到打赏 ¥155.00
  • 8 yangjiaxu 得到打赏 ¥155.00
  • 9 cr315 得到打赏 ¥150.00
  • 10 elephant00 得到打赏 ¥150.00
在线客服 快速回复 返回顶部 返回列表