嵌入式——1138纯净版代码(PWM)


这些是我自己常用的代码,比官方的要简洁些,主要是自用,还有相关模块,使用代码。

具体文件可以去我github上下载。

pwm简介

  脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

  脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。

  PWM控制技术以其控制简单,灵活和动态响应好的优点而成为电力电子技术最广泛应用的控制方式,也是人们研究的热点。由于当今科学技术的发展已经没有了学科之间的界限,结合现代控制理论思想或实现无谐振波开关技术将会成为PWM控制技术发展的主要方向之一。其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置,来实现晶体管或MOS管导通时间的改变,从而实现开关稳压电源输出的改变。这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。   

源码main函数

#include  "systemInit.h"
#include  <ctype.h>
#include  <timer.h>
#define  PART_LM3S1138
#include  <pin_map.h>
#include <math.h>

int T1A , T1B , T2A , T2B ;

void Moto_Init(void){ //³õʼ»¯µç»ú

  SysCtlPeriEnable(SYSCTL_PERIPH_TIMER1);                 //  ʹÄÜTIMER1Ä£¿é
  SysCtlPeriEnable(SYSCTL_PERIPH_TIMER2);                 //  ʹÄÜTIMER2Ä£¿é

  SysCtlPeriEnable(CCP2_PERIPH);                          //  ʹÄÜCCP2ËùÔÚµÄGPIO¶Ë¿Ú
  SysCtlPeriEnable(CCP3_PERIPH);                          //  ʹÄÜCCP3ËùÔÚµÄGPIO¶Ë¿Ú
  SysCtlPeriEnable(CCP4_PERIPH);                          //  ʹÄÜCCP4ËùÔÚµÄGPIO¶Ë¿Ú
  SysCtlPeriEnable(CCP5_PERIPH);                          //  ʹÄÜCCP5ËùÔÚµÄGPIO¶Ë¿Ú

  GPIOPinTypeTimer(CCP2_PORT, CCP2_PIN);                  //  ÉèÖÃÏà¹Ø¹Ü½ÅΪTimer¹¦ÄÜ
  GPIOPinTypeTimer(CCP3_PORT, CCP3_PIN);                  //  ÉèÖÃÏà¹Ø¹Ü½ÅΪTimer¹¦ÄÜ
  GPIOPinTypeTimer(CCP4_PORT, CCP4_PIN);                  //  ÉèÖÃÏà¹Ø¹Ü½ÅΪTimer¹¦ÄÜ
  GPIOPinTypeTimer(CCP5_PORT, CCP5_PIN);                  //  ÉèÖÃÏà¹Ø¹Ü½ÅΪTimer¹¦ÄÜ

  TimerConfigure(TIMER1_BASE, TIMER_CFG_16_BIT_PAIR |     //  ÅäÖÃTimerΪ˫16λPWM
                 TIMER_CFG_A_PWM |
                   TIMER_CFG_B_PWM);
  TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR |     //  ÅäÖÃTimerΪ˫16λPWM
                 TIMER_CFG_A_PWM |
                   TIMER_CFG_B_PWM);


  TimerControlLevel(TIMER1_BASE, TIMER_BOTH, true);      //  ¿ØÖÆPWMÊä³ö·´Ïà
  TimerControlLevel(TIMER2_BASE, TIMER_BOTH, true);
  TimerLoadSet(TIMER1_BASE, TIMER_BOTH, 1000);           //  ÉèÖÃTimerBoth³õÖµ
  TimerLoadSet(TIMER2_BASE, TIMER_BOTH, 1000);

  TimerMatchSet(TIMER1_BASE, TIMER_A, 0);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
  TimerMatchSet(TIMER1_BASE, TIMER_B, 0);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
  TimerMatchSet(TIMER2_BASE, TIMER_A, 0);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
  TimerMatchSet(TIMER2_BASE, TIMER_B, 0);     //  ÉèÖÃTimerBÆ¥ÅäÖµ

  TimerEnable(TIMER1_BASE, TIMER_BOTH);                  //  ʹÄÜTimer¼ÆÊý£¬PWM¿ªÊ¼Êä³ö
  TimerEnable(TIMER2_BASE, TIMER_BOTH);
}



//  Ö÷º¯Êý£¨³ÌÐòÈë¿Ú£©
int main(void)
{
  jtagWait();                                             //  ·ÀÖ¹JTAGʧЧ£¬ÖØÒª£¡
  clockInit();                                            //  ʱÖÓ³õʼ»¯£º¾§Õñ£¬6MHz
  Moto_Init();

  while(1)
  {
    TimerMatchSet(TIMER1_BASE, TIMER_A, T1A);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
    TimerMatchSet(TIMER1_BASE, TIMER_B, T1B);     //  ÉèÖÃTimerBÆ¥ÅäÖµ 
    TimerMatchSet(TIMER2_BASE, TIMER_A, T2A);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
    TimerMatchSet(TIMER2_BASE, TIMER_B, T2B);     //  ÉèÖÃTimerBÆ¥ÅäÖµ
  }
}


文章作者: michaelming
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 michaelming !
 上一篇
嵌入式—LM3S1138介绍 嵌入式—LM3S1138介绍
嵌入式—LM3S1138介绍这是我用的较久的一款芯片,无论是电赛还是课程设计,兼容性都很好,现在想把所有数据整理一下,这是开发板的相关文档。后面会有相关代码介绍,和案例介绍。 EasyARM1138——内嵌 USB 仿真器的 Cortex-
2018-12-09
下一篇 
嵌入式——1138纯净版代码(UART2A) 嵌入式——1138纯净版代码(UART2A)
这些是我自己常用的代码,比官方的要简洁些,主要是自用,还有相关模块,使用代码。 具体文件可以去我github上下载。 UART 简介计算机与外部设备的连接,基本上使用了两类接口:串行接口与并行接口。并行接口是指数据的各个位同时进行传送,其特
2018-12-09
  目录