本帖最后由 wowu 于 2023-2-14 13:32 编辑
所有插图均不正常显示 所以在文末插入原文链接
§01 MM32 MicroPython
一、背景介绍
在过去的周末,MindMotion SuYong对于移植的MicroPython中的带有PWM版本进行了修正,发送过来了最新的版本:
MicroPython/MindMotion/firmware-2021-11-22.bin · 卓晴/编程技术 - Gitee.com
这个版本时对于 测试MindMotion MM32F3277 MicroPython -2021-11-20新增PWM版本 所存在的问题进行修复。但程序的主要框架没有改变。即仍然借助于两个Timer完成八个PWM通道的功能。
▲ 图1.1.1 测试实验电路板
二、PWM功能
根据前天的测试,可以知道PWM的主要管脚与内部定时器资源如下:
【表1-1 PWM资源配置】
PWM 定时器 GPIO
PWM0 TIM3 PA6
PWM1 TIM3 PA7
PWM2 TIM3 PB0
PWM3 TIM3 PB1
PWM4 TIM4 PB6
PWM5 TIM4 PB7
PWM6 TIM4 PB8
PWM7 TIM4 PB9
三、下载MicroPython
1、下载MicroPython
将下载的MicroPython下载到 设计带有SD卡的 MM32F3277 MicroPython 实验板 ,然后使用STM32BOOTLOADER进行REPL测试。
▲ 图1.3.1 将新版的MicroPython下载到测试版中
2、上电测试
上电后,在REPL界面显示:
>> Open COM8, baud : 115200
[Y] sdcard ready.
[Y] file system on sdcard ready.
[Y] run the main.py on disk ...
[Y] done. 1
MicroPython v1.16 on 2021-11-22; MB_F3270 with MM32F3277G7P
>>>
§02 测试PWM
一、基本测试
1、测试基本波形
初始化PWM通道0,1,分别占用PA6,PA7输出对应的PWM波形。
(1) 测试代码
from machine import Pin,PWM
import utime
pwm0 = PWM(0, freq=10000, duty=200)
pwm1 = PWM(1, freq=10000, duty=500)
print("Test PWM.")
(2) 输出波形
测量输出波形,如下图所示:
▲ 图2.1.1 PWM输出波形
可以看到这个波形与设置参数之间存在误差:
频率误差: 实际的PWM输出频率为9.589kHz,使用FLUKE45数字万用表的频率档测量的信号的频率为9.5914kHz。
占空比误差: 设置的duty=200。实际输出则为800。输出波形反向了。
下面是PWM0的duty分别设置为 1, 999对应的波形。
▲ 图2.1.2 PWM0设置duty=1对应的波形
▲ 图2.1.3 PWM0设置duty=999对应的波形
2、动态改变duty
(1)测试代码
from machine import Pin,PWM
import utime
pwm0 = PWM(0, freq=10000, duty=500)
pwm1 = PWM(1, freq=10000, duty=1)
print("Test PWM.")
duty = 1
dutyinc = 20
dir = 0
while True:
if dir == 0:
duty += dutyinc
if duty >= 1000:
duty = 999
dir = 1
else:
if duty < dutyinc:
duty = 1
dir = 0
else:
duty -= dutyinc
pwm1.duty(duty)
utime.sleep_ms(100)
▲ 图2.1.4 动态改变PWM1的占空比
※ 测试总结 ※
对于MindMotion在11月22日发送过来的移植有PWM功能的MicroPython的软件进行了测试。首先,在两个PWM的通道(PA6,PA7)上可以测试到输出的波形,但信号参数与设置之间还存在着差异:
输出频率比设置频率小;
输出的占空比正好与设置的相反。
▲ 图3.1 设置PWM品味100kHz对应的输出波形
■ 问题溯源
后来经过测试,只初始化PWM0, 而不初始化PWM1,则输出波形的极性正常了。
▲ 图3.1.1 只是初始化PWM0, 输出duty=100对应的波形
如果同时初始化PWM0,PWM1,则输出波形中PWM0 的波形不正常。
下面是初始化PWM0,duty=200, PWM1,duty=100对应的波形:
▲ 图3.1.2 初始化PWM0,duty=200, PWM1,duty=100对应的波形
■ 问题修复
1、信号极性
经过修改,SuYong 修改完底层的BUG之后,极性正常了。
▲ 图3.2.1 底层的HAL存在问题
2、频率误差
频率误差仍然存在问题。尚无法达到准确输出频率。主要是因为分频整除对应的问题。SuYong在这个环节并没有能够进行进一步的 优化。
————————————————
版权声明:本文为CSDN博主「卓晴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhuoqingjoking97298/article/details/121470771
|