搜索
bottom↓
回复: 16

如何使用dsPIC30F2010芯片,采用等面积算法,写出单极性的SPWM程序?

[复制链接]

出0入0汤圆

发表于 2011-3-27 20:48:20 | 显示全部楼层 |阅读模式
如何使用dsPIC30F2010芯片,采用等面积算法,写出单极性的SPWM程序?
数据表做好后,如果每个PWM中断的时候装入新的占空比,则发现会丢失数据,不知哪位高人
有这类程序.

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2011-3-28 14:58:40 | 显示全部楼层
使用简单PWM 模式
当控制位OCM<2:0>(OCxCON<2:0>)= 110 或111
时,所选输出比较通道被配置为PWM 工作模式。 当配
置为PWM 工作模式时, OCxR 是主锁存器(只读),
OCxRS 是辅助锁存器。 这能使PWM 电平跳变时不会
产生毛刺。

出0入0汤圆

发表于 2011-3-31 06:48:05 | 显示全部楼层
请问hustjoybo先生,您用的是PIC30F2010吗?我写SPWM的时候,怎么没用到你说的控制位OCM<2:0>和OCxR等.能具体指导我吗?

出0入0汤圆

发表于 2011-4-3 19:45:38 | 显示全部楼层
上面的朋友可能没有用2010,不知道你说的中断里改写占空比丢失数据是什么意思。。。

出0入0汤圆

发表于 2011-4-5 09:19:45 | 显示全部楼层
ville您好.
我的数组表格里共有100个数据,也就是脉冲宽度值,我是在PWM中断程序里进行占空比更新的,但是每次数组的前面几个值
都会丢失.也就是说每个周期应该有100个脉冲,但是实际上总是缺少几个脉冲.
不知道您写过这类程序吗,能否帮我找找毛病.要不您把EMAIL告诉我,我把程序给您发过去,您帮我调试一下.程序很简单
只有几行.

出0入0汤圆

发表于 2011-4-5 11:09:58 | 显示全部楼层
回复【4楼】progsister
-----------------------------------------------------------------------

可能是你的中断没有响应过来,

出0入0汤圆

发表于 2011-4-5 14:18:21 | 显示全部楼层
这个要看你的PWM的频率,另外就是如果记得正弦表直接就是占空比数值的话,那么在中断里面只需要直接象占空比寄存器赋值就可以了,这样不需要花费多少系统周期。如果你还需要用到PWM的周期和正弦表相乘计算占空比那么在频率比较高的情况下确实会出现来不及响应的情况。

出0入0汤圆

发表于 2011-4-6 20:04:49 | 显示全部楼层
我在中断程序里没有进行计算,只是简单的赋值.,既然响应不过来,那怎么修改程序呢?请 tiancaigao7 天才杨威利指点一下好吗?

出0入0汤圆

发表于 2011-4-8 11:26:06 | 显示全部楼层
也有可能是驱动能力不足或者负载电容引起的
把PWM的频率改低试试

出0入0汤圆

