ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

# 在mm32f3270上为micropython创建PWM模块(2)

2021-11-18 14:00:52  阅读:210  来源: 互联网

标签:duty micropython TIM mm32f3270 时基 PWM 通道


在mm32f3270上为micropython创建PWM模块(2)

文章目录

Architect

上文提到, 参考esp系的实现模型. 但具体几个问题还要想明白才能动手.

共用时基的问题

原本想着时基初始化之后, 后面新创建别的通道就不能再动基础频率的. 但再想这样也不合理, 如果不让后面的通道动基础频率, 本身这个通道也改不了基础频率, 因为它们使用同样的函数接口.

索性很粗暴的做法, 每次实例化代码都重新配置一遍时基, 这样最终生效的是最后一次配置时基. 承认共用同一个时基的通道存在耦合.

在micropython中,公用同一个时基的多个通道, 公用同一个时基配置, counter_conf, 然后各自通道有自己的channel_conf

实例化传参

同上文描述, 允许三种类型的实例化绑定硬件通道:

  • 同类对象
  • 通道编号
  • 引脚名称

freq和duty

  • freq

    • 就按"共用实际的问题"中的描述, 以最后一次配置为准.
    • 一个新思路, freq以第一次配置为准, 后续配置频率的操作无效, 除非调用了deinit. 这样代码更安全一点, 也兼顾了灵活性.
    • 为输出pwm信号的频率, 而不是pwm的分辨率.
  • duty

    • duty的周期固定为1000, 可调范围为0-1000
  • 在内部用掩码标记PWM通道的激活情况. 掩码的内存放在counter_conf中.

应用场景

竟然没有定时器的start和stop接口, 这就不能期望多通道同步输出了. 设定实例化PWM对象之后就立刻输出.
deinit在实际不会关掉引脚输出, 而是将duty调为0.
deinit函数中会看, 如果所有的pwm通道都处于非激活状态, 就可以直接stop定时器.

使用两个TIM组合

这样的软件架构更完整一点, 可以适配多TIM的情况. 代码虽然稍复杂一点, 但值得尝试.
MM32的TIM, 在大多情况下, 一个定时器对4个输出通道(互补通道不能独立编程, 不算), 如果要支持机器手/机器猫之类的应用, 至少需要8个输出通道.

思路清晰了, 准备动手写代码…

标签:duty,micropython,TIM,mm32f3270,时基,PWM,通道
来源: https://blog.csdn.net/suyong_yq/article/details/121399041

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有