这几天打算将IoT_Camera板子装在一辆玩具小车上,由于小车使用的是无刷电机+电调的驱动组合,因此需要使用PWM来驱动电调。在调试过程中需要用到频率为50Hz的PWM输出,其中高电平的宽度在1ms~2ms之间。
那么问题来了,我是用的SDK工程中的pwm_demo.c来配置PWM波形,vpwm_test.c代码也是一样的。基本配置如下:
代码1.
其中period_ns指pwm的周期,单位为纳秒。比如50Hz的波,周期为20ms,则设为20,000,000。
counter_ns则代表高电平的占空长度,单位为纳秒。此处需要2ms,则设为2,000,000即可。
然而问题并不像我想象中的那么easy,使用示波器测量发现实际波周期只有3.6ms,高电平时间倒是有2ms。因此决定去分析代码,看到pwm.c line112处的代码:
代码2.
代码中的period表示pwm周期,duty代表高电平宽度,duty_revert代表低电平宽度,经实际测试,单位为us。在代码2之前添加设置为:
代码3.
则示波器捕获显示PWM波形正常,周期1ms,高电平200us,而设置改为:
代码4.
则输出的波形还是和demo的效果一样,仔细看可发现,在代码2中,reg的周期及高电平存储位只有0xfff,显然当周期为20000时存储值溢出被截断了。也没有相关的芯片手册可参考,此处自作聪明的改成0xffff,示波器检测波形还是和demo的输出效果一样,不知此处的问题出在哪里?
http://www.rt-thread.org/phpBB3/topic5201.html
我测试的是38kHZ方波,可以,比较准确!
你试试,不会是脉宽周期是有范围的,你看看pwm的源码,不会是超出范围了??
http://www.rt-thread.org/phpBB3/topic5201.html
我测试的是38kHZ方波,可以,比较准确!
你试试,不会是脉宽周期是有范围的,你看看pwm的源码,不会是超出范围了??
我感觉是超过范围了,我测了别的周期也是正常的,目测4ms内都是正常的。