发表于 2011-4-11 11:32:47 | 显示全部楼层
这是之前用2020写的单极性倍频逆变程序,不过这芯片真不怎么样,热的要死。换33F凉快好多啊。
另外30F2010的电机PWM模块,死区在占空比为0的时候也出死区,这个谁解决过,传授下经验啊!
void pwm_init()
{
        PTCON=0x2801;//暂时关闭PWM,允许特殊事件中断,无外部同步源,特殊初始每触发2次就中断一次(用于更新占空比用)
        PTPER=Period_Def;//20KHzPWM,周期时间=(PTPER+1)/120MHz;50uS=(PTPER+1)*8.33nS;PTPER=6000;另外由于PTPER最低3位是0.所以左移3位
        SEVTCMP=38000;//特殊事件触发时间设置为当次周期结束前6uS时触发
        MDC=0x0010;//占空比最小值是16
        IPC4bits.PSEMIP=6;//暂时设置PWM特殊事件中断优先级为6(第二级)
        IEC1bits.PSEMIE=0;//暂时屏蔽PWM特殊事件中断
        IFS1bits.PSEMIF=0;//清除中断标志位
                //PWM1
        PDC1=0x0010;
        //PWMCON1=0xC00;//允许中断触发,允许过流保护中断,主时基提供时间,使用PDC1独立占空比
        PWMCON1=0x0000;//禁止故障中断,正死区
        DTR1=0x1ea;//死区250nS
        ALTDTR1=0x1ea;//双死区时间,上升沿死去时间和下降沿死区时间相等
        //IOCON1=0xD000;//PWM模块控制H,L控制脚,互补输出模式,如果发生限流中断则CLDAT1:CLDAT0分别为H:L提供占空比,2位都设置为0,相当于输出低电平
        IOCON1=0xc000;//互补,无故障
        //FCLCON1=0x10E3;//共享故障1,低电平有效,使能限流故障。禁止故障控制
        TRIG1=0x0000;//PWM1触发中断,暂时禁止触发中断,用于触发AD采样用
        LEBCON1=0x0000;//不使用前沿消隐功能       
        IEC1bits.PWM1IE=0;//禁止PWM1触发中断,只使用其启动AD转换
        IFS1bits.PWM1IF=0;
                //PWM2
        PDC2=0x0010;
        //PWMCON2=0x800;//禁止中断触发,允许过流保护中断,主时基提供时间,使用PDC2独立占空比
        PWMCON2=0x0000;
        DTR2=0x1ea;//死区200nS
        ALTDTR2=0x1ea;//双死区时间,上升沿死去时间和下降沿死区时间相等
        //IOCON2=0xD000;//PWM模块控制H,L控制脚,互补输出模式,如果发生限流中断则CLDAT1:CLDAT0分别为H:L提供占空比,2位都设置为0,相当于输出低电平
        IOCON2=0xc000;
        //FCLCON2=0x10E3;//共享故障1,低电平有效,使能限流故障。禁止故障控制
        TRIG2=0x0000;//PWM2不触发中断,次中断与PWM采样中断无关
        LEBCON2=0x0000;//不使用前沿消隐功能
}

void __attribute__((__interrupt__,auto_psv)) _PWMSpEventMatchInterrupt()//PWM特殊中断,用于更新占空比
{
        register int result asm("A");//定义一个变量指向DSP累加器A
        IFS1bits.PSEMIF=0;
        //这里查遍程序,查完后计算
        //这里计算占空比,赋给Duty_Gain_A和Duty_Gain_B
        Duty_Gain_A<<=3;
        Duty_Gain_B<<=3;
        if(Duty_Gain_A<0x0010)//如果小于限制值
        {
                Duty_Gain_A=0x0010;
        }
        if(Duty_Gain_B<0x0010)
        {
                Duty_Gain_B=0x0010;
        }
        PDC1=Duty_Gain_A;
        PDC2=Duty_Gain_B;
}

出0入0汤圆

发表于 2011-4-12 21:32:04 | 显示全部楼层
liansh ,谢谢,不过芯片不一样,很难读懂,另外,能介绍一下程序的思路吗?

出0入0汤圆

发表于 2011-10-24 20:32:07 | 显示全部楼层
回复【9楼】liansh
-----------------------------------------------------------------------

你好在吗?不知道你的单极性倍频的SPWM数据是用那个公式生成的,有点看不懂,请指教一下

出0入0汤圆

发表于 2011-10-24 21:53:11 | 显示全部楼层
使用简单PWM 模式
当控制位OCM<2:0>(OCxCON<2:0>)= 110 或111
时,所选输出比较通道被配置为PWM 工作模式。 当配
置为PWM 工作模式时, OCxR 是主锁存器(只读),
OCxRS 是辅助锁存器。 这能使PWM 电平跳变时不会
产生毛刺。

出0入0汤圆

发表于 2012-9-13 07:54:08 | 显示全部楼层
liansh 发表于 2011-4-11 11:32
这是之前用2020写的单极性倍频逆变程序,不过这芯片真不怎么样,热的要死。换33F凉快好多啊。
另外30F2010的 ...

哥们,你换的33的片子是什么型号,我也受不了30系列的了 太热了

出0入0汤圆

发表于 2013-6-2 18:22:01 | 显示全部楼层
hongjie0216 发表于 2012-9-13 07:54
哥们,你换的33的片子是什么型号,我也受不了30系列的了 太热了

问下,你会用dspic30f3011的spwm么?我都弄了一个星期了,输出的spwm波有问题?如果你有会的话,可以附上程序么?感谢……

出0入0汤圆

发表于 2013-7-10 21:50:55 | 显示全部楼层
好帖,顶起!

出0入0汤圆

发表于 2018-6-23 22:56:18 | 显示全部楼层
灵隐桃庵 发表于 2013-6-2 18:22
问下,你会用dspic30f3011的spwm么?我都弄了一个星期了,输出的spwm波有问题?如果你有会的话,可以附上 ...

我刚接触这个芯片,也是要产生spwm,没搞明白,有高人吗?帮忙讲讲
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 17:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表