如何利用ARM里的PWM模块产生SPWM波

发布者:EnigmaticSoul最新更新时间:2016-08-13 来源: eefocus关键字:ARM  PWM模块  SPWM波 手机看文章 扫描二维码
随时随地手机看文章
         由于各种ARM外围配置的资源各不相同,本人使用是群星的LM3S615,里面含有3路PWM模块,可以产生6路PWM波。SPWM与PWM看看,只差了一个,实际上还是有很大的差别的,如果控制电机之类,直接利用PWM波已经足够,但要做个逆变电源,就必须用SPWM才行。

        利用PWM模块产生SPWM波,主要是利用了PWM模块里一个比较器中断功能。通过比较器,产生一个中断,再附值产生一个PWM脉冲,一直循环,下去,通过附不同的值,就可以产生一个SPWM了。主要程序如下:     

const INT16U spwmwidth[spwmct]={24,72,120,168,215,262,308,353,398,441,484,525,565,604,641,677,
                     711,743,774,803,829,854,877,897,916,932,946,958,967,974,979,981,
                     981,979,974,967,958,946,932,916,897,877,854,829,803,774,743,711,
                     677,641,604,565,525,484,441,398,353,308,262,215,168,120,72,24
                                 };

void SpwmInit(void)
{     


    SysCtlPWMClockSet(SYSCTL_PWMDIV_64);                      // PWM时钟源64分频    
 
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);             // 使能PD口外设 
    
 SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM);               // 使能PWM外设  

 GPIOPinTypePWM(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1);// 设置PD0,PD1为PWM0和PWM1
  
    PWMGenConfigure(PWM_BASE, PWM_GEN_0,         // 设置PWM发生器0为上下计数方式,两路PWM不同步 
                    PWM_GEN_MODE_UP_DOWN | PWM_GEN_MODE_NO_SYNC | PWM_GEN_ACT_ZERO | PWM_GEN_ACT_ONE <<6);
                    //PWM0A 在计数器为0时,输出 为低电平,与比较器A值相等时输出为高电平 。 
 
 PWMOutputInvert(PWM_BASE, PWM_OUT_0_BIT | PWM_OUT_1_BIT,true);   //设置PWM两路反相

 PWMGenPeriodSet(PWM_BASE, PWM_GEN_0, 1000);             // 设置两路PWM的共同周期

                      

    PWMDeadBandEnable(PWM_BASE,PWM_GEN_0,15,15);     //死区时间设置   
  
 PWMPulseWidthSet(PWM_BASE, PWM_OUT_0, spwmwidth[16]);            // 分别设置两路PWM的匹配值
  
   // PWMPulseWidthSet(PWM_BASE, PWM_OUT_1, 1000);
 
    PWMOutputState(PWM_BASE, PWM_OUT_0_BIT | PWM_OUT_1_BIT, true);// 使能PWM0和PWM1

 PWMGenEnable(PWM_BASE, PWM_GEN_0);                            // 使能PWM发生器0
 HWREG(PWM_BASE+0X044)|=0x01;
//    PWMGenIntRegister(PWM_BASE, PWM_GEN_0,*SpwmISRHandler) ;

     PWMIntEnable(PWM_BASE,PWM_INT_GEN_0);                //中断使能  WM发生器0模块    
     IntEnable(INT_PWM0);
}

#endif

/***********中断程序*****************************************************************************/
void  SpwmISRHandler (void)      
{
             
   static INT16U  count;
 
            #if OS_CRITICAL_METHOD == 3
                OS_CPU_SR cpu_sr;
            #endif

            OS_ENTER_CRITICAL();                       
            OSIntNesting++;
            OS_EXIT_CRITICAL();
     

   PWMGenIntClear(PWM_BASE, PWM_GEN_0,PWMIntStatus(PWM_BASE, true)|PWM_INT_GEN_0 );//清除中断 
   PWMPulseWidthSet(PWM_BASE, PWM_OUT_0, spwmwidth[count]);
   if (count>=63||count<=0 ){
                   count=1 ;
              }
             else {
                    count++;
              }

         OSIntExit();
}

关键字:ARM  PWM模块  SPWM波 引用地址:如何利用ARM里的PWM模块产生SPWM波

上一篇:嵌入式linux-arm交叉编译工具链的构建
下一篇:关于MDK-NAND FLASH下载的若干问题

推荐阅读最新更新时间:2024-03-16 15:04

医疗电子平台选择:FPGA、ARM、X86、DSP还是GPU?
  “迈瑞对于处理器平台的选择有两个看似矛盾的原则:‘多’和‘少’。其中‘多’是指多样性,我们知道无论是DSP、ARM、X86还是FPGA、GPU,每个平台都有各自的优点和缺陷,因此在设计产品时就可以根据他们的特点进行选择和搭配,处理器平台的多样性以及合理的搭配可以使产品更具有竞争力。”在日前举办的第三届中国国际医疗电子技术大会(CMET2010)上,深圳迈瑞生物医疗电子硬件技术委员会执行主任、系统工程师姚力与大家分享了迈瑞选择处理器平台的秘诀,“‘少’则是指的尽最大可能的减少处理器种类,多种处理器平台不但会给制造方面带来麻烦,在研发方面也会大大增加企业人力和资金的投入,每采用一个新的处理器平台都需要购买新的软件、重新培训工程师等
