har_d 2023-05-03 20:26 采纳率: 0%
浏览 36
已结题

STC15输出PWM频率不精确

STC15输出可调频率的PWM信号,如何保证精度在5%内,目前遇到的问题是定时器0赋初值时数值类型转换,导致精度不对。
目前代码:TL0=(uint8 t)( 65536 - (11059200 / ((uint32 t)Timer0.PWM Rate * 256) ) );
TH0=(uint8 t)( (65536 - (11059200 / ((uint32 t)Timer0.PWM Rate * 256) )) >> 8);

  • 写回答

3条回答 默认 最新

  • serendipity★ 2023-05-03 20:42
    关注

    根据你提供的信息,你遇到的问题是STC15单片机输出可调频率的PWM信号时精度不精确。这可能是由于定时器0赋初值时数值类型转换导致的。你提供的代码为:

    TL0=(uint8_t)( 65536 - (11059200 / ((uint32_t)Timer0.PWM_Rate * 256) ) );
    TH0=(uint8_t)( (65536 - (11059200 / ((uint32_t)Timer0.PWM_Rate * 256) )) >> 8);
    

    为了解决精度不精确的问题,可以尝试以下方法:

    1. 修改你的代码,使用浮点数进行计算,然后再转换为整数。这样可以提高计算精度。例如:
    TL0 = (uint8_t)(65536 - (11059200.0 / ((float)Timer0.PWM_Rate * 256.0)));
    TH0 = (uint8_t)((65536 - (11059200.0 / ((float)Timer0.PWM_Rate * 256.0))) / 256);
    
    1. 你可以调整PCA时钟分频以获得更精确的PWM频率。例如,可以尝试使用PCA_Clock_2T、PCA_Clock_4T、PCA_Clock_6T等不同的分频值

    2. 你还可以考虑使用STC15系列单片机内部集成的15位PWM模块,这个模块有6路独立输出,可以更灵活地控制每路PWM的高低电平宽度,从而实现对PWM占空比的设计

    使用STC15单片机输出PWM信号时遇到了精度不够的问题。你可以尝试调整定时器0的初值,或者检查代码中数值类型转换的部分,看看是否有问题。另外,你可以提供更多关于您的PWM信号要求和目前遇到的问题的信息,

    综上所述,你可以尝试修改代码中的数值类型转换、调整PCA时钟分频以及使用STC15内部集成的PWM模块来提高PWM信号的精度。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月4日
  • 赞助了问题酬金15元 5月3日
  • 创建了问题 5月3日

悬赏问题

  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥15 ChatGPT网络被篡改怎么办?
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战
  • ¥15 svpwm波形异常求解答
  • ¥15 STM32——硬件IIC从机通信代码实现
  • ¥15 微生物组数据分析--微生物代谢物