微软公司宣布不再支持你正在使用的 IE浏览器,这会严重影响浏览网页,请使用微软最新的Edge浏览器
您好, 登录| 注册|

用单片机产生的SPWM波形,存在的问题,高手请进!

  • 2010-09-19 10:47
  • ydcman

    LV.0
  • 2.9w

    浏览

  • 136

    回复

  • 0

    获赞

  • 最近业余时间,在用AVR的单片机做逆变器。

    计划如下:

    1.第一步,用相位修正模式PWM产生SPWM波形,载频为15.586K,写出程序,做调试的PCB。

    2.第二步,用低电压进行开环调试,实测得出正弦波。

    3.第三步,实现闭环控制,各种保护功能。

    现在做在第二步,实测得出的波形和预期的差很多,请高手指教一二。

    同是电子工程师,请一定不要吝啬你的赞!

    0人已赞

    编辑 举报

    LV.1

    2366076

    603043

    13

    143098

    说说你的看法

  • LV.

    @

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    取消
    发送
  • 现在还没有回复呢,说说你的想法

    现在还没有回复呢,说说你的想法

    全部回复(136)

  • ddmushroom

    LV.1

    2010-09-20 13:20

    @ydcman

    理论上行的通,谐波少些;成本低,外围电路简单;计算方便,便于查表;你有什么好的建议吗?

    求解这个超越方程有很多方法,等效面积法是减少MCU计算量,如果全查表,用PC的软件来计算完全可以用精度更好的算法。

    个人看法,仅供参考

    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367721

    603043

    13

    373793

    取消
    发送
    12
  • ydcman

    LV.1

    2010-09-20 13:26

    @ddmushroom

    求解这个超越方程有很多方法,等效面积法是减少MCU计算量,如果全查表,用PC的软件来计算完全可以用精度更好的算法。

    个人看法,仅供参考

    谢谢了,实际中都是PC机算出的值,单片机在运行中不进行运算,只是对逻辑和时序进行处理,假如执行运算程序,8位的单片机根本来不及;实测执行运算时,载频变小,原因分析:虽然采用中断处理输入PWM值。但由于在进行乘法或除法计算时暂用的寄存器多,响应中断前,存储这些寄存器需要一定的时间,所以造成载频实际变小很多。所以考虑用查表法。还有什么算法比较好的,精度高些,望指点一二,或者提个名称吧?
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367729

    603043

    13

    143098

    取消
    发送
    13
  • ddmushroom

    LV.1

    2010-09-20 13:33

    @ydcman

    谢谢了,实际中都是PC机算出的值,单片机在运行中不进行运算,只是对逻辑和时序进行处理,假如执行运算程序,8位的单片机根本来不及;实测执行运算时,载频变小,原因分析:虽然采用中断处理输入PWM值。但由于在进行乘法或除法计算时暂用的寄存器多,响应中断前,存储这些寄存器需要一定的时间,所以造成载频实际变小很多。所以考虑用查表法。还有什么算法比较好的,精度高些,望指点一二,或者提个名称吧?

    8位机肯定是查表咯,就是查完了乘个系数

    呵呵,不知道你用什么语言写的查表+计算。

    我这部分是用汇编的,先把循环每条路径的时间先计算好,再用延时或者其他的什么把每条路的时间调成一样。频率不会有影响的

     

    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367736

    603043

    13

    373793

    取消
    发送
    14
  • ddmushroom

    LV.1

    2010-09-20 13:37

    @ydcman

    谢谢了,实际中都是PC机算出的值,单片机在运行中不进行运算,只是对逻辑和时序进行处理,假如执行运算程序,8位的单片机根本来不及;实测执行运算时,载频变小,原因分析:虽然采用中断处理输入PWM值。但由于在进行乘法或除法计算时暂用的寄存器多,响应中断前,存储这些寄存器需要一定的时间,所以造成载频实际变小很多。所以考虑用查表法。还有什么算法比较好的,精度高些,望指点一二,或者提个名称吧?
    我是把sin泰勒展开的阶数取高一点,然后用MatLab求个数值解。,我是10bit的PWM端口,用的7阶,没具体比较过更高的阶数,估计没啥用
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367742

    603043

    13

    373793

    取消
    发送
    15
  • ydcman

    LV.1

    2010-09-20 14:46

    @ddmushroom

    我是把sin泰勒展开的阶数取高一点,然后用MatLab求个数值解。,我是10bit的PWM端口,用的7阶,没具体比较过更高的阶数,估计没啥用

    呵呵,说说我的看法,不到之处,请指教。

    我用的是C语言,计算的话比如系数为1.01(每次调整变量为1%),那就是乘以101然后再除以100,对C语言不是问题,但连续累积的话计算量就比较大;比如连续调整3次都是电压不够。那对于单次的值就是101*101*101/1000000的计算量,这样不会丢数据(因为取整)。假如点取得多的话,计算量是很大的

    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367854

    603043

    13

    143098

    取消
    发送
    16
  • ddmushroom

    LV.1

    2010-09-20 15:05

    @ydcman

    呵呵,说说我的看法,不到之处,请指教。

    我用的是C语言,计算的话比如系数为1.01(每次调整变量为1%),那就是乘以101然后再除以100,对C语言不是问题,但连续累积的话计算量就比较大;比如连续调整3次都是电压不够。那对于单次的值就是101*101*101/1000000的计算量,这样不会丢数据(因为取整)。假如点取得多的话,计算量是很大的

    这个部分最好不要用C,不同的编译器出来的长度都会不一样,会明显影响效果。

    microchip的范例里面这段也是汇编的。你可以参考一下

     

    另外,一次循环以后把因子保存下来就行了,没必要连续乘吧?你的MCU只有8位的PWM吗,双字节乘法也不会多多少时间的

    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367886

    603043

    13

    373793

    取消
    发送
    17
  • ydcman

    LV.1

    2010-09-20 15:26

    @ddmushroom

    这个部分最好不要用C,不同的编译器出来的长度都会不一样,会明显影响效果。

    microchip的范例里面这段也是汇编的。你可以参考一下

     

    另外,一次循环以后把因子保存下来就行了,没必要连续乘吧?你的MCU只有8位的PWM吗,双字节乘法也不会多多少时间的

    我用的是8位的PWM,有10位的PWM,没有用,考虑就是10位要双字节。

    连成的原因是:假如有个小的值10,10*1.01=10,取整了;要是保存此值,以此类退的话,连续调整N次之后还是10.所以考虑连成的。我用的是AVR的,不是PIC的

    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367928

    603043

    13

    143098

    取消
    发送
    18
  • lizlk

    LV.1

    2010-09-20 15:34

    @ydcman

    我用的是8位的PWM,有10位的PWM,没有用,考虑就是10位要双字节。

    连成的原因是:假如有个小的值10,10*1.01=10,取整了;要是保存此值,以此类退的话,连续调整N次之后还是10.所以考虑连成的。我用的是AVR的,不是PIC的

    用TMS320F28035绝对没有问题,还可以做单周期的浮点实时运算,那个闭环求解PWM的运算对它来说太小菜了。
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367944

    603043

    13

    308094

    取消
    发送
    19
  • ydcman

    LV.1

    2010-09-20 15:36

    @lizlk

    用TMS320F28035绝对没有问题,还可以做单周期的浮点实时运算,那个闭环求解PWM的运算对它来说太小菜了。
    呵呵,数字信号处理器运算速度肯定够了,可以实时计算。就是TI的东东价格贵了些,不是我这样的发烧友能玩的起的。
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367947

    603043

    13

    143098

    取消
    发送
    20
  • ddmushroom

    LV.1

    2010-09-20 15:36

    @ydcman

    我用的是8位的PWM,有10位的PWM,没有用,考虑就是10位要双字节。

    连成的原因是:假如有个小的值10,10*1.01=10,取整了;要是保存此值,以此类退的话,连续调整N次之后还是10.所以考虑连成的。我用的是AVR的,不是PIC的

    哦,我是全双字节运算,因子本身已经放大1000倍,每次调完保存一下
    0

    设为最佳答案

    置顶

    编辑

    删除

    举报

    #该内容仅管理员可见#

    #回复内容已被删除#

    #该内容正在审核#

    回复:

    2367949

    603043

    13

    373793

    取消
    发送
    21
  • 现在还没有回复呢,说说你的想法

     1 2 3 4 5 6 7  
  • 回复

  • 收藏

  • 点赞

  • 举报有害信息

  • 已超出发布时间24小时,无法编辑与删除
    关于我们 联系方法 广告服务 会议服务 电子星球APP 网站地图 不良信息举报 热线:400-003-2006
    © 2002-2023 Netbroad(网博互动)公司版权所有 津ICP备 11006234号-2 联网备案号:12010402000747 增值电信业务经营许可证:津B2-20120058