[医疗电子]
医疗电子平台选择:FPGA、<font color='red'>ARM</font>、X86、DSP还是GPU?
ARM发布史上最强显示控制器:2.5K/4K屏有福了
ARM今天宣布推出其史上最强性能、最高能效的显示控制器 Mali-DP650 ,重点强化了对设备屏幕分辨率的支持。 Mali-DP650搭配ARM CoreLink MMU-500系统总线,可以支持各种不同分辨率,尤其是优化了对2560 1600(平板机)、2560 1440(手机)这种2.5K屏的支持,同时也能轻松支持3840 2160 4K分辨率和60fps帧率,并且能将4K视频从移动设备流传输到 大屏显示器上进行播放。 相比于上代Mali-DP550,它还将AXI总线位宽翻番到了128-bit,支持MMU预取、更多的4K复合层,对内存延迟的处理也更好。
[嵌入式]

ARM的合作伙伴已数不胜数,这足以证明ARM的受欢迎程度以及ARM阵营的强大。ARM之所以能够成为行业内领先的公司,一部分原因是ARM自身基于低功耗、高性

三星电子(Samsung Electronics)宣布,将开始量产的光传感器一体化设计的大尺寸液晶显示器(LCD),此为光电产业创举。光传感器一体化LCD是利用红外线,直接辨认面板上物体反射的影像,比传统的触控面板(Touch SensPanel;TSP)具有更细腻的触碰辨识功能。 据悉,三星与微软(Microsoft)共同开发的平板电脑(Tablet PC)SUR40,将会搭载此新型面板,让SUR40还未开卖就引起众所瞩目,目前在23个国家开始接受预订,上市价格为8,400美元,比前一代产品12,500美元的价格更加吸引人,预计可在2012年初出货。 三星研发的SUR40平板电脑为40?大尺寸屏幕,画面为16:9,并拥有
[工业控制]
人工智能技术阵营众多 ARM专注后端控制技术
人工智慧(AI)可说是近期科技产业热门关键技术,各大科技大厂像是Google、英特尔(Intel)、NVIDIA更是磨刀霍霍一窝蜂开始投入该领域的技术研发。不过,安谋国际(ARM)认为,人工智慧领域的技术阵营众多,现阶段ARM选择深耕后端控制技术,以支持各式各样的人工智慧应用。 ARM全球市场行销暨策略联盟副总裁Ian Ferguson指出,目前人工智慧市场尚未尚未定于一尊,各家厂商都有自己的人工智慧实作方法。有些厂商采用现场可编程闸阵列(FPGA)技术,有些厂商则是使用GPU搭配ARM处理器,或者是采用自己客制化引擎的厂商来实作人工智慧。因此,针对人工智慧,ARM现阶段的重点是聚焦于建立基础组件和后端控制技术,以协助合作夥伴
[单片机]
基于ARM与低成本MEMS器件的AHRS设计
引言 航向姿态参考系统(Attitude and Heading Reference System,AHRS)能够提供航向、横滚和侧翻等姿态信息,机械陀螺仪及光纤陀螺仪等高精度惯性导航器件价格昂贵,难以得到推广。目前MEMS传感器在消费类电子产品中得到广泛应用,但是MEMS角速率陀螺仪存在严重的零点漂移和随机误差,在捷联惯性导航解算中会产生积分误差,难以达到应用的精度。加速度计和磁场计能分别测量出重力加速度和地磁场这两个不相关的三维矢量,可以作为平台姿态的观测矢量来校准陀螺仪。扩展卡尔曼滤波可以结合这几种传感器的特点,以陀螺仪测量得到的角速率作预测更新,以重力加速度和磁场观测更新,得到更高精度的姿态角信息。 1 硬件结构 M
[单片机]
基于<font color='red'>ARM</font>与低成本MEMS器件的AHRS设计
Azure ARM (3) ARM支持的服务类型
  《 Windows Azure Platform 系列文章目录 》   我们在使用ARM创建资源的时候,首先要确认哪些Azure服务,支持ARM模式。   具体内容,我们可以参考连接: https://azure.microsoft.com/en-us/documentation/articles/resource-manager-supported-services/   这里特别强调一下Azure Virtual Machine虚拟机,Azure VM分为两种模式:ASM和ARM。   我们在老的Portal( http://manage.windowsazure.cn ),创建的虚拟机都是ASM模式   而我们在新
[单片机]
Azure <font color='red'>ARM</font> (3) <font color='red'>ARM</font>支持的服务类型
基于ARM和Linux交叉开发环境的搭建
摘要:交叉开发环境是嵌入式Linux开发的基础.后续的开发过程几乎都是基于此环境的。而ARM作为一种高性能、低成本的嵌入式RISC微处理器。已成为应用最广泛的嵌入式处理器。本文内容包括基于32位ARM920T核“GEC2410”开发板的硬件结构和嵌入式Linux交叉开发环境的概念和配置.开发工具的使用以及交叉调试器制作的方法。利用虚拟机在Windows操作系统下,为“GEC2410”开发板搭建了一个嵌入式Linux的运行平台。 关键词:交叉开发环境;ARM;Linux 0 引言 目前,随着ARM技术的日益成熟和广泛应用,基于ARM核的微处理器已经成为嵌入式市场的主流。而建立面向ARM构架的嵌入式操作系统也就成为当前研究
[工业控制]
基于<font color='red'>ARM</font>和Linux交叉开发环境的搭建
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved